diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index bdb0cab..0000000 --- a/.gitattributes +++ /dev/null @@ -1,17 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92a2798 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.sass-cache/** +/node_modules/** +/package.json diff --git a/Gruntfile.coffee b/Gruntfile.coffee new file mode 100644 index 0000000..0d541fa --- /dev/null +++ b/Gruntfile.coffee @@ -0,0 +1,96 @@ +module.exports = (grunt) -> + + SRC_DIR = "src" + SRC_COFFEE_DIR = "#{SRC_DIR}/coffee/class" + SRC_SASS_DIR = "#{SRC_DIR}/sass" + + SRC_COFFEE_FILES = [] + SRC_SASS_FILES = [] + + pushFiles = (arr, dir) -> + grunt.file.recurse dir, (abspath, rootdir, subdir, filename) -> + arr.push "#{rootdir}/#{filename}" if not grunt.file.isDir abspath + + pushFiles SRC_SASS_FILES, SRC_SASS_DIR + + #Order is important, some classes extend others + SRC_COFFEE_FILES.push "#{SRC_DIR}/coffee/#{file}.coffee" for file in [ + "factory-start" + + "class/Registry" + + "private" + "public" + + #Classes + "class/CssController" + "class/EventListener" + "class/Widget" + "class/Composite" + "class/Label" + "class/Image" + "class/Button" + "class/ToggleButton" + "class/ButtonGroup" + "class/Text" + "class/Spinner" + "class/Switch" + "class/Check" + "class/Radio" + "class/AbstractItemList" + "class/List" + "class/Combo" + "class/Table" + "class/TabFolder" + "class/ProgressBar" + "class/FileChooser" + "class/ColorPicker" #Wrappers + "class/YTVideo" + + "events" + + "factory-end" + ] + + DIST_DIR = "dist" + DIST_JS_DIR = "#{DIST_DIR}/js/lib" + DIST_CSS_DIR = "#{DIST_DIR}/css" + + grunt.initConfig + pkg: grunt.file.readJSON "package.json" + banner: """ + Web Widget Toolkit (WWT) v<%= pkg.version %> + By <%= pkg.author %> + """ + coffee: + dist: + options: + join: true + joinExt: ".src.coffee" + files: + "#{DIST_JS_DIR}/wwt.js": SRC_COFFEE_FILES + uglify: + dist: + src: "#{DIST_JS_DIR}/wwt.js" + dest: "#{DIST_JS_DIR}/wwt.min.js" + sass: + dist: + options: + sourceMap: false + style: "expanded" + loadPath: "#{SRC_DIR}/sass-include/" + files: [ + { + expand: true + cwd: "#{SRC_SASS_DIR}/" + src: ["**/*.sass"] + ext: ".css" + dest: "dist/css/" + } + ] + + grunt.loadNpmTasks "grunt-contrib-coffee" + grunt.loadNpmTasks "grunt-contrib-uglify" + grunt.loadNpmTasks "grunt-contrib-sass" + + grunt.registerTask "default", "Default task", ["coffee", "uglify", "sass"] diff --git a/LICENSE-SPECTRUM b/LICENSE-SPECTRUM new file mode 100644 index 0000000..c9b44cb --- /dev/null +++ b/LICENSE-SPECTRUM @@ -0,0 +1,18 @@ +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/dist/css/demo-wwt.css b/dist/css/demo-wwt.css new file mode 100644 index 0000000..fc7c5ca --- /dev/null +++ b/dist/css/demo-wwt.css @@ -0,0 +1,61 @@ +#buttons { + width: 25%; + display: inline-block; + float: left; +} +#buttons > .Button, #buttons > .ToggleButton, #buttons .ButtonGroup { + width: calc(100% - 5px - .5em); +} + +#textboxes { + width: 15%; + display: inline-block; + float: left; +} +#textboxes .Text, #textboxes .TextArea { + width: calc(100% - 5px - .5em); +} + +#checkRadio { + width: 10%; + display: inline-block; + float: left; +} +#checkRadio .RadioContainer, #checkRadio .CheckContainer { + width: calc(100% - .5em); +} + +#spinners { + width: 5%; + display: inline-block; + float: left; +} +#spinners .Spinner { + width: calc(100% - .5em); +} + +#pickers { + width: 10%; + float: left; +} + +#lists { + width: 20%; + float: left; +} +#lists .List { + width: calc(50% - 4px - .25em); + margin-right: 0; +} +#lists .List:first-child { + margin-right: 0.25em; +} +#lists .Combo, #lists .ComboEditable, #lists .Table { + width: calc(100% - 2px); +} + +#progressEnabled { + width: 50em; +} + +/*# sourceMappingURL=demo-wwt.css.map */ diff --git a/dist/css/demo-wwt.css.map b/dist/css/demo-wwt.css.map new file mode 100644 index 0000000..d9963dd --- /dev/null +++ b/dist/css/demo-wwt.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "AAAA,QAAQ;EACN,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;;AAEX,mEAAwC;EACtC,KAAK,EAAE,uBAAuB;;;AAElC,UAAU;EACR,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;;AAEX,sCAAgB;EACd,KAAK,EAAE,uBAAuB;;;AAElC,WAAW;EACT,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;;AAEX,wDAAgC;EAC9B,KAAK,EAAE,iBAAiB;;;AAE5B,SAAS;EACP,KAAK,EAAE,EAAE;EACT,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;;AAEX,kBAAQ;EACN,KAAK,EAAE,iBAAiB;;;AAE5B,QAAQ;EACN,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;;;AAEb,MAAM;EACJ,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;;AAEX,YAAK;EACH,KAAK,EAAE,uBAAuB;EAC9B,YAAY,EAAE,CAAC;;AAEjB,wBAAiB;EACf,YAAY,EAAE,MAAK;;AAErB,mDAA8B;EAC5B,KAAK,EAAE,gBAAgB;;;AAE3B,gBAAgB;EACd,KAAK,EAAE,IAAI", +"sources": ["../../src/sass/demo-wwt.sass"], +"names": [], +"file": "demo-wwt.css" +} diff --git a/dist/css/laf-aqua.css b/dist/css/laf-aqua.css new file mode 100644 index 0000000..828bf10 --- /dev/null +++ b/dist/css/laf-aqua.css @@ -0,0 +1,535 @@ +@charset "UTF-8"; +html, body { + padding: 0; + margin: 0; + font-family: "Trebuchet MS"; +} + +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.sp-dd { + display: none; +} + +.sp-preview { + margin: 0; +} + +.sp-replacer { + padding: 0; +} + +.no-resize { + resize: none; +} + +.resize-v { + resize: vertical; +} + +.resize-h { + resize: horizontal; +} + +.resize-all { + resize: both; +} + +.Button, .ToggleButton, +.Text, .TextArea, .Spinner, +.CheckContainer, .RadioContainer, +.ColorPicker, .FileChooser + label, +.Combo, .ComboEditable, +.Table, +.TabFolder, +.ProgressBar { + margin: 0.25em; +} + +#wwt_tooltip { + background-color: rgba(0, 0, 0, 0.65); + border: 1px solid; + position: absolute; + padding: 2px 5px; + max-width: 20%; + font-size: 10pt; + z-index: 10000; +} + +.Button, .ToggleButton, .FileChooser + label, .Combo, .ComboEditableButton { + border: 1px solid; + color: inherit; + font-family: inherit; + font-size: inherit; + padding-left: 5px; + padding-right: 5px; + line-height: 1.5em; + text-align: center; + display: inline-block; +} +.Button .title, .ToggleButton .title, .FileChooser + label .title, .Combo .title, .ComboEditableButton .title { + cursor: default; +} +.Button .title.invisible, .ToggleButton .title.invisible, .FileChooser + label .title.invisible, .Combo .title.invisible, .ComboEditableButton .title.invisible { + opacity: 0; +} + +.Button:focus, .ToggleButton:focus, .Combo:focus { + outline: 0; +} + +.Button.disabled, .Button:hover.disabled, +.ToggleButton.state-out.disabled, .ToggleButton.state-in.disabled, +.ToggleButton.state-out.disabled:hover, .ToggleButton.state-in.disabled:hover, +.Spinner.disabled .SpinnerIncrement, .Spinner.disabled .SpinnerIncrement:hover, +.Spinner.disabled .SpinnerDecrement, .Spinner.disabled .SpinnerDecrement:hover, +.FileChooser.disabled + label, .FileChooser.disabled + label:hover, +.Combo.disabled, .Combo.disabled:hover, +.ComboEditable.disabled .ComboEditableButton, .ComboEditable.disabled .ComboEditableButton:hover { + background: none; +} + +.ButtonGroup { + margin: 0.25em; + display: inline-block; +} + +.ButtonGroup > .Button, .ButtonGroup > .ToggleButton { + margin: 0; +} + +.ButtonGroup > .Button:first-child, .ButtonGroup > .ToggleButton:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ButtonGroup > .Button:last-child, .ButtonGroup > .ToggleButton:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child):not(:first-child), .ButtonGroup > .ToggleButton:not(:last-child):not(:first-child) { + border-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child), .ButtonGroup > .ToggleButton:not(:last-child) { + border-right: none; +} + +.FileChooser { + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -1; +} + +.Text, .TextArea, .sp-input { + border: 1px solid; + font-size: inherit; + font-family: inherit; + padding: 3px; + height: calc(1.5em + 2px); +} + +.Text:focus, .TextArea:focus, .sp-input:focus { + outline: none; +} + +.TextArea { + height: initial; +} + +.SpinnerButtonsContainer { + display: inline-block; + float: right; + width: 1em; +} + +.SpinnerIncrement, .SpinnerDecrement { + border: 1px solid; + border-left: none; + display: inline-block; + float: left; + width: 1em; + text-align: center; +} + +.SpinnerNumber { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em); +} + +.SpinnerIncrement { + height: calc(.75em - 1px); +} + +.SpinnerDecrement { + height: calc(.75em); + border-top: none; +} + +.SpinnerUpArrow, .SpinnerDownArrow { + width: 0; + height: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} + +.SpinnerUpArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-bottom: 0.25em solid; +} + +.SpinnerDownArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-top: 0.25em solid; +} + +.Spinner.disabled .SpinnerUpArrow { + border-bottom: 0.25em solid; +} + +.Spinner.disabled .SpinnerDownArrow { + border-top: 0.25em solid; +} + +.Spinner, .ComboEditable { + display: inline-block; +} + +.SwitchContainer, .CheckContainer, .RadioContainer { + display: inline-block; +} + +.Check:not(old), +.Radio:not(old), +.Switch:not(old) { + width: 2em; + margin: 0; + padding: 0; + font-size: 1em; + opacity: 0; +} + +.Check:not(old) + label, +.Radio:not(old) + label { + display: inline-block; + margin-left: -2em; + line-height: 1.5em; +} + +.Check:not(old) + label .outer, +.Radio:not(old) + label .outer { + display: inline-block; + width: 0.875em; + height: 0.875em; + margin: 0.25em 0.5em 0.25em 0.25em; + border: 0.0625em solid; + border-radius: 0.25em; + vertical-align: bottom; +} + +.Radio:not(old) + label .outer { + border-radius: 1em; +} + +.Check:not(old):checked + label .outer:before { + content: "✓"; + display: block; + width: 1em; + font-size: 0.875em; + line-height: 1em; + text-align: center; + font-weight: bold; +} + +.Radio:not(old):checked + label .inner { + display: block; + width: 0.5em; + height: 0.5em; + margin: 0.125em; + border: 0.0625em solid; + border-radius: 1em; +} + +.List { + display: inline-block; + padding: 0; + margin: 0.25em; + border: 1px solid; + overflow-y: auto; +} + +.List.h-scroll { + overflow-x: auto; +} + +.ListItem { + cursor: default; + padding: 0.175em 0.5em; +} + +.Combo .arrow-container { + width: 1em; + display: inline-block; + float: right; +} + +.Combo .arrow-up-container { + margin-top: 0.45em; +} + +.Combo .arrow-up-container, .Combo .arrow-down-container { + display: inline-block; + float: left; + line-height: initial; + width: 1em; + margin-left: 0.5em; + height: 0.4em; +} + +.Combo .arrow-up, .Combo .arrow-down { + width: 0; + height: 0; + border-left: 0.2em solid transparent; + border-right: 0.2em solid transparent; +} + +.Combo .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo .arrow-down { + border-top: 0.2em solid; +} + +.Combo.disabled .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo.disabled .arrow-down { + border-top: 0.2em solid; +} + +.Combo { + text-align: left; +} + +.ComboItemList { + position: absolute; + list-style-type: none; + padding: 0; + margin: 0; + border: 1px solid; + overflow: auto; + border-top: none; + z-index: 10000; +} + +.ComboItemList.hidden { + display: none; +} + +.ComboItemList:not(.hidden) { + z-index: 1; +} + +.ComboItemList.overlayed { + border-top: 1px solid; + -webkit-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); +} + +.ComboItem { + cursor: default; + padding: 0.175em 5px; +} + +.ComboItem.selected { + display: none; +} + +.ComboEditable .Text { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em - 3px); +} + +.ComboEditableButtonContainer { + margin-top: 0; + border-left: none; + display: inline-block; + float: right; +} + +.ComboEditableButton { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: none; + margin-left: 0; + height: 1.5em; +} + +.Combo.listShown, .ComboEditable.listShown .Text { + border-bottom-left-radius: 0; +} + +.Combo.listShown, .ComboEditable.listShown .ComboEditableButton { + border-bottom-right-radius: 0; +} + +.ComboEditableArrowContainer { + display: inline-block; + margin-top: 0.75em; +} + +.ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; +} + +.ComboEditable.disabled .ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; +} + +.Table { + border: 1px solid; + border-collapse: collapse; + font-size: inherit; + font-family: inherit; +} + +.TableHeader, .TableRowValue { + cursor: default; + padding: 5px; +} + +.TableHeader, .TableRow, .TableRowValue { + border: 1px solid; +} + +.ColorPickerReplacer, .ColorPickerReplacer:hover, .ColorPickerReplacer.sp-disabled, .ColorPicker.sp-active { + border: 1px solid; +} + +.ColorPickerReplacer { + margin: 0.25em; + height: calc(1.5em - 2px); + width: calc(1.75em - 2px); + border: 1px solid; + cursor: default; +} +.ColorPickerReplacer .sp-preview { + width: calc(1.25em - 4px); + height: calc(1em - 4px); + margin: 0.25em 0 0 0.25em; + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled > sp-preview { + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled, ColorPickerReplacer.sp-disabled:hover { + background: none; +} + +.ColorPickerContainer { + border: 1px solid; +} + +.sp-picker-container { + border-left: 1px solid; +} + +.sp-palette-container { + border-right: 1px solid; +} + +.sp-palette-disabled .sp-picker-container { + border-left: none; +} + +.sp-input:focus { + border: 1px solid; +} + +.TabFolder { + display: inline-block; +} + +.TabContainer { + width: 100%; + display: inline-block; +} + +.Tab { + display: inline-block; + padding: 5px; + border: 1px solid; + border-bottom: none; + cursor: default; +} + +.Tab:not(:first-child) { + border-left: none; +} + +.TabContentContainer { + width: calc(100% - 2px - 10px); + border: 1px solid; + padding: 5px; + overflow-y: auto; +} + +.ProgressBar { + height: 1em; + border: 1px solid; + display: inline-block; +} + +.ProgressBarInner { + height: 100%; + transition: width 0.3s ease; +} + +.ProgressBar:not(.full):not(.indeterminate) .ProgressBarInner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ProgressBar.indeterminate { + overflow-x: hidden; +} +.ProgressBar.indeterminate .ProgressBarInner { + animation: IndeterminateProgress 1.25s linear 0s infinite alternate; +} + +@keyframes IndeterminateProgress { + 0% { + width: 20%; + margin-left: 0; + } + 100% { + width: 20%; + margin-left: 80%; + } +} + +/*# sourceMappingURL=laf-aqua.css.map */ diff --git a/dist/css/laf-aqua.css.map b/dist/css/laf-aqua.css.map new file mode 100644 index 0000000..c037b4f --- /dev/null +++ b/dist/css/laf-aqua.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../src/sass-include/_common.sass","../../src/sass-include/_tooltip.sass","../../src/sass-include/_button.sass","../../src/sass-include/_text.sass","../../src/sass-include/_spinner.sass","../../src/sass-include/_switch.sass","../../src/sass-include/_list.sass","../../src/sass-include/_combo.sass","../../src/sass-include/_table.sass","../../src/sass-include/_color-picker.sass","../../src/sass-include/_tab-folder.sass","../../src/sass-include/_progress-bar.sass"], +"names": [], +"file": "laf-aqua.css" +} diff --git a/dist/css/laf-default.css b/dist/css/laf-default.css new file mode 100644 index 0000000..6b1497e --- /dev/null +++ b/dist/css/laf-default.css @@ -0,0 +1,715 @@ +@charset "UTF-8"; +html, body { + padding: 0; + margin: 0; + color: #CCC; + background-color: #1A1A1A; + font-family: "Trebuchet MS"; +} + +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.sp-dd { + display: none; +} + +.sp-preview { + margin: 0; +} + +.sp-replacer { + padding: 0; +} + +.no-resize { + resize: none; +} + +.resize-v { + resize: vertical; +} + +.resize-h { + resize: horizontal; +} + +.resize-all { + resize: both; +} + +.Button, .ToggleButton, +.Text, .TextArea, .Spinner, +.CheckContainer, .RadioContainer, +.ColorPicker, .FileChooser + label, +.Combo, .ComboEditable, +.Table, +.TabFolder, +.ProgressBar { + margin: 0.25em; +} + +#wwt_tooltip { + background-color: rgba(0, 0, 0, 0.65); + border-radius: 5px; + border: 1px solid #000; + color: #CCC; + position: absolute; + padding: 2px 5px; + max-width: 20%; + font-size: 10pt; + z-index: 10000; +} + +.Button, .ToggleButton, .FileChooser + label, .Combo, .ComboEditableButton { + border-radius: 5px; + border: 1px solid #000; + background: linear-gradient(#313131, #222); + color: inherit; + font-family: inherit; + font-size: inherit; + padding-left: 5px; + padding-right: 5px; + line-height: 1.5em; + text-align: center; + display: inline-block; +} +.Button .title, .ToggleButton .title, .FileChooser + label .title, .Combo .title, .ComboEditableButton .title { + cursor: default; +} +.Button .title.invisible, .ToggleButton .title.invisible, .FileChooser + label .title.invisible, .Combo .title.invisible, .ComboEditableButton .title.invisible { + opacity: 0; +} + +.Button:focus, .ToggleButton:focus, .Combo:focus { + outline: 0; +} + +.Button:hover, .ToggleButton:not(.state-in):hover, .FileChooser + label:hover, .Combo:hover, .ComboEditableButton:hover { + background: linear-gradient(#414141, #333); +} + +.Button.disabled, .Button:hover.disabled, +.ToggleButton.state-out.disabled, .ToggleButton.state-in.disabled, +.ToggleButton.state-out.disabled:hover, .ToggleButton.state-in.disabled:hover, +.Spinner.disabled .SpinnerIncrement, .Spinner.disabled .SpinnerIncrement:hover, +.Spinner.disabled .SpinnerDecrement, .Spinner.disabled .SpinnerDecrement:hover, +.FileChooser.disabled + label, .FileChooser.disabled + label:hover, +.Combo.disabled, .Combo.disabled:hover, +.ComboEditable.disabled .ComboEditableButton, .ComboEditable.disabled .ComboEditableButton:hover { + color: #444; + background: none; + background-color: #101010; +} + +.ToggleButton.state-in, .Button:active, .ToggleButton:active, .FileChooser + label:active { + background: linear-gradient(#181818, #282828); +} + +.ToggleButton.state-in:hover { + background: linear-gradient(#282828, #383838); +} + +.ToggleButton.state-in.disabled, .ToggleButton.state-in.disabled:hover { + background: linear-gradient(#040404, #141414); +} + +.ButtonGroup { + margin: 0.25em; + display: inline-block; +} + +.ButtonGroup > .Button, .ButtonGroup > .ToggleButton { + margin: 0; +} + +.ButtonGroup > .Button:first-child, .ButtonGroup > .ToggleButton:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ButtonGroup > .Button:last-child, .ButtonGroup > .ToggleButton:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child):not(:first-child), .ButtonGroup > .ToggleButton:not(:last-child):not(:first-child) { + border-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child), .ButtonGroup > .ToggleButton:not(:last-child) { + border-right: none; +} + +.FileChooser { + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -1; +} + +.Text, .TextArea, .sp-input { + border: 1px solid #000; + background-color: #222; + color: #CCC; + font-size: inherit; + font-family: inherit; + padding: 3px; + border-radius: 5px; + height: calc(1.5em + 2px); +} + +.Text.disabled, .TextArea.disabled, +.Spinner.disabled .SpinnerNumber, .Spinner.disabled .SpinnerIncrement, .Spinner.disabled .SpinnerDecrement, +.ComboEditable.disabled .Text { + background-color: #101010; + color: #444; +} + +.Text::placeholder { + color: #AAA; +} + +.Text::-webkit-input-placeholder, .TextArea::-webkit-input-placeholder { + color: #AAA; +} + +.Text:-moz-placeholder, .TextArea:-moz-placeholder { + color: #AAA; +} + +.Text::-moz-placeholder, .TextArea::-moz-placeholder { + color: #AAA; +} + +.Text::-webkit-input-placeholder, .TextArea::-webkit-input-placeholder { + color: #AAA; +} + +.Text:-ms-input-placeholder, .TextArea:-ms-input-placeholder { + color: #AAA; +} + +.Text::placeholder, .TextArea::placeholder { + color: #AAA; +} + +.Text.disabled::-webkit-input-placeholder, .TextArea.disabled::-webkit-input-placeholder { + color: #444; +} + +.Text.disabled::-moz-placeholder, .TextArea.disabled::-moz-placeholder { + color: #444; +} + +.Text.disabled:-moz-placeholder, .TextArea.disabled:-moz-placeholder { + color: #444; +} + +.Text.disabled:-ms-input-placeholder, .TextArea.disabled:-ms-input-placeholder { + color: #444; +} + +.Text.disabled::placeholder, .TextArea.disabled::placeholder { + color: #444; +} + +.Text:focus, .TextArea:focus, .sp-input:focus { + outline: none; + background-color: #333; +} + +.TextArea { + height: initial; +} + +.SpinnerButtonsContainer { + background: linear-gradient(#313131, #222); + display: inline-block; + float: right; + width: 1em; +} + +.SpinnerIncrement, .SpinnerDecrement { + border: 1px solid #000; + border-left: none; + display: inline-block; + float: left; + width: 1em; + text-align: center; +} + +.SpinnerIncrement:hover, .SpinnerDecrement:hover { + background: linear-gradient(#414141, #333); +} + +.SpinnerNumber { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em); +} + +.SpinnerIncrement { + height: calc(.75em - 1px); +} + +.SpinnerDecrement { + height: calc(.75em); + border-top: none; +} + +.SpinnerUpArrow, .SpinnerDownArrow { + width: 0; + height: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} + +.SpinnerUpArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-bottom: 0.25em solid #CCC; +} + +.SpinnerDownArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-top: 0.25em solid #CCC; +} + +.Spinner.disabled .SpinnerUpArrow { + border-bottom: 0.25em solid #444; +} + +.Spinner.disabled .SpinnerDownArrow { + border-top: 0.25em solid #444; +} + +.Spinner, .ComboEditable { + display: inline-block; +} + +.SwitchContainer, .CheckContainer, .RadioContainer { + display: inline-block; +} + +.Check:not(old), +.Radio:not(old), +.Switch:not(old) { + width: 2em; + margin: 0; + padding: 0; + font-size: 1em; + opacity: 0; +} + +.CheckContainer.disabled label, +.RadioContainer.disabled label { + color: #444; +} + +.Check:not(old) + label, +.Radio:not(old) + label { + display: inline-block; + margin-left: -2em; + line-height: 1.5em; +} + +.Check:not(old) + label .outer, +.Radio:not(old) + label .outer { + display: inline-block; + width: 0.875em; + height: 0.875em; + margin: 0.25em 0.5em 0.25em 0.25em; + border: 0.0625em solid #000; + border-radius: 0.25em; + background-color: #222; + vertical-align: bottom; +} + +.Radio:not(old) + label .outer { + border-radius: 1em; +} + +.Check:not(old):checked + label .outer, +.Radio:not(old):checked + label .outer, +.Check:not(old):hover + label .outer, +.Radio:not(old):hover + label .outer { + background-color: #333; +} + +.CheckContainer.disabled label .outer, +.RadioContainer.disabled label .outer, +.CheckContainer:hover.disabled label .outer, +.RadioContainer:hover.disabled label .outer { + background-color: #101010; +} + +.Check:not(old):checked + label .outer:before { + content: "✓"; + display: block; + width: 1em; + color: #CCC; + font-size: 0.875em; + line-height: 1em; + text-align: center; + font-weight: bold; +} + +.Radio:not(old):checked + label .inner { + display: block; + width: 0.5em; + height: 0.5em; + margin: 0.125em; + border: 0.0625em solid #000; + border-radius: 1em; + background-color: #CCC; +} + +.List { + display: inline-block; + padding: 0; + margin: 0.25em; + background-color: #222; + border: 1px solid #000; + overflow-y: auto; +} + +.List.disabled { + background-color: #101010; + color: #444; +} + +.List.h-scroll { + overflow-x: auto; +} + +.ListItem { + cursor: default; + padding: 0.175em 0.5em; +} + +.ListItem.selected { + background: linear-gradient(#414141, #333); +} + +.List.disabled .ListItem:hover, .List.disabled .ListItem.selected { + background-color: #101010; +} + +.Combo .arrow-container { + width: 1em; + display: inline-block; + float: right; +} + +.Combo .arrow-up-container { + margin-top: 0.45em; +} + +.Combo .arrow-up-container, .Combo .arrow-down-container { + display: inline-block; + float: left; + line-height: initial; + width: 1em; + margin-left: 0.5em; + height: 0.4em; +} + +.Combo .arrow-up, .Combo .arrow-down { + width: 0; + height: 0; + border-left: 0.2em solid transparent; + border-right: 0.2em solid transparent; +} + +.Combo .arrow-up { + border-bottom: 0.2em solid #CCC; +} + +.Combo .arrow-down { + border-top: 0.2em solid #CCC; +} + +.Combo.disabled .arrow-up { + border-bottom: 0.2em solid #444; +} + +.Combo.disabled .arrow-down { + border-top: 0.2em solid #444; +} + +.Combo { + text-align: left; +} + +.ComboItemList { + position: absolute; + list-style-type: none; + padding: 0; + margin: 0; + border: 1px solid #000; + overflow: auto; + border-top: none; + background-color: #222; + z-index: 10000; +} + +.ComboItemList.hidden { + display: none; +} + +.ComboItemList:not(.hidden) { + z-index: 1; +} + +.ComboItemList.overlayed { + border-top: 1px solid #000; + -webkit-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); +} + +.ComboItem { + cursor: default; + padding: 0.175em 5px; +} + +.ComboItem.selected { + display: none; +} + +.ComboItem:hover { + background: linear-gradient(#414141, #333); +} + +.ComboEditable .Text { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em - 3px); +} + +.ComboEditableButtonContainer { + margin-top: 0; + border-radius: 5px; + border-left: none; + display: inline-block; + float: right; + background: linear-gradient(#313131, #222); +} + +.ComboEditableButton { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: none; + margin-left: 0; + height: 1.5em; +} + +.Combo.listShown, .ComboEditable.listShown .Text { + border-bottom-left-radius: 0; +} + +.Combo.listShown, .ComboEditable.listShown .ComboEditableButton { + border-bottom-right-radius: 0; +} + +.ComboEditableArrowContainer { + display: inline-block; + margin-top: 0.75em; +} + +.ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid #CCC; + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; +} + +.ComboEditable.disabled .ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid #444; +} + +.Table { + background-color: #222; + border: 1px solid #000; + border-collapse: collapse; + color: #CCC; + font-size: inherit; + font-family: inherit; +} + +.TableHeader { + background: linear-gradient(#414141, #333); +} + +.Table.disabled, .Table.disabled .TableRow:hover, .Table.disabled .TableHeader { + color: #444; + background-color: #101010; +} + +.TableHeader, .TableRowValue { + cursor: default; + padding: 5px; +} + +.TableHeader, .TableRow, .TableRowValue { + border: 1px solid #000; +} + +.TableRow:hover { + background: linear-gradient(#414141, #333); +} + +.ColorPickerReplacer, .ColorPickerReplacer:hover, .ColorPickerReplacer.sp-disabled, .ColorPicker.sp-active { + border: 1px solid #000; +} + +.ColorPickerReplacer { + margin: 0.25em; + height: calc(1.5em - 2px); + width: calc(1.75em - 2px); + background: linear-gradient(#313131, #222); + border: 1px solid #000; + cursor: default; +} +.ColorPickerReplacer .sp-preview { + width: calc(1.25em - 4px); + height: calc(1em - 4px); + margin: 0.25em 0 0 0.25em; + border: 1px solid #CCC; +} + +.ColorPickerReplacer.sp-disabled > sp-preview { + border: 1px solid #444; +} + +.ColorPickerReplacer:hover, .ColorPicker.sp-active, .sp-replacer.sp-active { + background: linear-gradient(#414141, #333); + border-color: #000; +} + +.ColorPickerReplacer.sp-disabled, ColorPickerReplacer.sp-disabled:hover { + background: none; + background-color: #101010; +} + +.ColorPickerContainer { + background-color: #1A1A1A; + border: 1px solid #000; +} + +.sp-picker-container { + border-left: 1px solid #000; +} + +.sp-palette-container { + border-right: 1px solid #000; +} + +.sp-palette-disabled .sp-picker-container { + border-left: none; +} + +.sp-input:focus { + border: 1px solid #000; +} + +.TabFolder { + display: inline-block; +} + +.TabContainer { + width: 100%; + display: inline-block; +} + +.Tab { + display: inline-block; + background: linear-gradient(#313131, #222); + padding: 5px; + border: 1px solid #000; + border-bottom: none; + cursor: default; +} + +.Tab:not(:first-child) { + border-left: none; +} + +.Tab:first-child { + border-top-left-radius: 5px; +} + +.Tab:last-child { + border-top-right-radius: 5px; +} + +.Tab:not(.disabled).selected { + background: linear-gradient(#181818, #282828); +} + +.Tab:not(.disabled):hover { + background: #333; +} + +.Tab.disabled { + background: #101010; +} + +.TabContentContainer { + width: calc(100% - 2px - 10px); + border: 1px solid #000; + padding: 5px; + overflow-y: auto; +} + +.ProgressBar { + height: 1em; + border: 1px solid #000; + display: inline-block; +} + +.ProgressBar, .ProgressBarInner { + border-radius: 5px; +} + +.ProgressBarInner { + height: 100%; + background-color: #333; + transition: width 0.3s ease; +} + +.ProgressBar:not(.full):not(.indeterminate) .ProgressBarInner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ProgressBar.indeterminate { + overflow-x: hidden; +} +.ProgressBar.indeterminate .ProgressBarInner { + animation: IndeterminateProgress 1.25s linear 0s infinite alternate; +} + +@keyframes IndeterminateProgress { + 0% { + width: 20%; + margin-left: 0; + } + 100% { + width: 20%; + margin-left: 80%; + } +} + +/*# sourceMappingURL=laf-default.css.map */ diff --git a/dist/css/laf-default.css.map b/dist/css/laf-default.css.map new file mode 100644 index 0000000..0e8dcfa --- /dev/null +++ b/dist/css/laf-default.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../src/sass-include/_common.sass","../../src/sass-include/_tooltip.sass","../../src/sass-include/_button.sass","../../src/sass-include/_text.sass","../../src/sass-include/_spinner.sass","../../src/sass-include/_switch.sass","../../src/sass-include/_list.sass","../../src/sass-include/_combo.sass","../../src/sass-include/_table.sass","../../src/sass-include/_color-picker.sass","../../src/sass-include/_tab-folder.sass","../../src/sass-include/_progress-bar.sass"], +"names": [], +"file": "laf-default.css" +} diff --git a/dist/css/laf-gtk.css b/dist/css/laf-gtk.css new file mode 100644 index 0000000..7cc5825 --- /dev/null +++ b/dist/css/laf-gtk.css @@ -0,0 +1,535 @@ +@charset "UTF-8"; +html, body { + padding: 0; + margin: 0; + font-family: "Trebuchet MS"; +} + +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.sp-dd { + display: none; +} + +.sp-preview { + margin: 0; +} + +.sp-replacer { + padding: 0; +} + +.no-resize { + resize: none; +} + +.resize-v { + resize: vertical; +} + +.resize-h { + resize: horizontal; +} + +.resize-all { + resize: both; +} + +.Button, .ToggleButton, +.Text, .TextArea, .Spinner, +.CheckContainer, .RadioContainer, +.ColorPicker, .FileChooser + label, +.Combo, .ComboEditable, +.Table, +.TabFolder, +.ProgressBar { + margin: 0.25em; +} + +#wwt_tooltip { + background-color: rgba(0, 0, 0, 0.65); + border: 1px solid; + position: absolute; + padding: 2px 5px; + max-width: 20%; + font-size: 10pt; + z-index: 10000; +} + +.Button, .ToggleButton, .FileChooser + label, .Combo, .ComboEditableButton { + border: 1px solid; + color: inherit; + font-family: inherit; + font-size: inherit; + padding-left: 5px; + padding-right: 5px; + line-height: 1.5em; + text-align: center; + display: inline-block; +} +.Button .title, .ToggleButton .title, .FileChooser + label .title, .Combo .title, .ComboEditableButton .title { + cursor: default; +} +.Button .title.invisible, .ToggleButton .title.invisible, .FileChooser + label .title.invisible, .Combo .title.invisible, .ComboEditableButton .title.invisible { + opacity: 0; +} + +.Button:focus, .ToggleButton:focus, .Combo:focus { + outline: 0; +} + +.Button.disabled, .Button:hover.disabled, +.ToggleButton.state-out.disabled, .ToggleButton.state-in.disabled, +.ToggleButton.state-out.disabled:hover, .ToggleButton.state-in.disabled:hover, +.Spinner.disabled .SpinnerIncrement, .Spinner.disabled .SpinnerIncrement:hover, +.Spinner.disabled .SpinnerDecrement, .Spinner.disabled .SpinnerDecrement:hover, +.FileChooser.disabled + label, .FileChooser.disabled + label:hover, +.Combo.disabled, .Combo.disabled:hover, +.ComboEditable.disabled .ComboEditableButton, .ComboEditable.disabled .ComboEditableButton:hover { + background: none; +} + +.ButtonGroup { + margin: 0.25em; + display: inline-block; +} + +.ButtonGroup > .Button, .ButtonGroup > .ToggleButton { + margin: 0; +} + +.ButtonGroup > .Button:first-child, .ButtonGroup > .ToggleButton:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ButtonGroup > .Button:last-child, .ButtonGroup > .ToggleButton:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child):not(:first-child), .ButtonGroup > .ToggleButton:not(:last-child):not(:first-child) { + border-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child), .ButtonGroup > .ToggleButton:not(:last-child) { + border-right: none; +} + +.FileChooser { + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -1; +} + +.Text, .TextArea, .sp-input { + border: 1px solid; + font-size: inherit; + font-family: inherit; + padding: 3px; + height: calc(1.5em + 2px); +} + +.Text:focus, .TextArea:focus, .sp-input:focus { + outline: none; +} + +.TextArea { + height: initial; +} + +.SpinnerButtonsContainer { + display: inline-block; + float: right; + width: 1em; +} + +.SpinnerIncrement, .SpinnerDecrement { + border: 1px solid; + border-left: none; + display: inline-block; + float: left; + width: 1em; + text-align: center; +} + +.SpinnerNumber { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em); +} + +.SpinnerIncrement { + height: calc(.75em - 1px); +} + +.SpinnerDecrement { + height: calc(.75em); + border-top: none; +} + +.SpinnerUpArrow, .SpinnerDownArrow { + width: 0; + height: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} + +.SpinnerUpArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-bottom: 0.25em solid; +} + +.SpinnerDownArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-top: 0.25em solid; +} + +.Spinner.disabled .SpinnerUpArrow { + border-bottom: 0.25em solid; +} + +.Spinner.disabled .SpinnerDownArrow { + border-top: 0.25em solid; +} + +.Spinner, .ComboEditable { + display: inline-block; +} + +.SwitchContainer, .CheckContainer, .RadioContainer { + display: inline-block; +} + +.Check:not(old), +.Radio:not(old), +.Switch:not(old) { + width: 2em; + margin: 0; + padding: 0; + font-size: 1em; + opacity: 0; +} + +.Check:not(old) + label, +.Radio:not(old) + label { + display: inline-block; + margin-left: -2em; + line-height: 1.5em; +} + +.Check:not(old) + label .outer, +.Radio:not(old) + label .outer { + display: inline-block; + width: 0.875em; + height: 0.875em; + margin: 0.25em 0.5em 0.25em 0.25em; + border: 0.0625em solid; + border-radius: 0.25em; + vertical-align: bottom; +} + +.Radio:not(old) + label .outer { + border-radius: 1em; +} + +.Check:not(old):checked + label .outer:before { + content: "✓"; + display: block; + width: 1em; + font-size: 0.875em; + line-height: 1em; + text-align: center; + font-weight: bold; +} + +.Radio:not(old):checked + label .inner { + display: block; + width: 0.5em; + height: 0.5em; + margin: 0.125em; + border: 0.0625em solid; + border-radius: 1em; +} + +.List { + display: inline-block; + padding: 0; + margin: 0.25em; + border: 1px solid; + overflow-y: auto; +} + +.List.h-scroll { + overflow-x: auto; +} + +.ListItem { + cursor: default; + padding: 0.175em 0.5em; +} + +.Combo .arrow-container { + width: 1em; + display: inline-block; + float: right; +} + +.Combo .arrow-up-container { + margin-top: 0.45em; +} + +.Combo .arrow-up-container, .Combo .arrow-down-container { + display: inline-block; + float: left; + line-height: initial; + width: 1em; + margin-left: 0.5em; + height: 0.4em; +} + +.Combo .arrow-up, .Combo .arrow-down { + width: 0; + height: 0; + border-left: 0.2em solid transparent; + border-right: 0.2em solid transparent; +} + +.Combo .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo .arrow-down { + border-top: 0.2em solid; +} + +.Combo.disabled .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo.disabled .arrow-down { + border-top: 0.2em solid; +} + +.Combo { + text-align: left; +} + +.ComboItemList { + position: absolute; + list-style-type: none; + padding: 0; + margin: 0; + border: 1px solid; + overflow: auto; + border-top: none; + z-index: 10000; +} + +.ComboItemList.hidden { + display: none; +} + +.ComboItemList:not(.hidden) { + z-index: 1; +} + +.ComboItemList.overlayed { + border-top: 1px solid; + -webkit-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); +} + +.ComboItem { + cursor: default; + padding: 0.175em 5px; +} + +.ComboItem.selected { + display: none; +} + +.ComboEditable .Text { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em - 3px); +} + +.ComboEditableButtonContainer { + margin-top: 0; + border-left: none; + display: inline-block; + float: right; +} + +.ComboEditableButton { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: none; + margin-left: 0; + height: 1.5em; +} + +.Combo.listShown, .ComboEditable.listShown .Text { + border-bottom-left-radius: 0; +} + +.Combo.listShown, .ComboEditable.listShown .ComboEditableButton { + border-bottom-right-radius: 0; +} + +.ComboEditableArrowContainer { + display: inline-block; + margin-top: 0.75em; +} + +.ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; +} + +.ComboEditable.disabled .ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; +} + +.Table { + border: 1px solid; + border-collapse: collapse; + font-size: inherit; + font-family: inherit; +} + +.TableHeader, .TableRowValue { + cursor: default; + padding: 5px; +} + +.TableHeader, .TableRow, .TableRowValue { + border: 1px solid; +} + +.ColorPickerReplacer, .ColorPickerReplacer:hover, .ColorPickerReplacer.sp-disabled, .ColorPicker.sp-active { + border: 1px solid; +} + +.ColorPickerReplacer { + margin: 0.25em; + height: calc(1.5em - 2px); + width: calc(1.75em - 2px); + border: 1px solid; + cursor: default; +} +.ColorPickerReplacer .sp-preview { + width: calc(1.25em - 4px); + height: calc(1em - 4px); + margin: 0.25em 0 0 0.25em; + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled > sp-preview { + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled, ColorPickerReplacer.sp-disabled:hover { + background: none; +} + +.ColorPickerContainer { + border: 1px solid; +} + +.sp-picker-container { + border-left: 1px solid; +} + +.sp-palette-container { + border-right: 1px solid; +} + +.sp-palette-disabled .sp-picker-container { + border-left: none; +} + +.sp-input:focus { + border: 1px solid; +} + +.TabFolder { + display: inline-block; +} + +.TabContainer { + width: 100%; + display: inline-block; +} + +.Tab { + display: inline-block; + padding: 5px; + border: 1px solid; + border-bottom: none; + cursor: default; +} + +.Tab:not(:first-child) { + border-left: none; +} + +.TabContentContainer { + width: calc(100% - 2px - 10px); + border: 1px solid; + padding: 5px; + overflow-y: auto; +} + +.ProgressBar { + height: 1em; + border: 1px solid; + display: inline-block; +} + +.ProgressBarInner { + height: 100%; + transition: width 0.3s ease; +} + +.ProgressBar:not(.full):not(.indeterminate) .ProgressBarInner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ProgressBar.indeterminate { + overflow-x: hidden; +} +.ProgressBar.indeterminate .ProgressBarInner { + animation: IndeterminateProgress 1.25s linear 0s infinite alternate; +} + +@keyframes IndeterminateProgress { + 0% { + width: 20%; + margin-left: 0; + } + 100% { + width: 20%; + margin-left: 80%; + } +} + +/*# sourceMappingURL=laf-gtk.css.map */ diff --git a/dist/css/laf-gtk.css.map b/dist/css/laf-gtk.css.map new file mode 100644 index 0000000..11d7b41 --- /dev/null +++ b/dist/css/laf-gtk.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": ";AAwBA,UAAU;EACR,OAAO,EAAY,CAAC;EACpB,MAAM,EAAa,CAAC;EAGpB,WAAW,EAAQ,cAAc;;;AAGnC,SAAS;EACP,qBAAqB,EAAG,IAAI;EAC5B,mBAAmB,EAAK,IAAI;EAC5B,kBAAkB,EAAM,IAAI;EAC5B,gBAAgB,EAAQ,IAAI;EAC5B,eAAe,EAAS,IAAI;EAC5B,WAAW,EAAa,IAAI;;;AAK9B,MAAM;EACJ,OAAO,EAAE,IAAI;;;AAEf,WAAW;EACT,MAAM,EAAE,CAAC;;;AAEX,YAAY;EACV,OAAO,EAAE,CAAC;;;AAGZ,UAAU;EACR,MAAM,EAAE,IAAI;;;AAEd,SAAS;EACP,MAAM,EAAE,QAAQ;;;AAElB,SAAS;EACP,MAAM,EAAE,UAAU;;;AAEpB,WAAW;EACT,MAAM,EAAE,IAAI;;;AAEd;;;;;;;YAAuB;EAQrB,MAAM,EApDyB,MAAK;;;ACrBtC,YAAY;EACV,gBAAgB,EAAG,mBAAkB;EAErC,MAAM,EDmByB,SAAkC;ECjBjE,QAAQ,EAAW,QAAQ;EAC3B,OAAO,EAAY,OAAO;EAC1B,SAAS,EAAU,GAAG;EACtB,SAAS,EAAU,IAAI;EACvB,OAAO,EAAY,KAAK;;;ACT1B,0EAA0E;EAExE,MAAM,EFoByB,SAAkC;EElBjE,KAAK,EAAc,OAAO;EAC1B,WAAW,EAAQ,OAAO;EAC1B,SAAS,EAAU,OAAO;EAC1B,YAAY,EAAO,GAAG;EACtB,aAAa,EAAM,GAAG;EACtB,WAAW,EAAQ,KAAK;EACxB,UAAU,EAAS,MAAM;EACzB,OAAO,EAAY,YAAY;;AAE/B,6GAAM;EACJ,MAAM,EAAE,OAAO;;AAEjB,+JAAgB;EACd,OAAO,EAAE,CAAC;;;AAEd,gDAAgD;EAC9C,OAAO,EAAE,CAAC;;;AAKZ;;;;;;;gGAAyC;EASvC,UAAU,EAAS,IAAI;;;AAYzB,YAAY;EACV,MAAM,EF1ByB,MAAK;EE2BpC,OAAO,EAAG,YAAY;;;AAExB,oDAAoD;EAClD,MAAM,EAAE,CAAC;;;AAEX,4EAA4E;EAC1E,uBAAuB,EAAE,CAAC;EAC1B,0BAA0B,EAAE,CAAC;;;AAE/B,0EAA0E;EACxE,sBAAsB,EAAE,CAAC;EACzB,yBAAyB,EAAE,CAAC;;;AAE9B,0HAA0H;EACxH,aAAa,EAAE,CAAC;;;AAElB,sFAAsF;EACpF,YAAY,EAAE,IAAI;;;AAKpB,YAAY;EACV,KAAK,EAAM,KAAK;EAChB,MAAM,EAAK,KAAK;EAChB,OAAO,EAAI,CAAC;EACZ,QAAQ,EAAG,MAAM;EACjB,QAAQ,EAAG,QAAQ;EACnB,OAAO,EAAI,EAAE;;;AC5Ef,2BAA2B;EACzB,MAAM,EHqByB,SAAkC;EGlBjE,SAAS,EAAU,OAAO;EAC1B,WAAW,EAAQ,OAAO;EAC1B,OAAO,EAAY,GAAG;EAEtB,MAAM,EAAa,iBAAiB;;;AA6CtC,6CAA6C;EAC3C,OAAO,EAAY,IAAI;;;AAGzB,SAAS;EACP,MAAM,EAAE,OAAO;;;ACrDjB,wBAAwB;EAEtB,OAAO,EAAY,YAAY;EAC/B,KAAK,EAAc,KAAK;EACxB,KAAK,EAAc,GAAG;;;AAExB,oCAAoC;EAClC,MAAM,EJUyB,SAAkC;EITjE,WAAW,EAAG,IAAI;EAClB,OAAO,EAAO,YAAY;EAC1B,KAAK,EAAS,IAAI;EAClB,KAAK,EAAS,GAAG;EACjB,UAAU,EAAI,MAAM;;;AAKtB,cAAc;EACZ,MAAM,EAAwB,CAAC;EAC/B,uBAAuB,EAAO,CAAC;EAC/B,0BAA0B,EAAI,CAAC;EAC/B,KAAK,EAAyB,gBAAgB;;;AAEhD,iBAAiB;EACf,MAAM,EAAE,iBAAiB;;;AAE3B,iBAAiB;EACf,MAAM,EAAO,WAAW;EACxB,UAAU,EAAG,IAAI;;;AAEnB,kCAAkC;EAChC,KAAK,EAAS,CAAC;EACf,MAAM,EAAQ,CAAC;EACf,UAAU,EAAI,MAAM;EACpB,WAAW,EAAG,MAAM;;;AAEtB,eAAe;EACb,WAAW,EAzCoB,wBAAsC;EA0CrE,YAAY,EA1CmB,wBAAsC;EA2CrE,aAAa,EA1CkB,YAAmC;;;AA4CpE,iBAAiB;EACf,WAAW,EA9CoB,wBAAsC;EA+CrE,YAAY,EA/CmB,wBAAsC;EAgDrE,UAAU,EA/CqB,YAAmC;;;AAiDpE,iCAAiC;EAC/B,aAAa,EAjDkB,YAA2C;;;AAmD5E,mCAAmC;EACjC,UAAU,EApDqB,YAA2C;;;AAsD5E,wBAAwB;EACtB,OAAO,EAAK,YAAY;;;AC1D1B,kDAAkD;EAChD,OAAO,EAAE,YAAY;;;AAEvB;;gBAAgB;EAGd,KAAK,EAAO,GAAG;EACf,MAAM,EAAM,CAAC;EACb,OAAO,EAAK,CAAC;EACb,SAAS,EAAG,GAAG;EACf,OAAO,EAAK,CAAC;;;AAMf;uBAAwB;EAEtB,OAAO,EAAQ,YAAY;EAC3B,WAAW,EAAI,IAAI;EACnB,WAAW,EAAI,KAAK;;;AAEtB;8BAA+B;EAE7B,OAAO,EAAY,YAAY;EAC/B,KAAK,EAAc,OAAO;EAC1B,MAAM,EAAa,OAAO;EAC1B,MAAM,EAAa,0BAA0B;EAC7C,MAAM,EAAa,cAAuC;EAC1D,aAAa,EAAM,MAAM;EAEzB,cAAc,EAAK,MAAM;;;AAE3B,8BAA8B;EAC5B,aAAa,EAAM,GAAG;;;AAcxB,6CAA6C;EAC3C,OAAO,EAAO,GAAO;EACrB,OAAO,EAAO,KAAK;EACnB,KAAK,EAAS,GAAG;EAEjB,SAAS,EAAK,OAAO;EACrB,WAAW,EAAG,GAAG;EACjB,UAAU,EAAI,MAAM;EACpB,WAAW,EAAG,IAAI;;;AAEpB,sCAAsC;EACpC,OAAO,EAAY,KAAK;EACxB,KAAK,EAAc,KAAK;EACxB,MAAM,EAAa,KAAK;EACxB,MAAM,EAAa,OAAO;EAC1B,MAAM,EAAa,cAAuC;EAC1D,aAAa,EAAM,GAAG;;;AChExB,KAAK;EACH,OAAO,EAAY,YAAY;EAC/B,OAAO,EAAY,CAAC;EACpB,MAAM,ENkByB,MAAK;EMhBpC,MAAM,ENiByB,SAAkC;EMhBjE,UAAU,EAAS,IAAI;;;AAMzB,cAAc;EACZ,UAAU,EAAE,IAAI;;;AAElB,SAAS;EACP,MAAM,EAAI,OAAO;EACjB,OAAO,EAAG,aAAa;;;ACjBzB,uBAAuB;EACrB,KAAK,EAAK,GAAG;EACb,OAAO,EAAG,YAAY;EACtB,KAAK,EAAK,KAAK;;;AAEjB,0BAA0B;EACxB,UAAU,EAAE,MAAK;;;AAEnB,wDAAwD;EACtD,OAAO,EAAQ,YAAY;EAC3B,KAAK,EAAU,IAAI;EACnB,WAAW,EAAI,OAAO;EACtB,KAAK,EAAU,GAAG;EAClB,WAAW,EAAI,KAAI;EACnB,MAAM,EAAS,KAAI;;;AAErB,oCAAoC;EAClC,KAAK,EAAU,CAAC;EAChB,MAAM,EAAS,CAAC;EAChB,WAAW,EAAI,uBAAuB;EACtC,YAAY,EAAG,uBAAuB;;;AAExC,gBAAgB;EACd,aAAa,EAAE,WAAoB;;;AAErC,kBAAkB;EAChB,UAAU,EAAE,WAAoB;;;AAElC,yBAAyB;EACvB,aAAa,EAAE,WAA4B;;;AAE7C,2BAA2B;EACzB,UAAU,EAAE,WAA4B;;;AAE1C,MAAM;EACJ,UAAU,EAAE,IAAI;;;AAElB,cAAc;EACZ,QAAQ,EAAW,QAAQ;EAC3B,eAAe,EAAI,IAAI;EACvB,OAAO,EAAY,CAAC;EACpB,MAAM,EAAa,CAAC;EACpB,MAAM,EPpByB,SAAkC;EOqBjE,QAAQ,EAAW,IAAI;EACvB,UAAU,EAAS,IAAI;EAEvB,OAAO,EAAY,KAAK;;;AAE1B,qBAAqB;EACnB,OAAO,EAAE,IAAI;;;AAEf,2BAA2B;EACzB,OAAO,EAAE,CAAC;;;AAEZ,wBAAwB;EACtB,UAAU,EPjCqB,SAAkC;EOkCjE,kBAAkB,EAAG,oCAAiC;EACtD,eAAe,EAAM,oCAAiC;EACtD,UAAU,EAAW,oCAAiC;;;AAExD,UAAU;EACR,MAAM,EAAa,OAAO;EAC1B,OAAO,EAAY,WAAW;;;AAEhC,mBAAmB;EACjB,OAAO,EAAE,IAAI;;;AAKf,oBAAoB;EAClB,MAAM,EAAwB,CAAC;EAC/B,uBAAuB,EAAO,CAAC;EAC/B,0BAA0B,EAAI,CAAC;EAC/B,KAAK,EAAyB,sBAAsB;;;AAEtD,6BAA6B;EAC3B,UAAU,EAAM,CAAC;EAEjB,WAAW,EAAK,IAAI;EACpB,OAAO,EAAS,YAAY;EAC5B,KAAK,EAAW,KAAK;;;AAGvB,oBAAoB;EAClB,sBAAsB,EAAM,CAAC;EAC7B,yBAAyB,EAAG,CAAC;EAC7B,WAAW,EAAiB,IAAI;EAChC,WAAW,EAAiB,CAAC;EAC7B,MAAM,EAAsB,KAAK;;;AAEnC,gDAAgD;EAC9C,yBAAyB,EAAI,CAAC;;;AAEhC,+DAA+D;EAC7D,0BAA0B,EAAG,CAAC;;;AAEhC,4BAA4B;EAC1B,OAAO,EAAO,YAAY;EAC1B,UAAU,EAAI,MAAK;;;AAErB,wCAAwC;EACtC,UAAU,EAAK,YAAoB;EACnC,WAAW,EAAI,wBAAuB;EACtC,YAAY,EAAG,wBAAuB;;;AAExC,gEAAgE;EAC9D,UAAU,EAAG,YAA4B;;;AC3G3C,MAAM;EAEJ,MAAM,ERoByB,SAAkC;EQnBjE,eAAe,EAAI,QAAQ;EAE3B,SAAS,EAAU,OAAO;EAC1B,WAAW,EAAQ,OAAO;;;AAS5B,4BAA4B;EAC1B,MAAM,EAAI,OAAO;EACjB,OAAO,EAAG,GAAG;;;AAEf,uCAAuC;EACrC,MAAM,EREyB,SAAkC;;;AStBnE,0GAA0G;EACxG,MAAM,ETqByB,SAAkC;;;ASnBnE,oBAAoB;EAClB,MAAM,ETiByB,MAAK;EShBpC,MAAM,EAAO,iBAAiB;EAC9B,KAAK,EAAQ,kBAAkB;EAE/B,MAAM,ETcyB,SAAkC;ESbjE,MAAM,EAAO,OAAO;;AAEpB,gCAAW;EACT,KAAK,EAAI,kBAAkB;EAC3B,MAAM,EAAG,eAAe;EACxB,MAAM,EAAG,iBAAiB;EAC1B,MAAM,EAAG,SAAkB;;;AAE/B,6CAA6C;EAC3C,MAAM,EAAE,SAA0B;;;AAMpC,uEAAuE;EACrE,UAAU,EAAS,IAAI;;;AAGzB,qBAAqB;EAEnB,MAAM,ETRyB,SAAkC;;;ASUnE,oBAAoB;EAClB,WAAW,ETXoB,SAAkC;;;ASanE,qBAAqB;EACnB,YAAY,ETdmB,SAAkC;;;ASgBnE,yCAAyC;EACvC,WAAW,EAAE,IAAI;;;AAEnB,eAAe;EACb,MAAM,ETpByB,SAAkC;;;AUtBnE,UAAU;EACR,OAAO,EAAE,YAAY;;;AAEvB,aAAa;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;;;AAEvB,IAAI;EACF,OAAO,EAAS,YAAY;EAE5B,OAAO,EAAS,GAAG;EACnB,MAAM,EVWyB,SAAkC;EUVjE,aAAa,EAAG,IAAI;EACpB,MAAM,EAAU,OAAO;;;AAEzB,sBAAsB;EACpB,WAAW,EAAE,IAAI;;;AAiBnB,oBAAoB;EAClB,KAAK,EAAQ,uBAAuB;EACpC,MAAM,EVbyB,SAAkC;EUcjE,OAAO,EAAM,GAAG;EAChB,UAAU,EAAG,IAAI;;;ACrCnB,YAAY;EACV,MAAM,EAAU,GAAG;EACnB,MAAM,EXoByB,SAAkC;EWnBjE,OAAO,EAAS,YAAY;;;AAK9B,iBAAiB;EACf,MAAM,EAAa,IAAI;EAEvB,UAAU,EAAS,eAAe;;;AAEpC,6DAA6D;EAC3D,uBAAuB,EAAE,CAAC;EAC1B,0BAA0B,EAAE,CAAC;;;AAE/B,0BAA0B;EACxB,UAAU,EAAE,MAAM;;AAElB,4CAAiB;EACf,SAAS,EAAE,wDAAwD;;;;;IAMnE,KAAK,EAFH,GAAG;IAGL,WAAW,EAAE,CAAC;;;IAGd,KAAK,EANH,GAAG;IAOL,WAAW,EAAE,GAAS", +"sources": ["../../src/sass-include/_common.sass","../../src/sass-include/_tooltip.sass","../../src/sass-include/_button.sass","../../src/sass-include/_text.sass","../../src/sass-include/_spinner.sass","../../src/sass-include/_switch.sass","../../src/sass-include/_list.sass","../../src/sass-include/_combo.sass","../../src/sass-include/_table.sass","../../src/sass-include/_color-picker.sass","../../src/sass-include/_tab-folder.sass","../../src/sass-include/_progress-bar.sass"], +"names": [], +"file": "laf-gtk.css" +} diff --git a/dist/css/laf-win.css b/dist/css/laf-win.css new file mode 100644 index 0000000..2a90dbb --- /dev/null +++ b/dist/css/laf-win.css @@ -0,0 +1,535 @@ +@charset "UTF-8"; +html, body { + padding: 0; + margin: 0; + font-family: "Trebuchet MS"; +} + +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.sp-dd { + display: none; +} + +.sp-preview { + margin: 0; +} + +.sp-replacer { + padding: 0; +} + +.no-resize { + resize: none; +} + +.resize-v { + resize: vertical; +} + +.resize-h { + resize: horizontal; +} + +.resize-all { + resize: both; +} + +.Button, .ToggleButton, +.Text, .TextArea, .Spinner, +.CheckContainer, .RadioContainer, +.ColorPicker, .FileChooser + label, +.Combo, .ComboEditable, +.Table, +.TabFolder, +.ProgressBar { + margin: 0.25em; +} + +#wwt_tooltip { + background-color: rgba(0, 0, 0, 0.65); + border: 1px solid; + position: absolute; + padding: 2px 5px; + max-width: 20%; + font-size: 10pt; + z-index: 10000; +} + +.Button, .ToggleButton, .FileChooser + label, .Combo, .ComboEditableButton { + border: 1px solid; + color: inherit; + font-family: inherit; + font-size: inherit; + padding-left: 5px; + padding-right: 5px; + line-height: 1.5em; + text-align: center; + display: inline-block; +} +.Button .title, .ToggleButton .title, .FileChooser + label .title, .Combo .title, .ComboEditableButton .title { + cursor: default; +} +.Button .title.invisible, .ToggleButton .title.invisible, .FileChooser + label .title.invisible, .Combo .title.invisible, .ComboEditableButton .title.invisible { + opacity: 0; +} + +.Button:focus, .ToggleButton:focus, .Combo:focus { + outline: 0; +} + +.Button.disabled, .Button:hover.disabled, +.ToggleButton.state-out.disabled, .ToggleButton.state-in.disabled, +.ToggleButton.state-out.disabled:hover, .ToggleButton.state-in.disabled:hover, +.Spinner.disabled .SpinnerIncrement, .Spinner.disabled .SpinnerIncrement:hover, +.Spinner.disabled .SpinnerDecrement, .Spinner.disabled .SpinnerDecrement:hover, +.FileChooser.disabled + label, .FileChooser.disabled + label:hover, +.Combo.disabled, .Combo.disabled:hover, +.ComboEditable.disabled .ComboEditableButton, .ComboEditable.disabled .ComboEditableButton:hover { + background: none; +} + +.ButtonGroup { + margin: 0.25em; + display: inline-block; +} + +.ButtonGroup > .Button, .ButtonGroup > .ToggleButton { + margin: 0; +} + +.ButtonGroup > .Button:first-child, .ButtonGroup > .ToggleButton:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ButtonGroup > .Button:last-child, .ButtonGroup > .ToggleButton:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child):not(:first-child), .ButtonGroup > .ToggleButton:not(:last-child):not(:first-child) { + border-radius: 0; +} + +.ButtonGroup > .Button:not(:last-child), .ButtonGroup > .ToggleButton:not(:last-child) { + border-right: none; +} + +.FileChooser { + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -1; +} + +.Text, .TextArea, .sp-input { + border: 1px solid; + font-size: inherit; + font-family: inherit; + padding: 3px; + height: calc(1.5em + 2px); +} + +.Text:focus, .TextArea:focus, .sp-input:focus { + outline: none; +} + +.TextArea { + height: initial; +} + +.SpinnerButtonsContainer { + display: inline-block; + float: right; + width: 1em; +} + +.SpinnerIncrement, .SpinnerDecrement { + border: 1px solid; + border-left: none; + display: inline-block; + float: left; + width: 1em; + text-align: center; +} + +.SpinnerNumber { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em); +} + +.SpinnerIncrement { + height: calc(.75em - 1px); +} + +.SpinnerDecrement { + height: calc(.75em); + border-top: none; +} + +.SpinnerUpArrow, .SpinnerDownArrow { + width: 0; + height: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} + +.SpinnerUpArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-bottom: 0.25em solid; +} + +.SpinnerDownArrow { + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; + border-top: 0.25em solid; +} + +.Spinner.disabled .SpinnerUpArrow { + border-bottom: 0.25em solid; +} + +.Spinner.disabled .SpinnerDownArrow { + border-top: 0.25em solid; +} + +.Spinner, .ComboEditable { + display: inline-block; +} + +.SwitchContainer, .CheckContainer, .RadioContainer { + display: inline-block; +} + +.Check:not(old), +.Radio:not(old), +.Switch:not(old) { + width: 2em; + margin: 0; + padding: 0; + font-size: 1em; + opacity: 0; +} + +.Check:not(old) + label, +.Radio:not(old) + label { + display: inline-block; + margin-left: -2em; + line-height: 1.5em; +} + +.Check:not(old) + label .outer, +.Radio:not(old) + label .outer { + display: inline-block; + width: 0.875em; + height: 0.875em; + margin: 0.25em 0.5em 0.25em 0.25em; + border: 0.0625em solid; + border-radius: 0.25em; + vertical-align: bottom; +} + +.Radio:not(old) + label .outer { + border-radius: 1em; +} + +.Check:not(old):checked + label .outer:before { + content: "✓"; + display: block; + width: 1em; + font-size: 0.875em; + line-height: 1em; + text-align: center; + font-weight: bold; +} + +.Radio:not(old):checked + label .inner { + display: block; + width: 0.5em; + height: 0.5em; + margin: 0.125em; + border: 0.0625em solid; + border-radius: 1em; +} + +.List { + display: inline-block; + padding: 0; + margin: 0.25em; + border: 1px solid; + overflow-y: auto; +} + +.List.h-scroll { + overflow-x: auto; +} + +.ListItem { + cursor: default; + padding: 0.175em 0.5em; +} + +.Combo .arrow-container { + width: 1em; + display: inline-block; + float: right; +} + +.Combo .arrow-up-container { + margin-top: 0.45em; +} + +.Combo .arrow-up-container, .Combo .arrow-down-container { + display: inline-block; + float: left; + line-height: initial; + width: 1em; + margin-left: 0.5em; + height: 0.4em; +} + +.Combo .arrow-up, .Combo .arrow-down { + width: 0; + height: 0; + border-left: 0.2em solid transparent; + border-right: 0.2em solid transparent; +} + +.Combo .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo .arrow-down { + border-top: 0.2em solid; +} + +.Combo.disabled .arrow-up { + border-bottom: 0.2em solid; +} + +.Combo.disabled .arrow-down { + border-top: 0.2em solid; +} + +.Combo { + text-align: left; +} + +.ComboItemList { + position: absolute; + list-style-type: none; + padding: 0; + margin: 0; + border: 1px solid; + overflow: auto; + border-top: none; + z-index: 10000; +} + +.ComboItemList.hidden { + display: none; +} + +.ComboItemList:not(.hidden) { + z-index: 1; +} + +.ComboItemList.overlayed { + border-top: 1px solid; + -webkit-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); + box-shadow: 0px 0px 25px 3px rgba(0, 0, 0, 0.75); +} + +.ComboItem { + cursor: default; + padding: 0.175em 5px; +} + +.ComboItem.selected { + display: none; +} + +.ComboEditable .Text { + margin: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + width: calc(100% - 1em - 3px); +} + +.ComboEditableButtonContainer { + margin-top: 0; + border-left: none; + display: inline-block; + float: right; +} + +.ComboEditableButton { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: none; + margin-left: 0; + height: 1.5em; +} + +.Combo.listShown, .ComboEditable.listShown .Text { + border-bottom-left-radius: 0; +} + +.Combo.listShown, .ComboEditable.listShown .ComboEditableButton { + border-bottom-right-radius: 0; +} + +.ComboEditableArrowContainer { + display: inline-block; + margin-top: 0.75em; +} + +.ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; + border-left: 0.25em solid transparent; + border-right: 0.25em solid transparent; +} + +.ComboEditable.disabled .ComboEditableArrowContainer .down-arrow { + border-top: 0.25em solid; +} + +.Table { + border: 1px solid; + border-collapse: collapse; + font-size: inherit; + font-family: inherit; +} + +.TableHeader, .TableRowValue { + cursor: default; + padding: 5px; +} + +.TableHeader, .TableRow, .TableRowValue { + border: 1px solid; +} + +.ColorPickerReplacer, .ColorPickerReplacer:hover, .ColorPickerReplacer.sp-disabled, .ColorPicker.sp-active { + border: 1px solid; +} + +.ColorPickerReplacer { + margin: 0.25em; + height: calc(1.5em - 2px); + width: calc(1.75em - 2px); + border: 1px solid; + cursor: default; +} +.ColorPickerReplacer .sp-preview { + width: calc(1.25em - 4px); + height: calc(1em - 4px); + margin: 0.25em 0 0 0.25em; + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled > sp-preview { + border: 1px solid; +} + +.ColorPickerReplacer.sp-disabled, ColorPickerReplacer.sp-disabled:hover { + background: none; +} + +.ColorPickerContainer { + border: 1px solid; +} + +.sp-picker-container { + border-left: 1px solid; +} + +.sp-palette-container { + border-right: 1px solid; +} + +.sp-palette-disabled .sp-picker-container { + border-left: none; +} + +.sp-input:focus { + border: 1px solid; +} + +.TabFolder { + display: inline-block; +} + +.TabContainer { + width: 100%; + display: inline-block; +} + +.Tab { + display: inline-block; + padding: 5px; + border: 1px solid; + border-bottom: none; + cursor: default; +} + +.Tab:not(:first-child) { + border-left: none; +} + +.TabContentContainer { + width: calc(100% - 2px - 10px); + border: 1px solid; + padding: 5px; + overflow-y: auto; +} + +.ProgressBar { + height: 1em; + border: 1px solid; + display: inline-block; +} + +.ProgressBarInner { + height: 100%; + transition: width 0.3s ease; +} + +.ProgressBar:not(.full):not(.indeterminate) .ProgressBarInner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ProgressBar.indeterminate { + overflow-x: hidden; +} +.ProgressBar.indeterminate .ProgressBarInner { + animation: IndeterminateProgress 1.25s linear 0s infinite alternate; +} + +@keyframes IndeterminateProgress { + 0% { + width: 20%; + margin-left: 0; + } + 100% { + width: 20%; + margin-left: 80%; + } +} + +/*# sourceMappingURL=laf-win.css.map */ diff --git a/dist/css/laf-win.css.map b/dist/css/laf-win.css.map new file mode 100644 index 0000000..0200e33 --- /dev/null +++ b/dist/css/laf-win.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../src/sass-include/_common.sass","../../src/sass-include/_tooltip.sass","../../src/sass-include/_button.sass","../../src/sass-include/_text.sass","../../src/sass-include/_spinner.sass","../../src/sass-include/_switch.sass","../../src/sass-include/_list.sass","../../src/sass-include/_combo.sass","../../src/sass-include/_table.sass","../../src/sass-include/_color-picker.sass","../../src/sass-include/_tab-folder.sass","../../src/sass-include/_progress-bar.sass"], +"names": [], +"file": "laf-win.css" +} diff --git a/dist/css/spectrum.css b/dist/css/spectrum.css new file mode 100644 index 0000000..a8ad9e4 --- /dev/null +++ b/dist/css/spectrum.css @@ -0,0 +1,507 @@ +/*** +Spectrum Colorpicker v1.8.0 +https://github.com/bgrins/spectrum +Author: Brian Grinstead +License: MIT +***/ + +.sp-container { + position:absolute; + top:0; + left:0; + display:inline-block; + *display: inline; + *zoom: 1; + /* https://github.com/bgrins/spectrum/issues/40 */ + z-index: 9999994; + overflow: hidden; +} +.sp-container.sp-flat { + position: relative; +} + +/* Fix for * { box-sizing: border-box; } */ +.sp-container, +.sp-container * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ +.sp-top { + position:relative; + width: 100%; + display:inline-block; +} +.sp-top-inner { + position:absolute; + top:0; + left:0; + bottom:0; + right:0; +} +.sp-color { + position: absolute; + top:0; + left:0; + bottom:0; + right:20%; +} +.sp-hue { + position: absolute; + top:0; + right:0; + bottom:0; + left:84%; + height: 100%; +} + +.sp-clear-enabled .sp-hue { + top:33px; + height: 77.5%; +} + +.sp-fill { + padding-top: 80%; +} +.sp-sat, .sp-val { + position: absolute; + top:0; + left:0; + right:0; + bottom:0; +} + +.sp-alpha-enabled .sp-top { + margin-bottom: 18px; +} +.sp-alpha-enabled .sp-alpha { + display: block; +} +.sp-alpha-handle { + position:absolute; + top:-4px; + bottom: -4px; + width: 6px; + left: 50%; + cursor: pointer; + border: 1px solid black; + background: white; + opacity: .8; +} +.sp-alpha { + display: none; + position: absolute; + bottom: -14px; + right: 0; + left: 0; + height: 8px; +} +.sp-alpha-inner { + border: solid 1px #333; +} + +.sp-clear { + display: none; +} + +.sp-clear.sp-clear-display { + background-position: center; +} + +.sp-clear-enabled .sp-clear { + display: block; + position:absolute; + top:0px; + right:0; + bottom:0; + left:84%; + height: 28px; +} + +/* Don't allow text selection */ +.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { + -webkit-user-select:none; + -moz-user-select: -moz-none; + -o-user-select:none; + user-select: none; +} + +.sp-container.sp-input-disabled .sp-input-container { + display: none; +} +.sp-container.sp-buttons-disabled .sp-button-container { + display: none; +} +.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { + display: none; +} +.sp-palette-only .sp-picker-container { + display: none; +} +.sp-palette-disabled .sp-palette-container { + display: none; +} + +.sp-initial-disabled .sp-initial { + display: none; +} + + +/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ +.sp-sat { + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; + filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); +} +.sp-val { + background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; + filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); +} + +.sp-hue { + background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); + background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); +} + +/* IE filters do not support multiple color stops. + Generate 6 divs, line them up, and do two color gradients for each. + Yes, really. + */ +.sp-1 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); +} +.sp-2 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); +} +.sp-3 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); +} +.sp-4 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); +} +.sp-5 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); +} +.sp-6 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); +} + +.sp-hidden { + display: none !important; +} + +/* Clearfix hack */ +.sp-cf:before, .sp-cf:after { content: ""; display: table; } +.sp-cf:after { clear: both; } +.sp-cf { *zoom: 1; } + +/* Mobile devices, make hue slider bigger so it is easier to slide */ +@media (max-device-width: 480px) { + .sp-color { right: 40%; } + .sp-hue { left: 63%; } + .sp-fill { padding-top: 60%; } +} +.sp-dragger { + border-radius: 5px; + height: 5px; + width: 5px; + border: 1px solid #fff; + background: #000; + cursor: pointer; + position:absolute; + top:0; + left: 0; +} +.sp-slider { + position: absolute; + top:0; + cursor:pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid #000; + background: white; + opacity: .8; +} + +/* +Theme authors: +Here are the basic themeable display options (colors, fonts, global widths). +See http://bgrins.github.io/spectrum/themes/ for instructions. +*/ + +.sp-container { + border-radius: 0; + background-color: #ECECEC; + border: solid 1px #f0c49B; + padding: 0; +} +.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { + font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.sp-top { + margin-bottom: 3px; +} +.sp-color, .sp-hue, .sp-clear { + border: solid 1px #666; +} + +/* Input */ +.sp-input-container { + float:right; + width: 100px; + margin-bottom: 4px; +} +.sp-initial-disabled .sp-input-container { + width: 100%; +} +.sp-input { + font-size: 12px !important; + border: 1px inset; + padding: 4px 5px; + margin: 0; + width: 100%; + background:transparent; + border-radius: 3px; + color: #222; +} +.sp-input:focus { + border: 1px solid orange; +} +.sp-input.sp-validation-error { + border: 1px solid red; + background: #fdd; +} +.sp-picker-container , .sp-palette-container { + float:left; + position: relative; + padding: 10px; + padding-bottom: 300px; + margin-bottom: -290px; +} +.sp-picker-container { + width: 172px; + border-left: solid 1px #fff; +} + +/* Palettes */ +.sp-palette-container { + border-right: solid 1px #ccc; +} + +.sp-palette-only .sp-palette-container { + border: 0; +} + +.sp-palette .sp-thumb-el { + display: block; + position:relative; + float:left; + width: 24px; + height: 15px; + margin: 3px; + cursor: pointer; + border:solid 2px transparent; +} +.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { + border-color: orange; +} +.sp-thumb-el { + position:relative; +} + +/* Initial */ +.sp-initial { + float: left; + border: solid 1px #333; +} +.sp-initial span { + width: 30px; + height: 25px; + border:none; + display:block; + float:left; + margin:0; +} + +.sp-initial .sp-clear-display { + background-position: center; +} + +/* Buttons */ +.sp-palette-button-container, +.sp-button-container { + float: right; +} + +/* Replacer (the little preview div that shows up instead of the ) */ +.sp-replacer { + margin:0; + overflow:hidden; + cursor:pointer; + padding: 4px; + display:inline-block; + *zoom: 1; + *display: inline; + border: solid 1px #91765d; + background: #eee; + color: #333; + vertical-align: middle; +} +.sp-replacer:hover, .sp-replacer.sp-active { + border-color: #F0C49B; + color: #111; +} +.sp-replacer.sp-disabled { + cursor:default; + border-color: silver; + color: silver; +} +.sp-dd { + padding: 2px 0; + height: 16px; + line-height: 16px; + float:left; + font-size:10px; +} +.sp-preview { + position:relative; + width:25px; + height: 20px; + border: solid 1px #222; + margin-right: 5px; + float:left; + z-index: 0; +} + +.sp-palette { + *width: 220px; + max-width: 220px; +} +.sp-palette .sp-thumb-el { + width:16px; + height: 16px; + margin:2px 1px; + border: solid 1px #d0d0d0; +} + +.sp-container { + padding-bottom:0; +} + + +/* Buttons: http://hellohappy.org/css3-buttons/ */ +.sp-container button { + background-color: #eeeeee; + background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc); + background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); + background-image: -ms-linear-gradient(top, #eeeeee, #cccccc); + background-image: -o-linear-gradient(top, #eeeeee, #cccccc); + background-image: linear-gradient(to bottom, #eeeeee, #cccccc); + border: 1px solid #ccc; + border-bottom: 1px solid #bbb; + border-radius: 3px; + color: #333; + font-size: 14px; + line-height: 1; + padding: 5px 4px; + text-align: center; + text-shadow: 0 1px 0 #eee; + vertical-align: middle; +} +.sp-container button:hover { + background-color: #dddddd; + background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb); + background-image: -o-linear-gradient(top, #dddddd, #bbbbbb); + background-image: linear-gradient(to bottom, #dddddd, #bbbbbb); + border: 1px solid #bbb; + border-bottom: 1px solid #999; + cursor: pointer; + text-shadow: 0 1px 0 #ddd; +} +.sp-container button:active { + border: 1px solid #aaa; + border-bottom: 1px solid #888; + -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; + box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; +} +.sp-cancel { + font-size: 11px; + color: #d93f3f !important; + margin:0; + padding:2px; + margin-right: 5px; + vertical-align: middle; + text-decoration:none; + +} +.sp-cancel:hover { + color: #d93f3f !important; + text-decoration: underline; +} + + +.sp-palette span:hover, .sp-palette span.sp-thumb-active { + border-color: #000; +} + +.sp-preview, .sp-alpha, .sp-thumb-el { + position:relative; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); +} +.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { + display:block; + position:absolute; + top:0;left:0;bottom:0;right:0; +} + +.sp-palette .sp-thumb-inner { + background-position: 50% 50%; + background-repeat: no-repeat; +} + +.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); +} + +.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); +} + +.sp-clear-display { + background-repeat:no-repeat; + background-position: center; + background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); +} diff --git a/dist/factory.html b/dist/factory.html new file mode 100644 index 0000000..4b540e7 --- /dev/null +++ b/dist/factory.html @@ -0,0 +1,14 @@ + +
+ + + + + + + + + + + + diff --git a/dist/js/demo/demo-wwt.js b/dist/js/demo/demo-wwt.js new file mode 100644 index 0000000..618e6e4 --- /dev/null +++ b/dist/js/demo/demo-wwt.js @@ -0,0 +1,117 @@ +$(document).ready(function() { + wwt.init(); + + var buttons = new wwt.Composite("", "buttons"); + var textboxes = new wwt.Composite("", "textboxes"); + var checkRadio = new wwt.Composite("", "checkRadio"); + var spinners = new wwt.Composite("", "spinners"); + var pickers = new wwt.Composite("", "pickers"); + var lists = new wwt.Composite("", "lists"); + var groups = new wwt.Composite("", "groups"); + var tabs = new wwt.Composite("", "tabs"); + var progress = new wwt.Composite("", "progressbars"); + + //fun fact - Android version names (1.5 - 6.0.x) + var items = [ + "Cupcake", + "Donut", + "Eclair", + "Froyo", + "Gingerbread", + "Honeycomb", + "Ice Cream Sandwich", + "Jelly Bean", + "KitKat", + "Lolipop", + "Marshmellow" + ] + + //Buttons + new wwt.Button(buttons, "buttonEnabled", "Button").setTooltip("I am a button!"); + new wwt.Button(buttons, "buttonDisabled", "Button").setEnabled(false); + + //ToggleButtons + new wwt.ToggleButton(buttons, "togglebuttonEnabled", "ToggleButton").setTooltip("I am a toggle button!"); + new wwt.ToggleButton(buttons, "togglebuttonEnabledActive", "ToggleButton").setState(true); + new wwt.ToggleButton(buttons, "togglebuttondDisabled", "ToggleButton").setEnabled(false); + new wwt.ToggleButton(buttons, "togglebuttonActiveDisabled", "ToggleButton").setState(true).setEnabled(false); + + //ButtonGroup + var bg1 = new wwt.ButtonGroup(buttons, "buttonGroupEnabled").setTooltip("This isn't shown!"); + var bg2 = new wwt.ButtonGroup(buttons, "buttonGroupDisabled").setEnabled(false); + var tbg1 = new wwt.ButtonGroup(buttons, "toggleButtonGroupEnabled", true); + var tbg2 = new wwt.ButtonGroup(buttons, "toggleButtonGroupDisabled", true).setEnabled(false); + + [bg1, bg2, tbg1, tbg2].forEach(function(e, i) { + var title = (e.isToggle() ? "Toggle" : "") + "Button"; + var b1 = e.addButton("", title).setTooltip("I am a button (in a group)!"); + var b2 = e.addButton("", title); + var b3 = e.addButton("", title); + + if(i >= 2){ + b1.setState(true); + b3.setState(true); + } + }); + + //Textboxes (single and multi) + new wwt.Text(textboxes, "textEnabled").setPlaceholder("Text").setTooltip("I am a textbox!"); + new wwt.Text(textboxes, "textDisabled").setPlaceholder("Text").setEnabled(false); + new wwt.Text(textboxes, "textMultiEnabled", "multi").setPlaceholder("Text").setTooltip("I am a (multi) textbox!"); + new wwt.Text(textboxes, "textMultiDisabled", "multi").setPlaceholder("Text").setEnabled(false); + new wwt.Text(textboxes, "textPasswordEnabled", "password").setPlaceholder("Text").setText("Password").setTooltip("I am a (password) textbox!"); + new wwt.Text(textboxes, "textPasswordDisabled", "password").setPlaceholder("Text").setEnabled(false).setText("Password"); + + //Radio buttons + new wwt.Radio(checkRadio, "radioEnabled", "Radio").setGroup("radios").setTooltip("I am a radio button!"); + new wwt.Radio(checkRadio, "radioDisabled", "Radio").setGroup("radios").setEnabled(false); + + //Checkboxes + new wwt.Check(checkRadio, "checkEnabled", "Check").setTooltip("I am a checkbox!"); + new wwt.Check(checkRadio, "checkDisabled", "Check").setEnabled(false); + + //Spinners + new wwt.Spinner(spinners, "spinnerEnabled").setTooltip("I am a spinner!"); + new wwt.Spinner(spinners, "spinnerDisabled").setEnabled(false); + + //ColorPickers + new wwt.ColorPicker(pickers, "colorPickerEnabled", { + color: "#B91F1F", + palette: ["red", "green", "blue"] + }).setTooltip("I am a color picker!"); + new wwt.ColorPicker(pickers, "colorPickerDisabled").setEnabled(false); + + //FileChoosers + new wwt.FileChooser(pickers, "fileChooserEnabled", "FileChooser").setTooltip("I am a filechooser!"); + new wwt.FileChooser(pickers, "fileChooserDisabled", "FileChooser").setEnabled(false); + + new wwt.List(lists, "listEnabled", items).setMultiSelect(true).setSelectedItems([8, 9]).setTooltip("I am a list!");; + new wwt.List(lists, "listDisabled", items).setEnabled(false); + + new wwt.Combo(lists, "comboEnabled").setItems(items).setText("Ice Cream Sandwich").setTooltip("I am a combo!");; + new wwt.Combo(lists, "comboDisabled").setItems(items).setText("KitKat").setEnabled(false); + new wwt.Combo(lists, "comboEditableEnabled", true).setItems(items).setText("").setTooltip("I am an (editable) combo!"); + new wwt.Combo(lists, "comboEditableDisabled", true).setItems(items).setText("KitKat").setEnabled(false); + + // new wwt.YTVideo("videos", "ytPlayer", new wwt.YTVideo.Options("rnQBF2CIygg").setAutoPlay(false).setSize(500, 500)); + + var tabs = new wwt.TabFolder(tabs, "tabsEnabled"); + tabs.append("Tab 1", "enabledTab1").append("BOLD TEXT").setTooltip("I am a tab in a tab folder!"); + tabs.append("Tab 2", "enabledTab2").append("ITALIC TEXT"); + var bigTab = tabs.append("Tab 3", "enabledTab3"); + new wwt.Button(bigTab, "buttonInsideTab", "Button"); + new wwt.Button(bigTab, "buttonInsideTab1", "Button"); + new wwt.Button(bigTab, "buttonInsideTab2", "Button"); + new wwt.Button(bigTab, "buttonInsideTab3", "Button"); + new wwt.Button(bigTab, "buttonInsideTab4", "Button"); + new wwt.Button(bigTab, "buttonInsideTab5", "Button"); + + var table = new wwt.Table(lists, "table").setTooltip("I am a table!");; + table.addHeader("Header by string"); + table.addHeader(new wwt.Table.Header("Header by class")); + table.addRow(new wwt.Table.Row(["0,0", "1,0"])); + table.addRow(["1,0", "1,1"]); + + var pb = new wwt.ProgressBar(progress, "progressEnabled").setTooltip("I am a progress bar!").setIndeterminate(); + +}); diff --git a/dist/js/lib/jquery.js b/dist/js/lib/jquery.js new file mode 100644 index 0000000..5fac9dd --- /dev/null +++ b/dist/js/lib/jquery.js @@ -0,0 +1,11015 @@ +/*! + * jQuery JavaScript Library v1.12.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:16Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var deletedIds = []; + +var document = window.document; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.12.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type( obj ) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + } catch ( e ) { + + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( !support.ownFirst ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[ j ] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: