JGirault has uploaded a new change for review. https://gerrit.wikimedia.org/r/268842
Change subject: Revert "Revert "Adding postCSS & changing blue."" ...................................................................... Revert "Revert "Adding postCSS & changing blue."" This reverts commit 80955536c3c03868129646798738d5702194ffd7. Change-Id: Iacfddfc2feaea527b08a04aa3c8e13833d2d900f --- A dev/wikipedia.org/assets/css/README.txt A dev/wikipedia.org/assets/css/style.css A dev/wikipedia.org/assets/cssnext/README.txt R dev/wikipedia.org/assets/cssnext/_base.css R dev/wikipedia.org/assets/cssnext/_buttons.css R dev/wikipedia.org/assets/cssnext/_forms.css R dev/wikipedia.org/assets/cssnext/_pab1.css R dev/wikipedia.org/assets/cssnext/_pab2.css A dev/wikipedia.org/assets/cssnext/_vars.css R dev/wikipedia.org/assets/cssnext/_wm-portal.css A dev/wikipedia.org/assets/cssnext/style.css M dev/wikipedia.org/index.handlebars M gulpfile.js M package.json M prod/wikipedia.org/index.html A tests/lint.js 16 files changed, 1,001 insertions(+), 27 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/wikimedia/portals refs/changes/42/268842/1 diff --git a/dev/wikipedia.org/assets/css/README.txt b/dev/wikipedia.org/assets/css/README.txt new file mode 100644 index 0000000..c7e71c0 --- /dev/null +++ b/dev/wikipedia.org/assets/css/README.txt @@ -0,0 +1,3 @@ +Do not edit the CSS files in this directory. +They will be overridden during the build process. +Instead, make your changes to the files in the cssnext folder. \ No newline at end of file diff --git a/dev/wikipedia.org/assets/css/style.css b/dev/wikipedia.org/assets/css/style.css new file mode 100644 index 0000000..cdf47bc --- /dev/null +++ b/dev/wikipedia.org/assets/css/style.css @@ -0,0 +1,915 @@ +/** +* Colors from https://phabricator.wikimedia.org/diffusion/WMUI/browse/master/base.less +*/ +/*! +Pure v0.6.1-pre +Copyright 2014 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v^3.0 | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} +/** + * Remove default margin. + */ +body { + margin: 0; +} +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; +} +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +a:active, +a:hover { + outline: 0; +} +/* Text-level semantics + ========================================================================== */ +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; +} +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ +b, +strong { + font-weight: bold; +} +/** + * Address styling not present in Safari and Chrome. + */ +dfn { + font-style: italic; +} +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; +} +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 85%; /* CHANGED from 80% to 85% */ +} +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9/10. + */ +img { + border: 0; +} +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; +} +/* Grouping content + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari. + */ +figure { + margin: 1em 40px; +} +/** + * Address differences between Firefox and other browsers. + */ +hr { + box-sizing: content-box; + height: 0; +} +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; +} +/** + * Address odd `em`-unit font size rendering in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/* Forms + ========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ +button { + overflow: visible; +} +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ +button, +select { + text-transform: none; +} +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; +} +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +input { + line-height: normal; +} +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. + */ +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * ADDED + * + * Remove extra space between input borders and input outline. + * Needed for Safari. + */ +input[type="search"]:focus { + outline-offset: -2px; +} +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ +textarea { + overflow: auto; +} +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +optgroup { + font-weight: bold; +} +/* Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*csslint important:false*/ +/* ========================================================================== + Pure Base Extras + ========================================================================== */ +/** + * Extra rules that Pure adds on top of Normalize.css + */ +/** + * Always hide an element when it has the `hidden` HTML attribute. + */ +.hidden, +[hidden] { + display: none !important; +} +/** + * Add this class to an image to make it fit within it's fluid parent wrapper while maintaining + * aspect ratio. + */ +.pure-img { + max-width: 100%; + height: auto; + display: block; +} +/** + * This is the stylesheet for the [[m:Project portal]] templates. + * It should loosely match the style of MediaWiki's Vector theme + * for consistency. + * Colors from ./skins/Vector/screen.css + * + * Indention style: 1 tab + * + */ +body { + background-color: white; + font: 13px/1.5 sans-serif; + margin: 0.3em 0; +} +a, +a:active, +a:focus { + unicode-bidi: embed; + white-space: nowrap; + outline: 0; + color: #165c91; + text-decoration: none; +} +a:focus { + outline: 1px solid #165c91; +} +a:hover { + text-decoration: underline; +} +img { + border: none; + vertical-align: middle; +} +hr { + clear: both; + height: 0; + border: none; + border-bottom: 1px solid #aaa; + margin: 0.2em 1em; +} +/** + * Central logo area for wiki-project portals + * (e.g. where the globe is on www.wikipedia.org) + */ +.central-textlogo { + margin: 1em 0 0.3em 0; + text-align: center; + font-size: 30px; + line-height: 110%; + font-family: 'Linux Libertine', 'Hoefler Text', Georgia, 'Times New Roman', Times, serif; + font-weight: normal; + padding: 10px 0; + /* Crossed W in Linux Libertine */ + -webkit-font-feature-settings: "ss05"; + -ms-font-feature-settings: "ss05"; + font-feature-settings: "ss05"; +} +.central-featured { + position: relative; + text-align: center; + vertical-align: middle; + max-width: 100%; + width: 42em; + margin: 0 auto; + height: 26em; +} +.central-featured-logo-wrapper{ + vertical-align: middle; + line-height: 26em; +} +.central-featured-lang { + position: absolute; + width: 12em; +} +/* Make entire block clickable, surpress hover underline */ +.central-featured-lang .link-box { + display: block; + padding: 0; + text-decoration: none; +} +/* Restore underline on main label */ +.central-featured-lang .link-box:hover strong { + text-decoration: underline; +} +/* Surpress blue color */ +.central-featured-lang .link-box em, +.central-featured-lang .link-box small { + color: black; + text-decoration: none; +} +.central-featured-lang strong { + font-size: larger; +} +.central-featured-lang em { + font-style: italic; +} +.central-featured-lang .emNonItalicLang { + font-style: normal; +} +/* Serbo-Croatian is dual-script, so it needs some tweaking to fit in the top 10 ring. */ +/* .digraphic strong { + font-size: 110%; + line-height: 1em; +} +.digraphic em, +.digraphic em + br { + display: none; +} */ +.lang1 { + top: 0; + right: 60%; +} +.lang2 { + top: 0; + left: 60%; +} +.lang3 { + top: 20%; + right: 70%; +} +.lang4 { + top: 20%; + left: 70%; +} +.lang5 { + top: 40%; + right: 72%; +} +.lang6 { + top: 40%; + left: 72%; +} +.lang7 { + top: 60%; + right: 70%; +} +.lang8 { + top: 60%; + left: 70%; +} +.lang9 { + top: 80%; + right: 60%; +} +.lang10 { + top: 80%; + left: 60%; +} +/** + * Search bar below the central logo area + */ +.search-container { + float: none; + margin: 1em auto 1.5em auto; + max-width: 95%; + padding: 0.3em; + text-align: center; + vertical-align: middle; + width: 540px; +} +.search-form fieldset { + background-color: #f9f9f9; + border: 1px solid #aaa; + margin-top: 0.5em; + padding: 0.7em; + width: auto; +} +.search-form #searchInput { + font-size: 1.2em; + margin: 0; + padding: 0; + vertical-align: top; +} +.search-form select { + margin: 0 0.4em; + padding: 0; + vertical-align: middle; + max-width: 12em; + width: 12em; /* otherwise the width is inconsistent between browsers */ +} +/** + * Language lists, bookshelves, etc. + */ +.bookshelf-container { + width: 100%; + overflow: hidden; + margin: 2em 0 0.5em 0; + font-size: 13px; + font-weight: bold; + line-height: 20px; +} +.bookshelf-container .text { + padding: 0 0.5em; +} +.bookshelf { + display: block; + width: 300%; + overflow: hidden; + position: relative; + left: -100%; + text-align: center; + white-space: nowrap; +} +.bookshelf-container .bookend { + display: inline-block; + vertical-align: top; + +} +.langlist { + text-align: center; + margin: 0.5em 3em 2.5em 3em; +} +.langlist-large { + font-size: larger; +} +.langlist-tiny { + margin: 0.5em 3em 3em 3em; +} +.langlist-others { + margin: 0 3em 2em 3em; + font-weight: bold; +} +.otherprojects { + font-weight: bold; + margin: 1.5em auto; + text-align: left; + vertical-align: middle; + width: 90%; +} +.otherprojects-item { + float: left; + height: 60px; + min-width: 12em; + width: 24.75%; + line-height: 60px; +} +.otherprojects-item a { + display: block; + width: 10em; + margin: 0 auto; +} +.sprite-project-logos-wrapper{ + width: 47px; + display: -moz-inline-stack; display: inline-block; + text-align: center; + vertical-align: middle; +} +.otherprojects-item .sprite-project-logos{ + display: -moz-inline-stack; display: inline-block; + text-align: center; + vertical-align: middle; +} +.otherprojects-item .otherprojects-item-name { + vertical-align: middle; +} +.sprite-project-logos-Wikispecies-logo_sister { + background-position: -0px -324px !important; + width: 35px !important; + height: 40px !important; +} +.wm-site-info { + clear: both; + margin: 2.5em 0 2em 0; + text-align: center; + padding-top: 1.5em; +} +/** + * Style for horizontal lists (separator following item). + * @note Support for unused tags like <dt> has been stripped out, and the + * dependency on :last-child and JavaScript has been removed in favor of + * :before. + * @source mediawiki.org/wiki/Snippets/Horizontal_lists + * @revision 6 (2014-05-09) + * @author [[User:Edokter]] + */ +.hlist ul { + margin: 0; + padding: 0; +} +/* Display list items inline */ +.hlist li { + display: inline; +} +/* Display nested lists inline */ +.hlist ul ul { + display: inline; +} +/* Generate interpuncts */ +.hlist li:before { + content: " · "; + font-weight: bold; +} +.hlist li:first-child:before { + content: none; +} +/* Add parentheses around nested lists */ +.hlist li + ul:before { + content: "\00a0("; +} +.hlist li + ul:after { + content: ") "; +} +/** + * Print stylesheet + */ +@media print { + + body { + background-color: transparent; + } + + a { + color: black !important; + background: none !important; + padding: 0 !important; + } + + a:link, + a:visited { + color: #520; + background: transparent; + } + + img { + border: none; + } + +} +@media all and (max-width:480px) { + .central-textlogo { + line-height: normal; + padding: 0; + margin: 0; + height: 70px; + text-align: left; + padding-left: 84px; + position: relative; + } + .central-textlogo img { + height: 35px; + width: auto; + margin-top: 22.5px; + } + .central-featured { + width: auto; + height: auto; + padding-top: 2em; + text-align: left; + font-size: 0.8em; + margin-top: 4em; + } + .central-featured-logo { + right: 0; + left: 0.8em; + top: -70px; + margin-top: -4em; + width: 70px; + position: absolute; + } + .central-featured-lang { + right: auto; + top: auto; + position: relative; + left: auto; + text-align: left; + margin-left: 1em; + display: block; + float: left; + width: 40%; + height: 5em; + } + .search-container { + margin-top: 0; + height: 6em; + position: absolute; + top: 5em; + left: 0; + right: 0; + max-width: 100%; + width: auto; + padding: 0; + text-align: left; + } + .search-container label { + display: none; + } + .search-form #searchInput { + max-width: 40%; + vertical-align:middle; + } + .search-form #searchLanguage, + .search-form .formBtn { + max-width: 25%; + vertical-align: middle; + } + form fieldset { + margin: 0; + border-left: none; + border-right: none; + } + .language-search { + display: none; + } + .bookshelf { + width: auto; + left: auto; + overflow: hidden; + text-align: left; + } + .bookshelf-container .bookend { + width: 40px !important; + } + .bookshelf-container .bookend:last-child { + display: none; + } + .langlist a { + word-wrap: break-word; + white-space: normal; + } + .langlist { + font-size: 0.7em + } + .otherprojects-item { + width: 50%; + text-align: left; + } + .bookshelf-container, + .langlist { + margin: 1em 1em 0 1em; + text-align: left; + width: auto; + } + hr { + margin-top: 0.5em; + } +} +@media all and (max-width:240px) { + .central-featured-lang, + .otherprojects-item { + width: 100%; + } + .central-textlogo img { + width: 100px; + height: auto; + } +} +@media all and (max-width: 45em) { + .otherprojects { + width: 100%; + } + .otherprojects-item { + width: 33.33%; + } +} +@media all and (max-width: 30em) { + .otherprojects-item { + width: 50%; + } +} +@media all and (max-width: 20em) { + .otherprojects-item { + width: 100%; + } +} +@media (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx), (min-resolution: 144dpi) { + .bookshelf-container .bookend { + background-size: 40px auto; + } +} +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (min-resolution: 2dppx), (min-resolution: 192dpi) { + .bookshelf-container .bookend { + background-size: 40px auto; + } +} +/* Subpixel borders supported in Gecko, Trident */ +@media (min--moz-device-pixel-ratio: 2), (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx), (min-resolution: 192dpi) { + #footer, + .search-form fieldset { + border-width: 0.5px; + } + + hr { + border-bottom-width: 0.5px; + } +} +/* Subpixel borders not supported in older releases of Blink, WebKit */ +@supports (-webkit-transform: rotate(30deg)) { + #footer, + .search-form fieldset { + border-width: 1px; + } + + hr { + border-bottom-width: 1px; + } +} +/* Gives the button its previous native look */ +.formBtn { + background-color: white; + border: 1px solid #E4E4E4; + border-radius: 4px; + border-top: 1px solid #e8e8e8; + border-bottom: 1px solid #CECECE; + font-size: 11px; + padding: 1px 8px; + margin-left: .3em; + vertical-align: top; +} +.formBtn .sprite-bookshelf_icons-search_icon { + display: inline-block; + vertical-align: middle; +} +.formBtn:focus { + background-color: #c0c0c0; + outline: 0; +} +.formBtn:active { + background-color: #b0b0b0; +} +/* Gives the inputs their previous look */ +.search-container .search-form #searchInput { + font-size: 13px; + padding: 1px 3px; + width: 15em; /* otherwise the width is inconsistent between browsers */ +} +#langsearch-input { + padding: 1px 2px; + font-size: 11px; + vertical-align: top; +} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl92YXJzLmNzcyIsIl9iYXNlLmNzcyIsIl93bS1wb3J0YWwuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztFQUVFO0FDRkY7Ozs7O0VBS0U7QUFDRjs7O0VBR0U7QUFDRiw0RUFBNEU7QUFFNUU7Ozs7R0FJRztBQUVIO0VBQ0Usd0JBQXdCLENBQUMsT0FBTztFQUNoQywyQkFBMkIsQ0FBQyxPQUFPO0VBQ25DLCtCQUErQixDQUFDLE9BQU87Q0FDeEM7QUFFRDs7R0FFRztBQUVIO0VBQ0UsVUFBVTtDQUNYO0FBRUQ7Z0ZBQ2dGO0FBRWhGOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7Ozs7RUFhRSxlQUFlO0NBQ2hCO0FBRUQ7OztHQUdHO0FBRUg7Ozs7RUFJRSxzQkFBc0IsQ0FBQyxPQUFPO0VBQzlCLHlCQUF5QixDQUFDLE9BQU87Q0FDbEM7QUFFRDs7O0dBR0c7QUFFSDtFQUNFLGNBQWM7RUFDZCxVQUFVO0NBQ1g7QUFFRDs7O0dBR0c7QUFFSDs7RUFFRSxjQUFjO0NBQ2Y7QUFFRDtnRkFDZ0Y7QUFFaEY7O0dBRUc7QUFFSDtFQUNFLDhCQUE4QjtDQUMvQjtBQUVEOzs7R0FHRztBQUVIOztFQUVFLFdBQVc7Q0FDWjtBQUVEO2dGQUNnRjtBQUVoRjs7R0FFRztBQUVIO0VBQ0UsMEJBQTBCO0NBQzNCO0FBRUQ7O0dBRUc7QUFFSDs7RUFFRSxrQkFBa0I7Q0FDbkI7QUFFRDs7R0FFRztBQUVIO0VBQ0UsbUJBQW1CO0NBQ3BCO0FBRUQ7OztHQUdHO0FBRUg7RUFDRSxlQUFlO0VBQ2YsaUJBQWlCO0NBQ2xCO0FBRUQ7O0dBRUc7QUFFSDtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0NBQ2I7QUFFRDs7R0FFRztBQUVIO0VBQ0UsZUFBZSxDQUFDLDZCQUE2QjtDQUM5QztBQUVEOztHQUVHO0FBRUg7O0VBRUUsZUFBZTtFQUNmLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIseUJBQXlCO0NBQzFCO0FBRUQ7RUFDRSxZQUFZO0NBQ2I7QUFFRDtFQUNFLGdCQUFn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QixvQkFBb0I7Q0FDdkI7QUFDRDtJQUNJLHNCQUFzQjtJQUN0Qix1QkFBdUI7Q0FDMUI7QUFDRDtJQUNJLDBCQUEwQjtJQUMxQixXQUFXO0NBQ2Q7QUFDRDtJQUNJLDBCQUEwQjtDQUM3QjtBQUVELDBDQUEwQztBQUMxQztJQUNJLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsWUFBWSxDQUFDLDBEQUEwRDtDQUMxRTtBQUNEO0lBQ0ksaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixvQkFBb0I7Q0FDdkIiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4qIENvbG9ycyBmcm9tIGh0dHBzOi8vcGhhYnJpY2F0b3Iud2lraW1lZGlhLm9yZy9kaWZmdXNpb24vV01VSS9icm93c2UvbWFzdGVyL2Jhc2UubGVzc1xuKi9cbjpyb290IHtcbiAgICAtLWMtcHJpbWFyeTogIzE2NWM5MTtcbn0iLCIvKiFcblB1cmUgdjAuNi4xLXByZVxuQ29weXJpZ2h0IDIwMTQgWWFob28hIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgTGljZW5zZS5cbmh0dHBzOi8vZ2l0aHViLmNvbS95YWhvby9wdXJlL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiovXG4vKiFcbm5vcm1hbGl6ZS5jc3Mgdl4zLjAgfCBNSVQgTGljZW5zZSB8IGdpdC5pby9ub3JtYWxpemVcbkNvcHlyaWdodCAoYykgTmljb2xhcyBHYWxsYWdoZXIgYW5kIEpvbmF0aGFuIE5lYWxcbiovXG4vKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbi8qKlxuICogMS4gU2V0IGRlZmF1bHQgZm9udCBmYW1pbHkgdG8gc2Fucy1zZXJpZi5cbiAqIDIuIFByZXZlbnQgaU9TIGFuZCBJRSB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIGRldmljZSBvcmllbnRhdGlvbiBjaGFuZ2UsXG4gKiAgICB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uXG4gKi9cblxuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSBkZWZhdWx0IG1hcmdpbi5cbiAqL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKiBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBhbnkgSFRNTDUgZWxlbWVudCBpbiBJRSA4LzkuXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYGRldGFpbHNgIG9yIGBzdW1tYXJ5YCBpbiBJRSAxMC8xMVxuICogYW5kIEZpcmVmb3guXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYG1haW5gIGluIElFIDExLlxuICovXG5cbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxuaGdyb3VwLFxubWFpbixcbm1lbnUsXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4gKiAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiAxICovXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFByZXZlbnQgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuXG4gKiBSZW1vdmUgZXhjZXNzIGhlaWdodCBpbiBpT1MgNSBkZXZpY2VzLlxuICovXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGBbaGlkZGVuXWAgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAuXG4gKiBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuXG4gKi9cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIExpbmtzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLyoqXG4gKiBJbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGZvY3VzZWQgZWxlbWVudHMgd2hlbiB0aGV5IGFyZSBhbHNvIGluIGFuXG4gKiBhY3RpdmUvaG92ZXIgc3RhdGUuXG4gKi9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgQ2hyb21lLlxuICovXG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKipcbiAqIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8qKlxuICogQWRkcmVzcyB2YXJpYWJsZSBgaDFgIGZvbnQtc2l6ZSBhbmQgbWFyZ2luIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYFxuICogY29udGV4dHMgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuICovXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS5cbiAqL1xuXG5tYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmMDtcbiAgY29sb3I6ICMwMDA7XG59XG5cbi8qKlxuICogQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc21hbGwge1xuICBmb250LXNpemU6IDg1JTsgLyogQ0hBTkdFRCBmcm9tIDgwJSB0byA4NSUgKi9cbn1cblxuLyoqXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBhZmZlY3RpbmcgYGxpbmUtaGVpZ2h0YCBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgYm9yZGVyIHdoZW4gaW5zaWRlIGBhYCBlbGVtZW50IGluIElFIDgvOS8xMC5cbiAqL1xuXG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5cbi8qKlxuICogQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXG4gKi9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZHJlc3MgbWFyZ2luIG5vdCBwcmVzZW50IGluIElFIDgvOSBhbmQgU2FmYXJpLlxuICovXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8qKlxuICogQWRkcmVzcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZpcmVmb3ggYW5kIG90aGVyIGJyb3dzZXJzLlxuICovXG5cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiBBZGRyZXNzIG9kZCBgZW1gLXVuaXQgZm9udCBzaXplIHJlbmRlcmluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuICogc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4gKiAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xuICBtYXJnaW46IDA7IC8qIDMgKi9cbn1cblxuLyoqXG4gKiBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFIDgvOS8xMC8xMS5cbiAqL1xuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGluY29uc2lzdGVudCBgdGV4dC10cmFuc2Zvcm1gIGluaGVyaXRhbmNlIGZvciBgYnV0dG9uYCBhbmQgYHNlbGVjdGAuXG4gKiBBbGwgb3RoZXIgZm9ybSBjb250cm9sIGVsZW1lbnRzIGRvIG5vdCBpbmhlcml0IGB0ZXh0LXRyYW5zZm9ybWAgdmFsdWVzLlxuICogQ29ycmVjdCBgYnV0dG9uYCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LCBJRSA4LzkvMTAvMTEsIGFuZCBPcGVyYS5cbiAqIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuICogICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4gKiAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4gKiAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuICogICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuICovXG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAyICovXG4gIGN1cnNvcjogcG9pbnRlcjsgLyogMyAqL1xufVxuXG4vKipcbiAqIFJlLXNldCBkZWZhdWx0IGN1cnNvciBmb3IgZGlzYWJsZWQgZWxlbWVudHMuXG4gKi9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4gKiB0aGUgVUEgc3R5bGVzaGVldC5cbiAqL1xuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbi8qKlxuICogSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBhdHRlbXB0IHRvIHN0eWxlIHRoZXNlIGVsZW1lbnRzLlxuICogRmlyZWZveCdzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgcmVzcGVjdCBib3gtc2l6aW5nLCBwYWRkaW5nLCBvciB3aWR0aC5cbiAqXG4gKiAxLiBBZGRyZXNzIGJveCBzaXppbmcgc2V0IHRvIGBjb250ZW50LWJveGAgaW4gSUUgOC85LzEwLlxuICogMi4gUmVtb3ZlIGV4Y2VzcyBwYWRkaW5nIGluIElFIDgvOS8xMC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpblxuICogYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcbiAqIGRlY3JlbWVudCBidXR0b24gdG8gY2hhbmdlIGZyb20gYGRlZmF1bHRgIHRvIGB0ZXh0YC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqIDIuIEFkZHJlc3MgYGJveC1zaXppbmdgIHNldCB0byBgYm9yZGVyLWJveGAgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4gKi9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIHNlYXJjaCBjYW5jZWwgYnV0dG9uIGluIFNhZmFyaSBhbmQgQ2hyb21lIG9uIE9TIFguXG4gKiBTYWZhcmkgKGJ1dCBub3QgQ2hyb21lKSBjbGlwcyB0aGUgY2FuY2VsIGJ1dHRvbiB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgaGFzXG4gKiBwYWRkaW5nIChhbmQgYHRleHRmaWVsZGAgYXBwZWFyYW5jZSkuXG4gKi9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogQURERURcbiAqXG4gKiBSZW1vdmUgZXh0cmEgc3BhY2UgYmV0d2VlbiBpbnB1dCBib3JkZXJzIGFuZCBpbnB1dCBvdXRsaW5lLlxuICogTmVlZGVkIGZvciBTYWZhcmkuXG4gKi9cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Zm9jdXMge1xuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxuXG4vKipcbiAqIERlZmluZSBjb25zaXN0ZW50IGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZy5cbiAqL1xuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuXG4gKiAyLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuXG4gKi9cblxubGVnZW5kIHtcbiAgYm9yZGVyOiAwOyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgOC85LzEwLzExLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogRG9uJ3QgaW5oZXJpdCB0aGUgYGZvbnQtd2VpZ2h0YCAoYXBwbGllZCBieSBhIHJ1bGUgYWJvdmUpLlxuICogTk9URTogdGhlIGRlZmF1bHQgY2Fubm90IHNhZmVseSBiZSBjaGFuZ2VkIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFguXG4gKi9cblxub3B0Z3JvdXAge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLyogVGFibGVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy5cbiAqL1xuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDtcbn1cblxuLypjc3NsaW50IGltcG9ydGFudDpmYWxzZSovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQdXJlIEJhc2UgRXh0cmFzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEV4dHJhIHJ1bGVzIHRoYXQgUHVyZSBhZGRzIG9uIHRvcCBvZiBOb3JtYWxpemUuY3NzXG4gKi9cblxuLyoqXG4gKiBBbHdheXMgaGlkZSBhbiBlbGVtZW50IHdoZW4gaXQgaGFzIHRoZSBgaGlkZGVuYCBIVE1MIGF0dHJpYnV0ZS5cbiAqL1xuXG4uaGlkZGVuLFxuW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyoqXG4gKiBBZGQgdGhpcyBjbGFzcyB0byBhbiBpbWFnZSB0byBtYWtlIGl0IGZpdCB3aXRoaW4gaXQncyBmbHVpZCBwYXJlbnQgd3JhcHBlciB3aGlsZSBtYWludGFpbmluZ1xuICogYXNwZWN0IHJhdGlvLlxuICovXG4ucHVyZS1pbWcge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4iLCIvKipcbiAqIFRoaXMgaXMgdGhlIHN0eWxlc2hlZXQgZm9yIHRoZSBbW206UHJvamVjdCBwb3J0YWxdXSB0ZW1wbGF0ZXMuXG4gKiBJdCBzaG91bGQgbG9vc2VseSBtYXRjaCB0aGUgc3R5bGUgb2YgTWVkaWFXaWtpJ3MgVmVjdG9yIHRoZW1lXG4gKiBmb3IgY29uc2lzdGVuY3kuXG4gKiBDb2xvcnMgZnJvbSAuL3NraW5zL1ZlY3Rvci9zY3JlZW4uY3NzXG4gKlxuICogSW5kZW50aW9uIHN0eWxlOiAxIHRhYlxuICpcbiAqL1xuXG5ib2R5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBmb250OiAxM3B4LzEuNSBzYW5zLXNlcmlmO1xuICAgIG1hcmdpbjogMC4zZW0gMDtcbn1cblxuYSxcbmE6YWN0aXZlLFxuYTpmb2N1cyB7XG4gICAgdW5pY29kZS1iaWRpOiBlbWJlZDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgY29sb3I6IHZhcigtLWMtcHJpbWFyeSk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYTpmb2N1cyB7XG4gICAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWMtcHJpbWFyeSk7XG59XG5cbmE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5pbWcge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5ociB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTtcbiAgICBtYXJnaW46IDAuMmVtIDFlbTtcbn1cblxuLyoqXG4gKiBDZW50cmFsIGxvZ28gYXJlYSBmb3Igd2lraS1wcm9qZWN0IHBvcnRhbHNcbiAqIChlLmcuIHdoZXJlIHRoZSBnbG9iZSBpcyBvbiB3d3cud2lraXBlZGlhLm9yZylcbiAqL1xuLmNlbnRyYWwtdGV4dGxvZ28ge1xuICAgIG1hcmdpbjogMWVtIDAgMC4zZW0gMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAzMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxMTAlO1xuICAgIGZvbnQtZmFtaWx5OiAnTGludXggTGliZXJ0aW5lJywgJ0hvZWZsZXIgVGV4dCcsIEdlb3JnaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBUaW1lcywgc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgLyogQ3Jvc3NlZCBXIGluIExpbnV4IExpYmVydGluZSAqL1xuICAgIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcInNzMDU9MVwiOyAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJzczA1XCI7XG4gICAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFwic3MwNVwiO1xuICAgIC1tcy1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFwic3MwNVwiO1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJzczA1XCI7XG59XG5cbi5jZW50cmFsLWZlYXR1cmVkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHdpZHRoOiA0MmVtO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGhlaWdodDogMjZlbTtcbn1cblxuLmNlbnRyYWwtZmVhdHVyZWQtbG9nby13cmFwcGVye1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgbGluZS1oZWlnaHQ6IDI2ZW07XG59XG5cbi5jZW50cmFsLWZlYXR1cmVkLWxhbmcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTJlbTtcbn1cblxuLyogTWFrZSBlbnRpcmUgYmxvY2sgY2xpY2thYmxlLCBzdXJwcmVzcyBob3ZlciB1bmRlcmxpbmUgKi9cbi5jZW50cmFsLWZlYXR1cmVkLWxhbmcgLmxpbmstYm94IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi8qIFJlc3RvcmUgdW5kZXJsaW5lIG9uIG1haW4gbGFiZWwgKi9cbi5jZW50cmFsLWZlYXR1cmVkLWxhbmcgLmxpbmstYm94OmhvdmVyIHN0cm9uZyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4vKiBTdXJwcmVzcyBibHVlIGNvbG9yICovXG4uY2VudHJhbC1mZWF0dXJlZC1sYW5nIC5saW5rLWJveCBlbSxcbi5jZW50cmFsLWZlYXR1cmVkLWxhbmcgLmxpbmstYm94IHNtYWxsIHtcbiAgICBjb2xvcjogYmxhY2s7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY2VudHJhbC1mZWF0dXJlZC1sYW5nIHN0cm9uZyB7XG4gICAgZm9udC1zaXplOiBsYXJnZXI7XG59XG5cbi5jZW50cmFsLWZlYXR1cmVkLWxhbmcgZW0ge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmNlbnRyYWwtZmVhdHVyZWQtbGFuZyAuZW1Ob25JdGFsaWNMYW5nIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi8qIFNlcmJvLUNyb2F0aWFuIGlzIGR1YWwtc2NyaXB0LCBzbyBpdCBuZWVkcyBzb21lIHR3ZWFraW5nIHRvIGZpdCBpbiB0aGUgdG9wIDEwIHJpbmcuICovXG4vKiAuZGlncmFwaGljIHN0cm9uZyB7XG4gICAgZm9udC1zaXplOiAxMTAlO1xuICAgIGxpbmUtaGVpZ2h0OiAxZW07XG59XG4uZGlncmFwaGljIGVtLFxuLmRpZ3JhcGhpYyBlbSArIGJyIHtcbiAgICBkaXNwbGF5OiBub25lO1xufSAqL1xuXG4ubGFuZzEge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogNjAlO1xufVxuLmxhbmcyIHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogNjAlO1xufVxuLmxhbmczIHtcbiAgICB0b3A6IDIwJTtcbiAgICByaWdodDogNzAlO1xufVxuLmxhbmc0IHtcbiAgICB0b3A6IDIwJTtcbiAgICBsZWZ0OiA3MCU7XG59XG4ubGFuZzUge1xuICAgIHRvcDogNDAlO1xuICAgIHJpZ2h0OiA3MiU7XG59XG4ubGFuZzYge1xuICAgIHRvcDogNDAlO1xuICAgIGxlZnQ6IDcyJTtcbn1cbi5sYW5nNyB7XG4gICAgdG9wOiA2MCU7XG4gICAgcmlnaHQ6IDcwJTtcbn1cbi5sYW5nOCB7XG4gICAgdG9wOiA2MCU7XG4gICAgbGVmdDogNzAlO1xufVxuLmxhbmc5IHtcbiAgICB0b3A6IDgwJTtcbiAgICByaWdodDogNjAlO1xufVxuLmxhbmcxMCB7XG4gICAgdG9wOiA4MCU7XG4gICAgbGVmdDogNjAlO1xufVxuXG4vKipcbiAqIFNlYXJjaCBiYXIgYmVsb3cgdGhlIGNlbnRyYWwgbG9nbyBhcmVhXG4gKi9cbi5zZWFyY2gtY29udGFpbmVyIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBtYXJnaW46IDFlbSBhdXRvIDEuNWVtIGF1dG87XG4gICAgbWF4LXdpZHRoOiA5NSU7XG4gICAgcGFkZGluZzogMC4zZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IDU0MHB4O1xufVxuXG4uc2VhcmNoLWZvcm0gZmllbGRzZXQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTtcbiAgICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgICBwYWRkaW5nOiAwLjdlbTtcbiAgICB3aWR0aDogYXV0bztcbn1cblxuLnNlYXJjaC1mb3JtICNzZWFyY2hJbnB1dCB7XG4gICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4uc2VhcmNoLWZvcm0gc2VsZWN0IHtcbiAgICBtYXJnaW46IDAgMC40ZW07XG4gICAgcGFkZGluZzogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIG1heC13aWR0aDogMTJlbTtcbiAgICB3aWR0aDogMTJlbTsgLyogb3RoZXJ3aXNlIHRoZSB3aWR0aCBpcyBpbmNvbnNpc3RlbnQgYmV0d2VlbiBicm93c2VycyAqL1xufVxuXG4vKipcbiAqIExhbmd1YWdlIGxpc3RzLCBib29rc2hlbHZlcywgZXRjLlxuICovXG4uYm9va3NoZWxmLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW46IDJlbSAwIDAuNWVtIDA7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4uYm9va3NoZWxmLWNvbnRhaW5lciAudGV4dCB7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbn1cblxuLmJvb2tzaGVsZiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDMwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTEwMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5ib29rc2hlbGYtY29udGFpbmVyIC5ib29rZW5kIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxufVxuXG4ubGFuZ2xpc3Qge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW46IDAuNWVtIDNlbSAyLjVlbSAzZW07XG59XG5cbi5sYW5nbGlzdC1sYXJnZSB7XG4gICAgZm9udC1zaXplOiBsYXJnZXI7XG59XG5cbi5sYW5nbGlzdC10aW55IHtcbiAgICBtYXJnaW46IDAuNWVtIDNlbSAzZW0gM2VtO1xufVxuXG4ubGFuZ2xpc3Qtb3RoZXJzIHtcbiAgICBtYXJnaW46IDAgM2VtIDJlbSAzZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5vdGhlcnByb2plY3RzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBtYXJnaW46IDEuNWVtIGF1dG87XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIHdpZHRoOiA5MCU7XG59XG5cbi5vdGhlcnByb2plY3RzLWl0ZW0ge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGhlaWdodDogNjBweDtcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gICAgd2lkdGg6IDI0Ljc1JTtcbiAgICBsaW5lLWhlaWdodDogNjBweDtcbn1cblxuLm90aGVycHJvamVjdHMtaXRlbSBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTBlbTtcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLnNwcml0ZS1wcm9qZWN0LWxvZ29zLXdyYXBwZXJ7XG4gICAgd2lkdGg6IDQ3cHg7XG4gICAgZGlzcGxheTogLW1vei1pbmxpbmUtc3RhY2s7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm90aGVycHJvamVjdHMtaXRlbSAuc3ByaXRlLXByb2plY3QtbG9nb3N7XG4gICAgZGlzcGxheTogLW1vei1pbmxpbmUtc3RhY2s7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5vdGhlcnByb2plY3RzLWl0ZW0gLm90aGVycHJvamVjdHMtaXRlbS1uYW1lIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uc3ByaXRlLXByb2plY3QtbG9nb3MtV2lraXNwZWNpZXMtbG9nb19zaXN0ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0wcHggLTMyNHB4ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDM1cHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cblxuLndtLXNpdGUtaW5mbyB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgbWFyZ2luOiAyLjVlbSAwIDJlbSAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nLXRvcDogMS41ZW07XG59XG5cbi8qKlxuICogU3R5bGUgZm9yIGhvcml6b250YWwgbGlzdHMgKHNlcGFyYXRvciBmb2xsb3dpbmcgaXRlbSkuXG4gKiBAbm90ZSBTdXBwb3J0IGZvciB1bnVzZWQgdGFncyBsaWtlIDxkdD4gaGFzIGJlZW4gc3RyaXBwZWQgb3V0LCBhbmQgdGhlXG4gKlx0XHQgZGVwZW5kZW5jeSBvbiA6bGFzdC1jaGlsZCBhbmQgSmF2YVNjcmlwdCBoYXMgYmVlbiByZW1vdmVkIGluIGZhdm9yIG9mXG4gKlx0XHQgOmJlZm9yZS5cbiAqIEBzb3VyY2UgbWVkaWF3aWtpLm9yZy93aWtpL1NuaXBwZXRzL0hvcml6b250YWxfbGlzdHNcbiAqIEByZXZpc2lvbiA2ICgyMDE0LTA1LTA5KVxuICogQGF1dGhvciBbW1VzZXI6RWRva3Rlcl1dXG4gKi9cbi5obGlzdCB1bCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG4vKiBEaXNwbGF5IGxpc3QgaXRlbXMgaW5saW5lICovXG4uaGxpc3QgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbn1cbi8qIERpc3BsYXkgbmVzdGVkIGxpc3RzIGlubGluZSAqL1xuLmhsaXN0IHVsIHVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG59XG4vKiBHZW5lcmF0ZSBpbnRlcnB1bmN0cyAqL1xuLmhsaXN0IGxpOmJlZm9yZSB7XG4gICAgY29udGVudDogXCIgwrcgXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uaGxpc3QgbGk6Zmlyc3QtY2hpbGQ6YmVmb3JlIHtcbiAgICBjb250ZW50OiBub25lO1xufVxuLyogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBuZXN0ZWQgbGlzdHMgKi9cbi5obGlzdCBsaSArIHVsOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXDAwYTAoXCI7XG59XG4uaGxpc3QgbGkgKyB1bDphZnRlciB7XG4gICAgY29udGVudDogXCIpIFwiO1xufVxuXG4vKipcbiAqIFByaW50IHN0eWxlc2hlZXRcbiAqL1xuQG1lZGlhIHByaW50IHtcblxuICAgIGJvZHkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGE6bGluayxcbiAgICBhOnZpc2l0ZWQge1xuICAgICAgICBjb2xvcjogIzUyMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgIH1cblxufVxuXG5AbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOjQ4MHB4KSB7XG4gICAgLmNlbnRyYWwtdGV4dGxvZ28ge1xuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGhlaWdodDogNzBweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA4NHB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC5jZW50cmFsLXRleHRsb2dvIGltZyB7XG4gICAgICAgIGhlaWdodDogMzVweDtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIG1hcmdpbi10b3A6IDIyLjVweDtcbiAgICB9XG4gICAgLmNlbnRyYWwtZmVhdHVyZWQge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBwYWRkaW5nLXRvcDogMmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgICBtYXJnaW4tdG9wOiA0ZW07XG4gICAgfVxuICAgIC5jZW50cmFsLWZlYXR1cmVkLWxvZ28ge1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogMC44ZW07XG4gICAgICAgIHRvcDogLTcwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IC00ZW07XG4gICAgICAgIHdpZHRoOiA3MHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICAgIC5jZW50cmFsLWZlYXR1cmVkLWxhbmcge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdG9wOiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxZW07XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgd2lkdGg6IDQwJTtcbiAgICAgICAgaGVpZ2h0OiA1ZW07XG4gICAgfVxuICAgIC5zZWFyY2gtY29udGFpbmVyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgaGVpZ2h0OiA2ZW07XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1ZW07XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAuc2VhcmNoLWNvbnRhaW5lciBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5zZWFyY2gtZm9ybSAjc2VhcmNoSW5wdXQge1xuICAgICAgICBtYXgtd2lkdGg6IDQwJTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246bWlkZGxlO1xuICAgIH1cbiAgICAuc2VhcmNoLWZvcm0gI3NlYXJjaExhbmd1YWdlLFxuICAgIC5zZWFyY2gtZm9ybSAuZm9ybUJ0biB7XG4gICAgICAgIG1heC13aWR0aDogMjUlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgICBmb3JtIGZpZWxkc2V0IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cbiAgICAubGFuZ3VhZ2Utc2VhcmNoIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLmJvb2tzaGVsZiB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAuYm9va3NoZWxmLWNvbnRhaW5lciAuYm9va2VuZCB7XG4gICAgICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5ib29rc2hlbGYtY29udGFpbmVyIC5ib29rZW5kOmxhc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAubGFuZ2xpc3QgYSB7XG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG4gICAgLmxhbmdsaXN0IHtcbiAgICAgICAgZm9udC1zaXplOiAwLjdlbVxuICAgIH1cbiAgICAub3RoZXJwcm9qZWN0cy1pdGVtIHtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLmJvb2tzaGVsZi1jb250YWluZXIsXG4gICAgLmxhbmdsaXN0IHtcbiAgICAgICAgbWFyZ2luOiAxZW0gMWVtIDAgMWVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gICAgaHIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgICB9XG59XG5cbkBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6MjQwcHgpIHtcbiAgICAuY2VudHJhbC1mZWF0dXJlZC1sYW5nLFxuICAgIC5vdGhlcnByb2plY3RzLWl0ZW0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLmNlbnRyYWwtdGV4dGxvZ28gaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMHB4O1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgfVxufVxuXG5AbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiA0NWVtKSB7XG4gICAgLm90aGVycHJvamVjdHMge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLm90aGVycHJvamVjdHMtaXRlbSB7XG4gICAgICAgIHdpZHRoOiAzMy4zMyU7XG4gICAgfVxufVxuQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogMzBlbSkge1xuICAgIC5vdGhlcnByb2plY3RzLWl0ZW0ge1xuICAgICAgICB3aWR0aDogNTAlO1xuICAgIH1cbn1cbkBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6IDIwZW0pIHtcbiAgICAub3RoZXJwcm9qZWN0cy1pdGVtIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxufVxuXG5AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS41KSwgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMS41KSwgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDMvMiksIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCksIChtaW4tcmVzb2x1dGlvbjogMTQ0ZHBpKSB7XG4gICAgLmJvb2tzaGVsZi1jb250YWluZXIgLmJvb2tlbmQge1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggYXV0bztcbiAgICB9XG59XG5cbkBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSB7XG4gICAgLmJvb2tzaGVsZi1jb250YWluZXIgLmJvb2tlbmQge1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggYXV0bztcbiAgICB9XG59XG5cbi8qIFN1YnBpeGVsIGJvcmRlcnMgc3VwcG9ydGVkIGluIEdlY2tvLCBUcmlkZW50ICovXG5AbWVkaWEgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSkge1xuICAgICNmb290ZXIsXG4gICAgLnNlYXJjaC1mb3JtIGZpZWxkc2V0IHtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwLjVweDtcbiAgICB9XG5cbiAgICBociB7XG4gICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDAuNXB4O1xuICAgIH1cbn1cblxuLyogU3VicGl4ZWwgYm9yZGVycyBub3Qgc3VwcG9ydGVkIGluIG9sZGVyIHJlbGVhc2VzIG9mIEJsaW5rLCBXZWJLaXQgKi9cbkBzdXBwb3J0cyAoLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzMGRlZykpIHtcbiAgICAjZm9vdGVyLFxuICAgIC5zZWFyY2gtZm9ybSBmaWVsZHNldCB7XG4gICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgIH1cblxuICAgIGhyIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICAgIH1cbn1cblxuLyogR2l2ZXMgdGhlIGJ1dHRvbiBpdHMgcHJldmlvdXMgbmF0aXZlIGxvb2sgKi9cbi5mb3JtQnRuIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRTRFNEU0O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U4ZThlODtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0NFQ0VDRTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgcGFkZGluZzogMXB4IDhweDtcbiAgICBtYXJnaW4tbGVmdDogLjNlbTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLmZvcm1CdG4gLnNwcml0ZS1ib29rc2hlbGZfaWNvbnMtc2VhcmNoX2ljb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmZvcm1CdG46Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNjMGMwYzA7XG4gICAgb3V0bGluZTogMDtcbn1cbi5mb3JtQnRuOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2IwYjBiMDtcbn1cblxuLyogR2l2ZXMgdGhlIGlucHV0cyB0aGVpciBwcmV2aW91cyBsb29rICovXG4uc2VhcmNoLWNvbnRhaW5lciAuc2VhcmNoLWZvcm0gI3NlYXJjaElucHV0IHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgcGFkZGluZzogMXB4IDNweDtcbiAgICB3aWR0aDogMTVlbTsgLyogb3RoZXJ3aXNlIHRoZSB3aWR0aCBpcyBpbmNvbnNpc3RlbnQgYmV0d2VlbiBicm93c2VycyAqL1xufVxuI2xhbmdzZWFyY2gtaW5wdXQge1xuICAgIHBhZGRpbmc6IDFweCAycHg7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4iXX0= */ \ No newline at end of file diff --git a/dev/wikipedia.org/assets/cssnext/README.txt b/dev/wikipedia.org/assets/cssnext/README.txt new file mode 100644 index 0000000..a6e4706 --- /dev/null +++ b/dev/wikipedia.org/assets/cssnext/README.txt @@ -0,0 +1,10 @@ +The files in the directory are processed by cssnext. +style.css is the 'main' file. All other files are +treated as 'partials' that should be included in style.css +via @import statements. PostCSS-import will expand the @import +statements and merge these files in style.css. + +All other files should be treated as 'partials' and +should begin with an underscore. + +_vars.css is reserved for css variables (css custom properties). \ No newline at end of file diff --git a/dev/wikipedia.org/assets/css/base.css b/dev/wikipedia.org/assets/cssnext/_base.css similarity index 100% rename from dev/wikipedia.org/assets/css/base.css rename to dev/wikipedia.org/assets/cssnext/_base.css diff --git a/dev/wikipedia.org/assets/css/buttons.css b/dev/wikipedia.org/assets/cssnext/_buttons.css similarity index 100% rename from dev/wikipedia.org/assets/css/buttons.css rename to dev/wikipedia.org/assets/cssnext/_buttons.css diff --git a/dev/wikipedia.org/assets/css/forms.css b/dev/wikipedia.org/assets/cssnext/_forms.css similarity index 100% rename from dev/wikipedia.org/assets/css/forms.css rename to dev/wikipedia.org/assets/cssnext/_forms.css diff --git a/dev/wikipedia.org/assets/css/pab1.css b/dev/wikipedia.org/assets/cssnext/_pab1.css similarity index 100% rename from dev/wikipedia.org/assets/css/pab1.css rename to dev/wikipedia.org/assets/cssnext/_pab1.css diff --git a/dev/wikipedia.org/assets/css/pab2.css b/dev/wikipedia.org/assets/cssnext/_pab2.css similarity index 100% rename from dev/wikipedia.org/assets/css/pab2.css rename to dev/wikipedia.org/assets/cssnext/_pab2.css diff --git a/dev/wikipedia.org/assets/cssnext/_vars.css b/dev/wikipedia.org/assets/cssnext/_vars.css new file mode 100644 index 0000000..037f11c --- /dev/null +++ b/dev/wikipedia.org/assets/cssnext/_vars.css @@ -0,0 +1,6 @@ +/** +* Colors from https://phabricator.wikimedia.org/diffusion/WMUI/browse/master/base.less +*/ +:root { + --c-primary: #165c91; +} \ No newline at end of file diff --git a/dev/wikipedia.org/assets/css/wm-portal.css b/dev/wikipedia.org/assets/cssnext/_wm-portal.css similarity index 95% rename from dev/wikipedia.org/assets/css/wm-portal.css rename to dev/wikipedia.org/assets/cssnext/_wm-portal.css index 93311d4..96304e6 100644 --- a/dev/wikipedia.org/assets/css/wm-portal.css +++ b/dev/wikipedia.org/assets/cssnext/_wm-portal.css @@ -6,14 +6,6 @@ * * Indention style: 1 tab * - * Don't be afraid to document changes here with comments, this stylesheet - * is loaded through ResourceLoader on the portal pages and as such is minified - * and squeezed into a tiny package delivered from bits.wikimedia.org - * - * Usage: - * <link rel="stylesheet" href="//meta.wikimedia.org/w/load.php?debug=false&lang=en&modules=ext.gadget.wm-portal&only=styles&skin=vector&*"> - * - * (if RTL flipping is needed, replace lang=en with the correct language) */ body { @@ -28,13 +20,12 @@ unicode-bidi: embed; white-space: nowrap; outline: 0; - color: #0645AD; + color: var(--c-primary); text-decoration: none; } a:focus { - outline: 1px solid #0645AD; + outline: 1px solid var(--c-primary); } - a:hover { text-decoration: underline; diff --git a/dev/wikipedia.org/assets/cssnext/style.css b/dev/wikipedia.org/assets/cssnext/style.css new file mode 100644 index 0000000..2ab91f2 --- /dev/null +++ b/dev/wikipedia.org/assets/cssnext/style.css @@ -0,0 +1,3 @@ +@import '_vars.css'; +@import '_base.css'; +@import '_wm-portal.css'; \ No newline at end of file diff --git a/dev/wikipedia.org/index.handlebars b/dev/wikipedia.org/index.handlebars index d83803f..835e696 100644 --- a/dev/wikipedia.org/index.handlebars +++ b/dev/wikipedia.org/index.handlebars @@ -8,8 +8,7 @@ <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="shortcut icon" href="/static/favicon/wikipedia.ico"> <link rel="license" href="//creativecommons.org/licenses/by-sa/3.0/"> -<link rel="stylesheet" href="assets/css/base.css"> -<link rel="stylesheet" href="assets/css/wm-portal.css"> +<link rel="stylesheet" href="assets/css/style.css"> <link rel="stylesheet" href="assets/css/sprites.css"> <!--[if lt IE 8]><style type="text/css"> diff --git a/gulpfile.js b/gulpfile.js index d49c785..8e17cf3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,7 +10,8 @@ siteStats = require( './site-stats' ), fs = require( 'fs' ), sprity = require( 'sprity' ), - gulpif = require( 'gulp-if' ); + postCSSNext = require( 'postcss-cssnext' ), + postCSSImport = require( 'postcss-import' ); var baseDir, prodDir, plugins = gulpLoadPlugins(), @@ -96,12 +97,17 @@ }; config.watch = { - hb: [ baseDir + 'templates/*.handlebars', baseDir + '.json', baseDir + 'controller.js' ], - sprites: [ baseDir + 'assets/img/sprite_assets/**/*' ] + sprites: [ baseDir + 'assets/img/sprite_assets/**/*' ], + cssnext: baseDir + 'assets/cssnext/*.css', + hb: [ baseDir + '*.handlebars', + baseDir + '.json', + baseDir + 'controller.js', + baseDir + 'templates/**/*' + ] }; config.optImage = { - src: baseDir + 'assets/img/*', + src: [ baseDir + 'assets/img/*', '!' + baseDir + 'assets/img/sprite_assets' ], pngQuantOptions: { quality: '57-95', speed: 1 }, dest: prodDir + 'assets/img' }; @@ -129,10 +135,30 @@ } ); /** + * Compiles CSSNext files into regular CSS and + * outputs them into the CSS dev folder. + */ +gulp.task( 'cssnext', function () { + + if ( !baseDir ) { + gulp.start( 'build' ); + } + + return gulp.src( baseDir + 'assets/cssnext/style.css' ) + .pipe( plugins.postcss( [ + postCSSImport(), + postCSSNext() + ], + { map: { inline: true } } + ) ) + .pipe( gulp.dest( baseDir + 'assets/css/' ) ); +} ); + +/** * Inlines assets of index.html in dev folder, * moves index.html into prod folder */ -gulp.task( 'inline-assets', [ 'compile-handlebars' ], function () { +gulp.task( 'inline-assets', [ 'compile-handlebars', 'cssnext' ], function () { return gulp.src( config.inline.src ) .pipe( plugins.inline( config.inline.options ) ) .pipe( gulp.dest( prodDir ) ); @@ -174,7 +200,7 @@ /** * Optimizes images in dev folder and moves them into prod folder */ -gulp.task( 'optimize-images', [ 'build', 'sprite' ], function () { +gulp.task( 'optimize-images', [ 'build' ], function () { return gulp.src( config.optImage.src ) .pipe( plugins.imagemin() ) .pipe( imageminPngquant( config.optImage.pngQuantOptions )() ) @@ -182,13 +208,15 @@ } ); /** - * Watches for changes in dev folder and compiles handlebars + * Watches for changes in dev folder and compiles: + * - handlebars templates + * - CSSNext files * into dev folder. */ -gulp.task( 'watch', [ 'build', 'compile-handlebars', 'sprite' ], function () { +gulp.task( 'watch', [ 'build', 'compile-handlebars', 'sprite', 'cssnext' ], function () { gulp.watch( config.watch.hb, [ 'compile-handlebars' ] ); gulp.watch( config.watch.sprites, [ 'sprite' ] ); - + gulp.watch( config.watch.cssnext, [ 'cssnext' ] ); } ); /** @@ -257,8 +285,9 @@ split: true, margin: 0 } ) - .pipe( gulpif( '*.png', gulp.dest( baseDir + 'assets/img/' ), gulp.dest( baseDir + 'assets/css/' ) ) ); + .pipe( plugins[ 'if' ]( '*.png', gulp.dest( baseDir + 'assets/img/' ), gulp.dest( baseDir + 'assets/css/' ) ) ); } ); -gulp.task( 'default', [ 'build', 'lint', 'compile-handlebars', 'sprite', 'inline-assets', 'clean-prod-js', 'concat-minify-js', 'minify-html', 'optimize-images' ] ); +gulp.task( 'default', [ 'build', 'lint', 'compile-handlebars', 'sprite', 'cssnext', 'inline-assets', 'clean-prod-js', 'concat-minify-js', 'minify-html', 'optimize-images' ] ); + gulp.task( 'test', [ 'lint' ] ); diff --git a/package.json b/package.json index f0384b7..20ef7de 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,12 @@ { "private": true, "scripts": { - "test": "gulp lint" + "test": "node ./tests/lint.js" }, "devDependencies": { "bluebird": "^3.0.5", "del": "^2.2.0", + "cssnext": "^1.8.4", "gulp": "^3.9.0", "gulp-compile-handlebars": "^0.5.0", "gulp-downloader": "^1.0.4", @@ -17,6 +18,7 @@ "gulp-jshint": "^1.11.2", "gulp-load-plugins": "^1.0.0", "gulp-minify-css": "^1.2.1", + "gulp-postcss": "^6.0.1", "gulp-rename": "^1.2.2", "gulp-rev": "^6.0.1", "gulp-rev-replace": "^0.4.3", @@ -26,6 +28,8 @@ "imagemin-pngquant": "^4.2.0", "lwip": "0.0.8", "moment": "^2.10.6", + "postcss-cssnext": "^2.4.0", + "postcss-import": "^8.0.2", "preq": "^0.4.6", "sprity": "^1.0.8", "underscore": "^1.8.3", diff --git a/prod/wikipedia.org/index.html b/prod/wikipedia.org/index.html index deee21a..56d24cc 100644 --- a/prod/wikipedia.org/index.html +++ b/prod/wikipedia.org/index.html @@ -8,8 +8,7 @@ <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="shortcut icon" href="/static/favicon/wikipedia.ico"> <link rel="license" href="//creativecommons.org/licenses/by-sa/3.0/"> -<style>img,legend{border:0}legend,td,th{padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=search]:focus{outline-offset:-2px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-collapse:collapse;border-spacing:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}</style> -<style>hr,img{border:none}.central-featured,.search-container,img{vertical-align:middle}body{background-color:#fff;font:13px/1.5 sans-serif;margin:.3em 0}a,a:active,a:focus{unicode-bidi:embed;white-space:nowrap;outline:0;color:#0645AD;text-decoration:none}a:focus{outline:#0645AD solid 1px}a:hover{text-decoration:underline}hr{clear:both;height:0;border-bottom:1px solid #aaa;margin:.2em 1em}.central-textlogo{margin:1em 0 .3em;text-align:center;font-size:30px;line-height:110%;font-family:'Linux Libertine','Hoefler Text',Georgia,'Times New Roman',Times,serif;font-weight:400;padding:10px 0;-moz-font-feature-settings:"ss05=1";-moz-font-feature-settings:"ss05";-webkit-font-feature-settings:"ss05";-ms-font-feature-settings:"ss05";font-feature-settings:"ss05"}.central-featured{position:relative;text-align:center;max-width:100%;width:42em;margin:0 auto;height:26em}.central-featured-logo-wrapper{vertical-align:middle;line-height:26em}.central-featured-lang{position:absolute;width:12em}.central-featured-lang .link-box{display:block;padding:0;text-decoration:none}.central-featured-lang .link-box:hover strong{text-decoration:underline}.central-featured-lang .link-box em,.central-featured-lang .link-box small{color:#000;text-decoration:none}.central-featured-lang strong{font-size:larger}.central-featured-lang em{font-style:italic}.central-featured-lang .emNonItalicLang{font-style:normal}.lang1{top:0;right:60%}.lang2{top:0;left:60%}.lang3{top:20%;right:70%}.lang4{top:20%;left:70%}.lang5{top:40%;right:72%}.lang6{top:40%;left:72%}.lang7{top:60%;right:70%}.lang8{top:60%;left:70%}.lang9{top:80%;right:60%}.lang10{top:80%;left:60%}.search-container{float:none;margin:1em auto 1.5em;max-width:95%;padding:.3em;text-align:center;width:540px}.search-form fieldset{background-color:#f9f9f9;border:1px solid #aaa;margin-top:.5em;padding:.7em;width:auto}.search-form #searchInput{font-size:1.2em;margin:0;padding:0;vertical-align:top}.search-form select{margin:0 .4em;padding:0;vertical-align:middle;max-width:12em;width:12em}.bookshelf-container{width:100%;overflow:hidden;margin:2em 0 .5em;font-size:13px;font-weight:700;line-height:20px}.bookshelf-container .text{padding:0 .5em}.bookshelf{display:block;width:300%;overflow:hidden;position:relative;left:-100%;text-align:center;white-space:nowrap}.bookshelf-container .bookend{display:inline-block;vertical-align:top}.langlist{text-align:center;margin:.5em 3em 2.5em}.langlist-large{font-size:larger}.langlist-tiny{margin:.5em 3em 3em}.langlist-others{margin:0 3em 2em;font-weight:700}.otherprojects{font-weight:700;margin:1.5em auto;text-align:left;vertical-align:middle;width:90%}.otherprojects-item{float:left;height:60px;min-width:12em;width:24.75%;line-height:60px}.otherprojects-item a{display:block;width:10em;margin:0 auto}.sprite-project-logos-wrapper{width:47px;display:-moz-inline-stack;display:inline-block;text-align:center;vertical-align:middle}.otherprojects-item .sprite-project-logos{display:-moz-inline-stack;display:inline-block;text-align:center;vertical-align:middle}.otherprojects-item .otherprojects-item-name{vertical-align:middle}.sprite-project-logos-Wikispecies-logo_sister{background-position:0 -324px!important;width:35px!important;height:40px!important}.wm-site-info{clear:both;margin:2.5em 0 2em;text-align:center;padding-top:1.5em}.hlist ul{margin:0;padding:0}.hlist li,.hlist ul ul{display:inline}.hlist li:before{content:" · ";font-weight:700}.hlist li:first-child:before{content:none}.hlist li+ul:before{content:"\00a0("}.hlist li+ul:after{content:") "}@media print{body{background-color:transparent}a{color:#000!important;background:0 0!important;padding:0!important}a:link,a:visited{color:#520;background:0 0}img{border:none}}@media all and (max-width:480px){.central-textlogo{line-height:normal;padding:0 0 0 84px;margin:0;height:70px;text-align:left;position:relative}.central-textlogo img{height:35px;width:auto;margin-top:22.5px}.central-featured{width:auto;height:auto;padding-top:2em;text-align:left;font-size:.8em;margin-top:4em}.central-featured-logo{right:0;left:.8em;top:-70px;margin-top:-4em;width:70px;position:absolute}.central-featured-lang{right:auto;top:auto;position:relative;left:auto;text-align:left;margin-left:1em;display:block;float:left;width:40%;height:5em}.language-search,.search-container label{display:none}.search-container{margin-top:0;height:6em;position:absolute;top:5em;left:0;right:0;max-width:100%;width:auto;padding:0;text-align:left}.search-form #searchInput{max-width:40%;vertical-align:middle}.search-form #searchLanguage,.search-form .formBtn{max-width:25%;vertical-align:middle}form fieldset{margin:0;border-left:none;border-right:none}.bookshelf{width:auto;left:auto;overflow:hidden;text-align:left}.bookshelf-container .bookend{width:40px!important}.bookshelf-container .bookend:last-child{display:none}.langlist a{word-wrap:break-word;white-space:normal}.langlist{font-size:.7em}.otherprojects-item{width:50%;text-align:left}.bookshelf-container,.langlist{margin:1em 1em 0;text-align:left;width:auto}hr{margin-top:.5em}}@media all and (max-width:240px){.central-featured-lang,.otherprojects-item{width:100%}.central-textlogo img{width:100px;height:auto}}@media all and (max-width:45em){.otherprojects{width:100%}.otherprojects-item{width:33.33%}}@media all and (max-width:30em){.otherprojects-item{width:50%}}@media all and (max-width:20em){.otherprojects-item{width:100%}}@media (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:3/2),(min-resolution:1.5dppx),(min-resolution:144dpi){.bookshelf-container .bookend{background-size:40px auto}}@media (-webkit-min-device-pixel-ratio:2),(min--moz-device-pixel-ratio:2),(-o-min-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){.bookshelf-container .bookend{background-size:40px auto}}@media (min--moz-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){#footer,.search-form fieldset{border-width:.5px}hr{border-bottom-width:.5px}}@supports (-webkit-transform:rotate(30deg)){#footer,.search-form fieldset{border-width:1px}hr{border-bottom-width:1px}}.formBtn{background-color:#fff;border:1px solid #E4E4E4;border-radius:4px;border-top:1px solid #e8e8e8;border-bottom:1px solid #CECECE;font-size:11px;padding:1px 8px;margin-left:.3em;vertical-align:top}.formBtn .sprite-bookshelf_icons-search_icon{display:inline-block;vertical-align:middle}.formBtn:focus{background-color:silver;outline:0}.formBtn:active{background-color:#b0b0b0}.search-container .search-form #searchInput{font-size:13px;padding:1px 3px;width:15em}#langsearch-input{padding:1px 2px;font-size:11px;vertical-align:top}</style> +<style>legend,td,th{padding:0}hr,img{border:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.central-featured,.search-container,img{vertical-align:middle}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=search]:focus{outline-offset:-2px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0}table{border-collapse:collapse;border-spacing:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}body{background-color:#fff;font:13px/1.5 sans-serif;margin:.3em 0}a,a:active,a:focus{unicode-bidi:embed;white-space:nowrap;outline:0;color:#165c91;text-decoration:none}a:focus{outline:#165c91 solid 1px}a:hover{text-decoration:underline}hr{box-sizing:content-box;clear:both;height:0;border-bottom:1px solid #aaa;margin:.2em 1em}.central-textlogo{margin:1em 0 .3em;text-align:center;font-size:30px;line-height:110%;font-family:'Linux Libertine','Hoefler Text',Georgia,'Times New Roman',Times,serif;font-weight:400;padding:10px 0;-webkit-font-feature-settings:"ss05";-ms-font-feature-settings:"ss05";font-feature-settings:"ss05"}.central-featured{position:relative;text-align:center;max-width:100%;width:42em;margin:0 auto;height:26em}.central-featured-logo-wrapper{vertical-align:middle;line-height:26em}.central-featured-lang{position:absolute;width:12em}.central-featured-lang .link-box{display:block;padding:0;text-decoration:none}.central-featured-lang .link-box:hover strong{text-decoration:underline}.central-featured-lang .link-box em,.central-featured-lang .link-box small{color:#000;text-decoration:none}.central-featured-lang strong{font-size:larger}.central-featured-lang em{font-style:italic}.central-featured-lang .emNonItalicLang{font-style:normal}.lang1{top:0;right:60%}.lang2{top:0;left:60%}.lang3{top:20%;right:70%}.lang4{top:20%;left:70%}.lang5{top:40%;right:72%}.lang6{top:40%;left:72%}.lang7{top:60%;right:70%}.lang8{top:60%;left:70%}.lang9{top:80%;right:60%}.lang10{top:80%;left:60%}.search-container{float:none;margin:1em auto 1.5em;max-width:95%;padding:.3em;text-align:center;width:540px}.search-form fieldset{background-color:#f9f9f9;border:1px solid #aaa;margin-top:.5em;padding:.7em;width:auto}.search-form #searchInput{font-size:1.2em;margin:0;padding:0;vertical-align:top}.search-form select{margin:0 .4em;padding:0;vertical-align:middle;max-width:12em;width:12em}.bookshelf-container{width:100%;overflow:hidden;margin:2em 0 .5em;font-size:13px;font-weight:700;line-height:20px}.bookshelf-container .text{padding:0 .5em}.bookshelf{display:block;width:300%;overflow:hidden;position:relative;left:-100%;text-align:center;white-space:nowrap}.bookshelf-container .bookend{display:inline-block;vertical-align:top}.langlist{text-align:center;margin:.5em 3em 2.5em}.langlist-large{font-size:larger}.langlist-tiny{margin:.5em 3em 3em}.langlist-others{margin:0 3em 2em;font-weight:700}.otherprojects{font-weight:700;margin:1.5em auto;text-align:left;vertical-align:middle;width:90%}.otherprojects-item{float:left;height:60px;min-width:12em;width:24.75%;line-height:60px}.otherprojects-item a{display:block;width:10em;margin:0 auto}.sprite-project-logos-wrapper{width:47px;display:-moz-inline-stack;display:inline-block;text-align:center;vertical-align:middle}.otherprojects-item .sprite-project-logos{display:-moz-inline-stack;display:inline-block;text-align:center;vertical-align:middle}.otherprojects-item .otherprojects-item-name{vertical-align:middle}.sprite-project-logos-Wikispecies-logo_sister{background-position:0 -324px!important;width:35px!important;height:40px!important}.wm-site-info{clear:both;margin:2.5em 0 2em;text-align:center;padding-top:1.5em}.hlist ul{margin:0;padding:0}.hlist li,.hlist ul ul{display:inline}.hlist li:before{content:" · ";font-weight:700}.hlist li:first-child:before{content:none}.hlist li+ul:before{content:"\00a0("}.hlist li+ul:after{content:") "}@media print{body{background-color:transparent}a{color:#000!important;background:0 0!important;padding:0!important}a:link,a:visited{color:#520;background:0 0}img{border:none}}@media all and (max-width:480px){.central-textlogo{line-height:normal;padding:0 0 0 84px;margin:0;height:70px;text-align:left;position:relative}.central-textlogo img{height:35px;width:auto;margin-top:22.5px}.central-featured{width:auto;height:auto;padding-top:2em;text-align:left;font-size:.8em;margin-top:4em}.central-featured-logo{right:0;left:.8em;top:-70px;margin-top:-4em;width:70px;position:absolute}.central-featured-lang{right:auto;top:auto;position:relative;left:auto;text-align:left;margin-left:1em;display:block;float:left;width:40%;height:5em}.language-search,.search-container label{display:none}.search-container{margin-top:0;height:6em;position:absolute;top:5em;left:0;right:0;max-width:100%;width:auto;padding:0;text-align:left}.search-form #searchInput{max-width:40%;vertical-align:middle}.search-form #searchLanguage,.search-form .formBtn{max-width:25%;vertical-align:middle}form fieldset{margin:0;border-left:none;border-right:none}.bookshelf{width:auto;left:auto;overflow:hidden;text-align:left}.bookshelf-container .bookend{width:40px!important}.bookshelf-container .bookend:last-child{display:none}.langlist a{word-wrap:break-word;white-space:normal}.langlist{font-size:.7em}.otherprojects-item{width:50%;text-align:left}.bookshelf-container,.langlist{margin:1em 1em 0;text-align:left;width:auto}hr{margin-top:.5em}}@media all and (max-width:240px){.central-featured-lang,.otherprojects-item{width:100%}.central-textlogo img{width:100px;height:auto}}@media all and (max-width:45em){.otherprojects{width:100%}.otherprojects-item{width:33.33%}}@media all and (max-width:30em){.otherprojects-item{width:50%}}@media all and (max-width:20em){.otherprojects-item{width:100%}}@media (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(min-resolution:1.5dppx),(min-resolution:144dpi){.bookshelf-container .bookend{background-size:40px auto}}@media (-webkit-min-device-pixel-ratio:2),(min--moz-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){.bookshelf-container .bookend{background-size:40px auto}}@media (min--moz-device-pixel-ratio:2),(-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){#footer,.search-form fieldset{border-width:.5px}hr{border-bottom-width:.5px}}@supports (-webkit-transform:rotate(30deg)){#footer,.search-form fieldset{border-width:1px}hr{border-bottom-width:1px}}.formBtn{background-color:#fff;border:1px solid #E4E4E4;border-radius:4px;border-top:1px solid #e8e8e8;border-bottom:1px solid #CECECE;font-size:11px;padding:1px 8px;margin-left:.3em;vertical-align:top}.formBtn .sprite-bookshelf_icons-search_icon{display:inline-block;vertical-align:middle}.formBtn:focus{background-color:silver;outline:0}.formBtn:active{background-color:#b0b0b0}.search-container .search-form #searchInput{font-size:13px;padding:1px 3px;width:15em}#langsearch-input{padding:1px 2px;font-size:11px;vertical-align:top}</style> <style>.sprite-bookshelf_icons{background-image:url(portal/wikipedia.org/assets/img/sprite-bookshelf_icons.png)}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:144dpi){.sprite-bookshelf_icons{background-image:url(portal/wikipedia.org/assets/img/sprite-bookshelf_ic...@1.5x.png);background-size:40px 57px}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.sprite-bookshelf_icons{background-image:url(portal/wikipedia.org/assets/img/sprite-bookshelf_ic...@2x.png);background-size:40px 57px}}.sprite-bookshelf_icons-caretDown{background-position:0 0;width:12px;height:12px}.sprite-bookshelf_icons-search-ltr-invert{background-position:0 -12px;width:12px;height:12px}.sprite-bookshelf_icons-search_icon{background-position:0 -24px;width:12px;height:13px}.sprite-bookshelf_icons-Bookshelf{background-position:0 -37px;width:40px;height:20px}.sprite-project-logos{background-image:url(portal/wikipedia.org/assets/img/sprite-project-logos.png)}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:144dpi){.sprite-project-logos{background-image:url(portal/wikipedia.org/assets/img/sprite-project-lo...@1.5x.png);background-size:88px 452px}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.sprite-project-logos{background-image:url(portal/wikipedia.org/assets/img/sprite-project-lo...@2x.png);background-size:88px 453px}}.sprite-project-logos-Wikinews-logo_sister{background-position:0 0;width:47px;height:26px}.sprite-project-logos-Wikidata-logo_sister{background-position:0 -26px;width:47px;height:27px}.sprite-project-logos-Wikiversity-logo_sister{background-position:0 -52px;width:35px;height:28px}.sprite-project-logos-wikimedia-button{background-position:0 -80px;width:88px;height:31px}.sprite-project-logos-Wikibooks-logo_sister{background-position:0 -111px;width:35px;height:35px}.sprite-project-logos-Meta-logo_sister{background-position:0 -146px;width:35px;height:35px}.sprite-project-logos-Wikivoyage-logo_sister{background-position:0 -181px;width:35px;height:35px}.sprite-project-logos-Wiktionary-logo_sister{background-position:0 -216px;width:35px;height:35px}.sprite-project-logos-MediaWiki-logo_sister{background-position:0 -251px;width:47px;height:36px}.sprite-project-logos-Wikisource-logo_sister{background-position:0 -287px;width:35px;height:37px}.sprite-project-logos-Wikispecies-logo_sister{background-position:0 -323px;width:35px;height:41px}.sprite-project-logos-Wikiquote-logo_sister{background-position:0 -364px;width:35px;height:42px}.sprite-project-logos-Commons-logo_sister{background-position:0 -406px;width:35px;height:47px}</style> <!--[if lt IE 8]><style type="text/css"> .bookshelf-container .bookend,.otherprojects-icon{zoom:1;display:inline} diff --git a/tests/lint.js b/tests/lint.js new file mode 100644 index 0000000..5ee6b69 --- /dev/null +++ b/tests/lint.js @@ -0,0 +1,15 @@ +var gulp = require( 'gulp' ), + jshint = require( 'gulp-jshint' ), + jscs = require( 'gulp-jscs' ); + +gulp.task( 'lint', function () { + var devFolder = 'dev/**/*.js'; + + gulp.src( [ '*.js', devFolder ] ) + .pipe( jshint( '.jshintrc' ) ) + .pipe( jshint.reporter( 'default' ) ) + .pipe( jscs() ) + .pipe( jscs.reporter() ); +} ); + +gulp.start( 'lint' ); -- To view, visit https://gerrit.wikimedia.org/r/268842 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iacfddfc2feaea527b08a04aa3c8e13833d2d900f Gerrit-PatchSet: 1 Gerrit-Project: wikimedia/portals Gerrit-Branch: master Gerrit-Owner: JGirault <jgira...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits