commit 8c18e98906e429f038f0ed2af0fa3e6193dd1b35 Author: Nicolò P Date: Mon Aug 28 12:55:24 2023 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..32f539a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.zip +SVG_* +etichetta.png \ No newline at end of file diff --git a/css/qrihs.css b/css/qrihs.css new file mode 100644 index 0000000..9d5804b --- /dev/null +++ b/css/qrihs.css @@ -0,0 +1,26 @@ +h1 { + margin-top: 3rem; +} +canvas { + margin: 0 auto; +} +input[type="text"] { + width: 100%; + border-top: none; + border-left: none; + border-right: none; +} +input[type="text"], +button { + margin-bottom: 1.5rem; +} +footer { + margin-top: 3rem; +} +.main { + margin-top: 4rem; + margin-bottom: 4rem; + width: 65vw; + margin-left: auto; + margin-right: auto; +} \ No newline at end of file diff --git a/css/spectre-icons.css b/css/spectre-icons.css new file mode 100644 index 0000000..fd881f1 --- /dev/null +++ b/css/spectre-icons.css @@ -0,0 +1,597 @@ +/*! Spectre.css Icons v0.5.9 | MIT License | github.com/picturepan2/spectre */ +.icon { + box-sizing: border-box; + display: inline-block; + font-size: inherit; + font-style: normal; + height: 1em; + position: relative; + text-indent: -9999px; + vertical-align: middle; + width: 1em; +} + +.icon::before, +.icon::after { + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} + +.icon.icon-2x { + font-size: 1.6rem; +} + +.icon.icon-3x { + font-size: 2.4rem; +} + +.icon.icon-4x { + font-size: 3.2rem; +} + +.accordion .icon, +.btn .icon, +.toast .icon, +.menu .icon { + vertical-align: -10%; +} + +.btn-lg .icon { + vertical-align: -15%; +} + +.icon-arrow-down::before, +.icon-arrow-left::before, +.icon-arrow-right::before, +.icon-arrow-up::before, +.icon-downward::before, +.icon-back::before, +.icon-forward::before, +.icon-upward::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .65em; + width: .65em; +} + +.icon-arrow-down::before { + transform: translate(-50%, -75%) rotate(225deg); +} + +.icon-arrow-left::before { + transform: translate(-25%, -50%) rotate(-45deg); +} + +.icon-arrow-right::before { + transform: translate(-75%, -50%) rotate(135deg); +} + +.icon-arrow-up::before { + transform: translate(-50%, -25%) rotate(45deg); +} + +.icon-back::after, +.icon-forward::after { + background: currentColor; + height: .1rem; + width: .8em; +} + +.icon-downward::after, +.icon-upward::after { + background: currentColor; + height: .8em; + width: .1rem; +} + +.icon-back::after { + left: 55%; +} + +.icon-back::before { + transform: translate(-50%, -50%) rotate(-45deg); +} + +.icon-downward::after { + top: 45%; +} + +.icon-downward::before { + transform: translate(-50%, -50%) rotate(-135deg); +} + +.icon-forward::after { + left: 45%; +} + +.icon-forward::before { + transform: translate(-50%, -50%) rotate(135deg); +} + +.icon-upward::after { + top: 55%; +} + +.icon-upward::before { + transform: translate(-50%, -50%) rotate(45deg); +} + +.icon-caret::before { + border-left: .3em solid transparent; + border-right: .3em solid transparent; + border-top: .3em solid currentColor; + height: 0; + transform: translate(-50%, -25%); + width: 0; +} + +.icon-menu::before { + background: currentColor; + box-shadow: 0 -.35em, 0 .35em; + height: .1rem; + width: 100%; +} + +.icon-apps::before { + background: currentColor; + box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; + height: 3px; + width: 3px; +} + +.icon-resize-horiz::before, +.icon-resize-horiz::after, +.icon-resize-vert::before, +.icon-resize-vert::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .45em; + width: .45em; +} + +.icon-resize-horiz::before, +.icon-resize-vert::before { + transform: translate(-50%, -90%) rotate(45deg); +} + +.icon-resize-horiz::after, +.icon-resize-vert::after { + transform: translate(-50%, -10%) rotate(225deg); +} + +.icon-resize-horiz::before { + transform: translate(-90%, -50%) rotate(-45deg); +} + +.icon-resize-horiz::after { + transform: translate(-10%, -50%) rotate(135deg); +} + +.icon-more-horiz::before, +.icon-more-vert::before { + background: currentColor; + border-radius: 50%; + box-shadow: -.4em 0, .4em 0; + height: 3px; + width: 3px; +} + +.icon-more-vert::before { + box-shadow: 0 -.4em, 0 .4em; +} + +.icon-plus::before, +.icon-minus::before, +.icon-cross::before { + background: currentColor; + height: .1rem; + width: 100%; +} + +.icon-plus::after, +.icon-cross::after { + background: currentColor; + height: 100%; + width: .1rem; +} + +.icon-cross::before { + width: 100%; +} + +.icon-cross::after { + height: 100%; +} + +.icon-cross::before, +.icon-cross::after { + transform: translate(-50%, -50%) rotate(45deg); +} + +.icon-check::before { + border: .1rem solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + transform: translate(-50%, -75%) rotate(-45deg); + width: .9em; +} + +.icon-stop { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-stop::before { + background: currentColor; + height: .1rem; + transform: translate(-50%, -50%) rotate(45deg); + width: 1em; +} + +.icon-shutdown { + border: .1rem solid currentColor; + border-radius: 50%; + border-top-color: transparent; +} + +.icon-shutdown::before { + background: currentColor; + content: ""; + height: .5em; + top: .1em; + width: .1rem; +} + +.icon-refresh::before { + border: .1rem solid currentColor; + border-radius: 50%; + border-right-color: transparent; + height: 1em; + width: 1em; +} + +.icon-refresh::after { + border: .2em solid currentColor; + border-left-color: transparent; + border-top-color: transparent; + height: 0; + left: 80%; + top: 20%; + width: 0; +} + +.icon-search::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .75em; + left: 5%; + top: 5%; + transform: translate(0, 0) rotate(45deg); + width: .75em; +} + +.icon-search::after { + background: currentColor; + height: .1rem; + left: 80%; + top: 80%; + transform: translate(-50%, -50%) rotate(45deg); + width: .4em; +} + +.icon-edit::before { + border: .1rem solid currentColor; + height: .4em; + transform: translate(-40%, -60%) rotate(-45deg); + width: .85em; +} + +.icon-edit::after { + border: .15em solid currentColor; + border-right-color: transparent; + border-top-color: transparent; + height: 0; + left: 5%; + top: 95%; + transform: translate(0, -100%); + width: 0; +} + +.icon-delete::before { + border: .1rem solid currentColor; + border-bottom-left-radius: .1rem; + border-bottom-right-radius: .1rem; + border-top: 0; + height: .75em; + top: 60%; + width: .75em; +} + +.icon-delete::after { + background: currentColor; + box-shadow: -.25em .2em, .25em .2em; + height: .1rem; + top: .05rem; + width: .5em; +} + +.icon-share { + border: .1rem solid currentColor; + border-radius: .1rem; + border-right: 0; + border-top: 0; +} + +.icon-share::before { + border: .1rem solid currentColor; + border-left: 0; + border-top: 0; + height: .4em; + left: 100%; + top: .25em; + transform: translate(-125%, -50%) rotate(-45deg); + width: .4em; +} + +.icon-share::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: 75% 0; + border-right: 0; + height: .5em; + width: .6em; +} + +.icon-flag::before { + background: currentColor; + height: 1em; + left: 15%; + width: .1rem; +} + +.icon-flag::after { + border: .1rem solid currentColor; + border-bottom-right-radius: .1rem; + border-left: 0; + border-top-right-radius: .1rem; + height: .65em; + left: 60%; + top: 35%; + width: .8em; +} + +.icon-bookmark::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-top-left-radius: .1rem; + border-top-right-radius: .1rem; + height: .9em; + width: .8em; +} + +.icon-bookmark::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-left: 0; + border-radius: .1rem; + height: .5em; + transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); + width: .5em; +} + +.icon-download, +.icon-upload { + border-bottom: .1rem solid currentColor; +} + +.icon-download::before, +.icon-upload::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .5em; + transform: translate(-50%, -60%) rotate(-135deg); + width: .5em; +} + +.icon-download::after, +.icon-upload::after { + background: currentColor; + height: .6em; + top: 40%; + width: .1rem; +} + +.icon-upload::before { + transform: translate(-50%, -60%) rotate(45deg); +} + +.icon-upload::after { + top: 50%; +} + +.icon-copy::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: .1rem; + border-right: 0; + height: .8em; + left: 40%; + top: 35%; + width: .8em; +} + +.icon-copy::after { + border: .1rem solid currentColor; + border-radius: .1rem; + height: .8em; + left: 60%; + top: 60%; + width: .8em; +} + +.icon-time { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-time::before { + background: currentColor; + height: .4em; + transform: translate(-50%, -75%); + width: .1rem; +} + +.icon-time::after { + background: currentColor; + height: .3em; + transform: translate(-50%, -75%) rotate(90deg); + transform-origin: 50% 90%; + width: .1rem; +} + +.icon-mail::before { + border: .1rem solid currentColor; + border-radius: .1rem; + height: .8em; + width: 1em; +} + +.icon-mail::after { + border: .1rem solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); + width: .5em; +} + +.icon-people::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .45em; + top: 25%; + width: .45em; +} + +.icon-people::after { + border: .1rem solid currentColor; + border-radius: 50% 50% 0 0; + height: .4em; + top: 75%; + width: .9em; +} + +.icon-message { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: .1rem; + border-right: 0; +} + +.icon-message::before { + border: .1rem solid currentColor; + border-bottom-right-radius: .1rem; + border-left: 0; + border-top: 0; + height: .8em; + left: 65%; + top: 40%; + width: .7em; +} + +.icon-message::after { + background: currentColor; + border-radius: .1rem; + height: .3em; + left: 10%; + top: 100%; + transform: translate(0, -90%) rotate(45deg); + width: .1rem; +} + +.icon-photo { + border: .1rem solid currentColor; + border-radius: .1rem; +} + +.icon-photo::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .25em; + left: 35%; + top: 35%; + width: .25em; +} + +.icon-photo::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-left: 0; + height: .5em; + left: 60%; + transform: translate(-50%, 25%) rotate(-45deg); + width: .5em; +} + +.icon-link::before, +.icon-link::after { + border: .1rem solid currentColor; + border-radius: 5em 0 0 5em; + border-right: 0; + height: .5em; + width: .75em; +} + +.icon-link::before { + transform: translate(-70%, -45%) rotate(-45deg); +} + +.icon-link::after { + transform: translate(-30%, -55%) rotate(135deg); +} + +.icon-location::before { + border: .1rem solid currentColor; + border-radius: 50% 50% 50% 0; + height: .8em; + transform: translate(-50%, -60%) rotate(-45deg); + width: .8em; +} + +.icon-location::after { + border: .1rem solid currentColor; + border-radius: 50%; + height: .2em; + transform: translate(-50%, -80%); + width: .2em; +} + +.icon-emoji { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-emoji::before { + border-radius: 50%; + box-shadow: -.17em -.1em, .17em -.1em; + height: .15em; + width: .15em; +} + +.icon-emoji::after { + border: .1rem solid currentColor; + border-bottom-color: transparent; + border-radius: 50%; + border-right-color: transparent; + height: .5em; + transform: translate(-50%, -40%) rotate(-135deg); + width: .5em; +} \ No newline at end of file diff --git a/css/spectre.css b/css/spectre.css new file mode 100644 index 0000000..1499dcc --- /dev/null +++ b/css/spectre.css @@ -0,0 +1,3760 @@ +/*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */ +/* Manually forked from Normalize.css */ +/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ +/** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ +/* Document ========================================================================== */ +html { + font-family: sans-serif; /* 1 */ + -webkit-text-size-adjust: 100%; /* 3 */ + -ms-text-size-adjust: 100%; /* 3 */ +} + +/* Sections ========================================================================== */ +/** Remove the margin in all browsers (opinionated). */ +body { + margin: 0; +} + +/** Add the correct display in IE 9-. */ +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ +h1 { + font-size: 2em; + margin: .67em 0; +} + +/* Grouping content ========================================================================== */ +/** Add the correct display in IE 9-. 1. Add the correct display in IE. */ +figcaption, +figure, +main { + /* 1 */ display: block; +} + +/** Add the correct margin in IE 8 (removed). */ +/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ +/* Text-level semantics ========================================================================== */ +/** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ +a:active, +a:hover { + outline-width: 0; +} + +/** Modify default styling of address. */ +address { + font-style: normal; +} + +/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ +/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ +b, +strong { + font-weight: inherit; +} + +/** Add the correct font weight in Chrome, Edge, and Safari. */ +b, +strong { + font-weight: bolder; +} + +/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ +code, +kbd, +pre, +samp { + font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ + font-size: 1em; /* 2 */ +} + +/** Add the correct font style in Android 4.3-. */ +dfn { + font-style: italic; +} + +/** Add the correct background and color in IE 9-. (Removed) */ +/** Add the correct font size in all browsers. */ +small { + font-size: 80%; + font-weight: 400; /* (added) */ +} + +/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +/* Embedded content ========================================================================== */ +/** Add the correct display in IE 9-. */ +audio, +video { + display: inline-block; +} + +/** Add the correct display in iOS 4-7. */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** Remove the border on images inside links in IE 10-. */ +img { + border-style: none; +} + +/** Hide the overflow in IE. */ +svg:not(:root) { + overflow: hidden; +} + +/* Forms ========================================================================== */ +/** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 (changed) */ + font-size: inherit; /* 1 (changed) */ + line-height: inherit; /* 1 (changed) */ + margin: 0; /* 2 */ +} + +/** Show the overflow in IE. 1. Show the overflow in Edge. */ +button, +input { + /* 1 */ overflow: visible; +} + +/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ +button, +select { + /* 1 */ text-transform: none; +} + +/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** Remove the inner border and padding in Firefox. */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** Restore the focus styles unset by the previous rule (removed). */ +/** Change the border, margin, and padding in all browsers (opinionated) (changed). */ +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** Remove the default vertical scrollbar in IE. */ +textarea { + overflow: auto; +} + +/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** Correct the cursor style of increment and decrement buttons in Chrome. */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive ========================================================================== */ +/* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ +details, +menu { + display: block; +} + +/* Add the correct display in all browsers. */ +summary { + display: list-item; + outline: none; +} + +/* Scripting ========================================================================== */ +/** Add the correct display in IE 9-. */ +canvas { + display: inline-block; +} + +/** Add the correct display in IE. */ +template { + display: none; +} + +/* Hidden ========================================================================== */ +/** Add the correct display in IE 10-. */ +[hidden] { + display: none; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: 20px; + line-height: 1.5; + -webkit-tap-highlight-color: transparent; +} + +body { + background: #fff; + color: #3b4351; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; + font-size: .8rem; + overflow-x: hidden; + text-rendering: optimizeLegibility; +} + +a { + color: #5755d9; + outline: none; + text-decoration: none; +} + +a:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +a:focus, +a:hover, +a:active, +a.active { + color: #302ecd; + text-decoration: underline; +} + +a:visited { + color: #807fe2; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: inherit; + font-weight: 500; + line-height: 1.2; + margin-bottom: .5em; + margin-top: 0; +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 500; +} + +h1, +.h1 { + font-size: 2rem; +} + +h2, +.h2 { + font-size: 1.6rem; +} + +h3, +.h3 { + font-size: 1.4rem; +} + +h4, +.h4 { + font-size: 1.2rem; +} + +h5, +.h5 { + font-size: 1rem; +} + +h6, +.h6 { + font-size: .8rem; +} + +p { + margin: 0 0 1.2rem; +} + +a, +ins, +u { + -webkit-text-decoration-skip: ink edges; + text-decoration-skip: ink edges; +} + +abbr[title] { + border-bottom: .05rem dotted; + cursor: help; + text-decoration: none; +} + +kbd { + background: #303742; + border-radius: .1rem; + color: #fff; + font-size: .7rem; + line-height: 1.25; + padding: .1rem .2rem; +} + +mark { + background: #ffe9b3; + border-bottom: .05rem solid #ffd367; + border-radius: .1rem; + color: #3b4351; + padding: .05rem .1rem 0; +} + +blockquote { + border-left: .1rem solid #dadee4; + margin-left: 0; + padding: .4rem .8rem; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +ul, +ol { + margin: .8rem 0 .8rem .8rem; + padding: 0; +} + +ul ul, +ul ol, +ol ul, +ol ol { + margin: .8rem 0 .8rem .8rem; +} + +ul li, +ol li { + margin-top: .4rem; +} + +ul { + list-style: disc inside; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal inside; +} + +ol ol { + list-style-type: lower-alpha; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin: .4rem 0 .8rem 0; +} + +html:lang(zh), +html:lang(zh-Hans), +.lang-zh, +.lang-zh-hans { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; +} + +html:lang(zh-Hant), +.lang-zh-hant { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; +} + +html:lang(ja), +.lang-ja { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; +} + +html:lang(ko), +.lang-ko { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; +} + +:lang(zh) ins, +:lang(zh) u, +:lang(ja) ins, +:lang(ja) u, +.lang-cjk ins, +.lang-cjk u { + border-bottom: .05rem solid; + text-decoration: none; +} + +:lang(zh) del + del, +:lang(zh) del + s, +:lang(zh) ins + ins, +:lang(zh) ins + u, +:lang(zh) s + del, +:lang(zh) s + s, +:lang(zh) u + ins, +:lang(zh) u + u, +:lang(ja) del + del, +:lang(ja) del + s, +:lang(ja) ins + ins, +:lang(ja) ins + u, +:lang(ja) s + del, +:lang(ja) s + s, +:lang(ja) u + ins, +:lang(ja) u + u, +.lang-cjk del + del, +.lang-cjk del + s, +.lang-cjk ins + ins, +.lang-cjk ins + u, +.lang-cjk s + del, +.lang-cjk s + s, +.lang-cjk u + ins, +.lang-cjk u + u { + margin-left: .125em; +} + +.table { + border-collapse: collapse; + border-spacing: 0; + text-align: left; + width: 100%; +} + +.table.table-striped tbody tr:nth-of-type(odd) { + background: #f7f8f9; +} + +.table tbody tr.active, +.table.table-striped tbody tr.active { + background: #eef0f3; +} + +.table.table-hover tbody tr:hover { + background: #eef0f3; +} + +.table.table-scroll { + display: block; + overflow-x: auto; + padding-bottom: .75rem; + white-space: nowrap; +} + +.table td, +.table th { + border-bottom: .05rem solid #dadee4; + padding: .6rem .4rem; +} + +.table th { + border-bottom-width: .1rem; +} + +.btn { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + border: .05rem solid #5755d9; + border-radius: .1rem; + color: #5755d9; + cursor: pointer; + display: inline-block; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + outline: none; + padding: .25rem .4rem; + text-align: center; + text-decoration: none; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + white-space: nowrap; +} + +.btn:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.btn:focus, +.btn:hover { + background: #f1f1fc; + border-color: #4b48d6; + text-decoration: none; +} + +.btn:active, +.btn.active { + background: #4b48d6; + border-color: #3634d2; + color: #fff; + text-decoration: none; +} + +.btn:active.loading::after, +.btn.active.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn[disabled], +.btn:disabled, +.btn.disabled { + cursor: default; + opacity: .5; + pointer-events: none; +} + +.btn.btn-primary { + background: #5755d9; + border-color: #4b48d6; + color: #fff; +} + +.btn.btn-primary:focus, +.btn.btn-primary:hover { + background: #4240d4; + border-color: #3634d2; + color: #fff; +} + +.btn.btn-primary:active, +.btn.btn-primary.active { + background: #3a38d2; + border-color: #302ecd; + color: #fff; +} + +.btn.btn-primary.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-success { + background: #32b643; + border-color: #2faa3f; + color: #fff; +} + +.btn.btn-success:focus { + box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); +} + +.btn.btn-success:focus, +.btn.btn-success:hover { + background: #30ae40; + border-color: #2da23c; + color: #fff; +} + +.btn.btn-success:active, +.btn.btn-success.active { + background: #2a9a39; + border-color: #278e34; + color: #fff; +} + +.btn.btn-success.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-error { + background: #e85600; + border-color: #d95000; + color: #fff; +} + +.btn.btn-error:focus { + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.btn.btn-error:focus, +.btn.btn-error:hover { + background: #de5200; + border-color: #cf4d00; + color: #fff; +} + +.btn.btn-error:active, +.btn.btn-error.active { + background: #c44900; + border-color: #b54300; + color: #fff; +} + +.btn.btn-error.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-link { + background: transparent; + border-color: transparent; + color: #5755d9; +} + +.btn.btn-link:focus, +.btn.btn-link:hover, +.btn.btn-link:active, +.btn.btn-link.active { + color: #302ecd; +} + +.btn.btn-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem .3rem; +} + +.btn.btn-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem .6rem; +} + +.btn.btn-block { + display: block; + width: 100%; +} + +.btn.btn-action { + padding-left: 0; + padding-right: 0; + width: 1.8rem; +} + +.btn.btn-action.btn-sm { + width: 1.4rem; +} + +.btn.btn-action.btn-lg { + width: 2rem; +} + +.btn.btn-clear { + background: transparent; + border: 0; + color: currentColor; + height: 1rem; + line-height: .8rem; + margin-left: .2rem; + margin-right: -2px; + opacity: 1; + padding: .1rem; + text-decoration: none; + width: 1rem; +} + +.btn.btn-clear:focus, +.btn.btn-clear:hover { + background: rgba(247, 248, 249, .5); + opacity: .95; +} + +.btn.btn-clear::before { + content: "\2715"; +} + +.btn-group { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.btn-group .btn { + -ms-flex: 1 0 auto; + flex: 1 0 auto; +} + +.btn-group .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group .btn:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -.05rem; +} + +.btn-group .btn:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -.05rem; +} + +.btn-group .btn:focus, +.btn-group .btn:hover, +.btn-group .btn:active, +.btn-group .btn.active { + z-index: 1; +} + +.btn-group.btn-group-block { + display: -ms-flexbox; + display: flex; +} + +.btn-group.btn-group-block .btn { + -ms-flex: 1 0 0; + flex: 1 0 0; +} + +.form-group:not(:last-child) { + margin-bottom: .4rem; +} + +fieldset { + margin-bottom: .8rem; +} + +legend { + font-size: .9rem; + font-weight: 500; + margin-bottom: .8rem; +} + +.form-label { + display: block; + line-height: 1.2rem; + padding: .3rem 0; +} + +.form-label.label-sm { + font-size: .7rem; + padding: .1rem 0; +} + +.form-label.label-lg { + font-size: .9rem; + padding: .4rem 0; +} + +.form-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + background-image: none; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + color: #3b4351; + display: block; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + max-width: 100%; + outline: none; + padding: .25rem .4rem; + position: relative; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + width: 100%; +} + +.form-input:focus { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-input:-ms-input-placeholder { + color: #bcc3ce; +} + +.form-input::-ms-input-placeholder { + color: #bcc3ce; +} + +.form-input::placeholder { + color: #bcc3ce; +} + +.form-input.input-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem .3rem; +} + +.form-input.input-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem .6rem; +} + +.form-input.input-inline { + display: inline-block; + vertical-align: middle; + width: auto; +} + +.form-input[type="file"] { + height: auto; +} + +textarea.form-input, +textarea.form-input.input-lg, +textarea.form-input.input-sm { + height: auto; +} + +.form-input-hint { + color: #bcc3ce; + font-size: .7rem; + margin-top: .2rem; +} + +.has-success .form-input-hint, +.is-success + .form-input-hint { + color: #32b643; +} + +.has-error .form-input-hint, +.is-error + .form-input-hint { + color: #e85600; +} + +.form-select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + color: inherit; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + outline: none; + padding: .25rem .4rem; + vertical-align: middle; + width: 100%; +} + +.form-select:focus { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-select::-ms-expand { + display: none; +} + +.form-select.select-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem 1.1rem .05rem .3rem; +} + +.form-select.select-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem 1.4rem .35rem .6rem; +} + +.form-select[size], +.form-select[multiple] { + height: auto; + padding: .25rem .4rem; +} + +.form-select[size] option, +.form-select[multiple] option { + padding: .1rem .2rem; +} + +.form-select:not([multiple]):not([size]) { + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem; + padding-right: 1.2rem; +} + +.has-icon-left, +.has-icon-right { + position: relative; +} + +.has-icon-left .form-icon, +.has-icon-right .form-icon { + height: .8rem; + margin: 0 .25rem; + position: absolute; + top: 50%; + transform: translateY(-50%); + width: .8rem; + z-index: 2; +} + +.has-icon-left .form-icon { + left: .05rem; +} + +.has-icon-left .form-input { + padding-left: 1.3rem; +} + +.has-icon-right .form-icon { + right: .05rem; +} + +.has-icon-right .form-input { + padding-right: 1.3rem; +} + +.form-checkbox, +.form-radio, +.form-switch { + display: block; + line-height: 1.2rem; + margin: .2rem 0; + min-height: 1.4rem; + padding: .1rem .4rem .1rem 1.2rem; + position: relative; +} + +.form-checkbox input, +.form-radio input, +.form-switch input { + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + position: absolute; + width: 1px; +} + +.form-checkbox input:focus + .form-icon, +.form-radio input:focus + .form-icon, +.form-switch input:focus + .form-icon { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-checkbox input:checked + .form-icon, +.form-radio input:checked + .form-icon, +.form-switch input:checked + .form-icon { + background: #5755d9; + border-color: #5755d9; +} + +.form-checkbox .form-icon, +.form-radio .form-icon, +.form-switch .form-icon { + border: .05rem solid #bcc3ce; + cursor: pointer; + display: inline-block; + position: absolute; + transition: background .2s, border .2s, box-shadow .2s, color .2s; +} + +.form-checkbox.input-sm, +.form-radio.input-sm, +.form-switch.input-sm { + font-size: .7rem; + margin: 0; +} + +.form-checkbox.input-lg, +.form-radio.input-lg, +.form-switch.input-lg { + font-size: .9rem; + margin: .3rem 0; +} + +.form-checkbox .form-icon, +.form-radio .form-icon { + background: #fff; + height: .8rem; + left: 0; + top: .3rem; + width: .8rem; +} + +.form-checkbox input:active + .form-icon, +.form-radio input:active + .form-icon { + background: #eef0f3; +} + +.form-checkbox .form-icon { + border-radius: .1rem; +} + +.form-checkbox input:checked + .form-icon::before { + background-clip: padding-box; + border: .1rem solid #fff; + border-left-width: 0; + border-top-width: 0; + content: ""; + height: 9px; + left: 50%; + margin-left: -3px; + margin-top: -6px; + position: absolute; + top: 50%; + transform: rotate(45deg); + width: 6px; +} + +.form-checkbox input:indeterminate + .form-icon { + background: #5755d9; + border-color: #5755d9; +} + +.form-checkbox input:indeterminate + .form-icon::before { + background: #fff; + content: ""; + height: 2px; + left: 50%; + margin-left: -5px; + margin-top: -1px; + position: absolute; + top: 50%; + width: 10px; +} + +.form-radio .form-icon { + border-radius: 50%; +} + +.form-radio input:checked + .form-icon::before { + background: #fff; + border-radius: 50%; + content: ""; + height: 6px; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 6px; +} + +.form-switch { + padding-left: 2rem; +} + +.form-switch .form-icon { + background: #bcc3ce; + background-clip: padding-box; + border-radius: .45rem; + height: .9rem; + left: 0; + top: .25rem; + width: 1.6rem; +} + +.form-switch .form-icon::before { + background: #fff; + border-radius: 50%; + content: ""; + display: block; + height: .8rem; + left: 0; + position: absolute; + top: 0; + transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; + width: .8rem; +} + +.form-switch input:checked + .form-icon::before { + left: 14px; +} + +.form-switch input:active + .form-icon::before { + background: #f7f8f9; +} + +.input-group { + display: -ms-flexbox; + display: flex; +} + +.input-group .input-group-addon { + background: #f7f8f9; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + line-height: 1.2rem; + padding: .25rem .4rem; + white-space: nowrap; +} + +.input-group .input-group-addon.addon-sm { + font-size: .7rem; + padding: .05rem .3rem; +} + +.input-group .input-group-addon.addon-lg { + font-size: .9rem; + padding: .35rem .6rem; +} + +.input-group .form-input, +.input-group .form-select { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; +} + +.input-group .input-group-btn { + z-index: 1; +} + +.input-group .form-input:first-child:not(:last-child), +.input-group .form-select:first-child:not(:last-child), +.input-group .input-group-addon:first-child:not(:last-child), +.input-group .input-group-btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.input-group .form-input:not(:first-child):not(:last-child), +.input-group .form-select:not(:first-child):not(:last-child), +.input-group .input-group-addon:not(:first-child):not(:last-child), +.input-group .input-group-btn:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -.05rem; +} + +.input-group .form-input:last-child:not(:first-child), +.input-group .form-select:last-child:not(:first-child), +.input-group .input-group-addon:last-child:not(:first-child), +.input-group .input-group-btn:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -.05rem; +} + +.input-group .form-input:focus, +.input-group .form-select:focus, +.input-group .input-group-addon:focus, +.input-group .input-group-btn:focus { + z-index: 2; +} + +.input-group .form-select { + width: auto; +} + +.input-group.input-inline { + display: -ms-inline-flexbox; + display: inline-flex; +} + +.has-success .form-input, +.form-input.is-success, +.has-success .form-select, +.form-select.is-success { + background: #f9fdfa; + border-color: #32b643; +} + +.has-success .form-input:focus, +.form-input.is-success:focus, +.has-success .form-select:focus, +.form-select.is-success:focus { + box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); +} + +.has-error .form-input, +.form-input.is-error, +.has-error .form-select, +.form-select.is-error { + background: #fffaf7; + border-color: #e85600; +} + +.has-error .form-input:focus, +.form-input.is-error:focus, +.has-error .form-select:focus, +.form-select.is-error:focus { + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.has-error .form-checkbox .form-icon, +.form-checkbox.is-error .form-icon, +.has-error .form-radio .form-icon, +.form-radio.is-error .form-icon, +.has-error .form-switch .form-icon, +.form-switch.is-error .form-icon { + border-color: #e85600; +} + +.has-error .form-checkbox input:checked + .form-icon, +.form-checkbox.is-error input:checked + .form-icon, +.has-error .form-radio input:checked + .form-icon, +.form-radio.is-error input:checked + .form-icon, +.has-error .form-switch input:checked + .form-icon, +.form-switch.is-error input:checked + .form-icon { + background: #e85600; + border-color: #e85600; +} + +.has-error .form-checkbox input:focus + .form-icon, +.form-checkbox.is-error input:focus + .form-icon, +.has-error .form-radio input:focus + .form-icon, +.form-radio.is-error input:focus + .form-icon, +.has-error .form-switch input:focus + .form-icon, +.form-switch.is-error input:focus + .form-icon { + border-color: #e85600; + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.has-error .form-checkbox input:indeterminate + .form-icon, +.form-checkbox.is-error input:indeterminate + .form-icon { + background: #e85600; + border-color: #e85600; +} + +.form-input:not(:-ms-input-placeholder):invalid { + border-color: #e85600; +} + +.form-input:not(:placeholder-shown):invalid { + border-color: #e85600; +} + +.form-input:not(:-ms-input-placeholder):invalid:focus { + background: #fffaf7; + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.form-input:not(:placeholder-shown):invalid:focus { + background: #fffaf7; + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.form-input:not(:-ms-input-placeholder):invalid + .form-input-hint { + color: #e85600; +} + +.form-input:not(:placeholder-shown):invalid + .form-input-hint { + color: #e85600; +} + +.form-input:disabled, +.form-input.disabled, +.form-select:disabled, +.form-select.disabled { + background-color: #eef0f3; + cursor: not-allowed; + opacity: .5; +} + +.form-input[readonly] { + background-color: #f7f8f9; +} + +input:disabled + .form-icon, +input.disabled + .form-icon { + background: #eef0f3; + cursor: not-allowed; + opacity: .5; +} + +.form-switch input:disabled + .form-icon::before, +.form-switch input.disabled + .form-icon::before { + background: #fff; +} + +.form-horizontal { + padding: .4rem 0; +} + +.form-horizontal .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.form-inline { + display: inline-block; +} + +.label { + background: #eef0f3; + border-radius: .1rem; + color: #455060; + display: inline-block; + line-height: 1.25; + padding: .1rem .2rem; +} + +.label.label-rounded { + border-radius: 5rem; + padding-left: .4rem; + padding-right: .4rem; +} + +.label.label-primary { + background: #5755d9; + color: #fff; +} + +.label.label-secondary { + background: #f1f1fc; + color: #5755d9; +} + +.label.label-success { + background: #32b643; + color: #fff; +} + +.label.label-warning { + background: #ffb700; + color: #fff; +} + +.label.label-error { + background: #e85600; + color: #fff; +} + +code { + background: #fcf2f2; + border-radius: .1rem; + color: #d73e48; + font-size: 85%; + line-height: 1.25; + padding: .1rem .2rem; +} + +.code { + border-radius: .1rem; + color: #3b4351; + position: relative; +} + +.code::before { + color: #bcc3ce; + content: attr(data-lang); + font-size: .7rem; + position: absolute; + right: .4rem; + top: .1rem; +} + +.code code { + background: #f7f8f9; + color: inherit; + display: block; + line-height: 1.5; + overflow-x: auto; + padding: 1rem; + width: 100%; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-fit-cover { + object-fit: cover; +} + +.img-fit-contain { + object-fit: contain; +} + +.video-responsive { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} + +.video-responsive::before { + content: ""; + display: block; + padding-bottom: 56.25%; +} + +.video-responsive iframe, +.video-responsive object, +.video-responsive embed { + border: 0; + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; +} + +video.video-responsive { + height: auto; + max-width: 100%; +} + +video.video-responsive::before { + content: none; +} + +.video-responsive-4-3::before { + padding-bottom: 75%; +} + +.video-responsive-1-1::before { + padding-bottom: 100%; +} + +.figure { + margin: 0 0 .4rem 0; +} + +.figure .figure-caption { + color: #66758c; + margin-top: .4rem; +} + +.container { + margin-left: auto; + margin-right: auto; + padding-left: .4rem; + padding-right: .4rem; + width: 100%; +} + +.container.grid-xl { + max-width: 1296px; +} + +.container.grid-lg { + max-width: 976px; +} + +.container.grid-md { + max-width: 856px; +} + +.container.grid-sm { + max-width: 616px; +} + +.container.grid-xs { + max-width: 496px; +} + +.show-xs, +.show-sm, +.show-md, +.show-lg, +.show-xl { + display: none !important; +} + +.cols, +.columns { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-left: -.4rem; + margin-right: -.4rem; +} + +.cols.col-gapless, +.columns.col-gapless { + margin-left: 0; + margin-right: 0; +} + +.cols.col-gapless > .column, +.columns.col-gapless > .column { + padding-left: 0; + padding-right: 0; +} + +.cols.col-oneline, +.columns.col-oneline { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + overflow-x: auto; +} + +[class~="col-"], +.column { + -ms-flex: 1; + flex: 1; + max-width: 100%; + padding-left: .4rem; + padding-right: .4rem; +} + +[class~="col-"].col-12, +[class~="col-"].col-11, +[class~="col-"].col-10, +[class~="col-"].col-9, +[class~="col-"].col-8, +[class~="col-"].col-7, +[class~="col-"].col-6, +[class~="col-"].col-5, +[class~="col-"].col-4, +[class~="col-"].col-3, +[class~="col-"].col-2, +[class~="col-"].col-1, +[class~="col-"].col-auto, +.column.col-12, +.column.col-11, +.column.col-10, +.column.col-9, +.column.col-8, +.column.col-7, +.column.col-6, +.column.col-5, +.column.col-4, +.column.col-3, +.column.col-2, +.column.col-1, +.column.col-auto { + -ms-flex: none; + flex: none; +} + +.col-12 { + width: 100%; +} + +.col-11 { + width: 91.66666667%; +} + +.col-10 { + width: 83.33333333%; +} + +.col-9 { + width: 75%; +} + +.col-8 { + width: 66.66666667%; +} + +.col-7 { + width: 58.33333333%; +} + +.col-6 { + width: 50%; +} + +.col-5 { + width: 41.66666667%; +} + +.col-4 { + width: 33.33333333%; +} + +.col-3 { + width: 25%; +} + +.col-2 { + width: 16.66666667%; +} + +.col-1 { + width: 8.33333333%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + max-width: none; + width: auto; +} + +.col-mx-auto { + margin-left: auto; + margin-right: auto; +} + +.col-ml-auto { + margin-left: auto; +} + +.col-mr-auto { + margin-right: auto; +} + +@media (max-width: 1280px) { + .col-xl-12, + .col-xl-11, + .col-xl-10, + .col-xl-9, + .col-xl-8, + .col-xl-7, + .col-xl-6, + .col-xl-5, + .col-xl-4, + .col-xl-3, + .col-xl-2, + .col-xl-1, + .col-xl-auto { + -ms-flex: none; + flex: none; + } + .col-xl-12 { + width: 100%; + } + .col-xl-11 { + width: 91.66666667%; + } + .col-xl-10 { + width: 83.33333333%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-8 { + width: 66.66666667%; + } + .col-xl-7 { + width: 58.33333333%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-5 { + width: 41.66666667%; + } + .col-xl-4 { + width: 33.33333333%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-2 { + width: 16.66666667%; + } + .col-xl-1 { + width: 8.33333333%; + } + .col-xl-auto { + width: auto; + } + .hide-xl { + display: none !important; + } + .show-xl { + display: block !important; + } +} + +@media (max-width: 960px) { + .col-lg-12, + .col-lg-11, + .col-lg-10, + .col-lg-9, + .col-lg-8, + .col-lg-7, + .col-lg-6, + .col-lg-5, + .col-lg-4, + .col-lg-3, + .col-lg-2, + .col-lg-1, + .col-lg-auto { + -ms-flex: none; + flex: none; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-auto { + width: auto; + } + .hide-lg { + display: none !important; + } + .show-lg { + display: block !important; + } +} + +@media (max-width: 840px) { + .col-md-12, + .col-md-11, + .col-md-10, + .col-md-9, + .col-md-8, + .col-md-7, + .col-md-6, + .col-md-5, + .col-md-4, + .col-md-3, + .col-md-2, + .col-md-1, + .col-md-auto { + -ms-flex: none; + flex: none; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-auto { + width: auto; + } + .hide-md { + display: none !important; + } + .show-md { + display: block !important; + } +} + +@media (max-width: 600px) { + .col-sm-12, + .col-sm-11, + .col-sm-10, + .col-sm-9, + .col-sm-8, + .col-sm-7, + .col-sm-6, + .col-sm-5, + .col-sm-4, + .col-sm-3, + .col-sm-2, + .col-sm-1, + .col-sm-auto { + -ms-flex: none; + flex: none; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-auto { + width: auto; + } + .hide-sm { + display: none !important; + } + .show-sm { + display: block !important; + } +} + +@media (max-width: 480px) { + .col-xs-12, + .col-xs-11, + .col-xs-10, + .col-xs-9, + .col-xs-8, + .col-xs-7, + .col-xs-6, + .col-xs-5, + .col-xs-4, + .col-xs-3, + .col-xs-2, + .col-xs-1, + .col-xs-auto { + -ms-flex: none; + flex: none; + } + .col-xs-12 { + width: 100%; + } + .col-xs-11 { + width: 91.66666667%; + } + .col-xs-10 { + width: 83.33333333%; + } + .col-xs-9 { + width: 75%; + } + .col-xs-8 { + width: 66.66666667%; + } + .col-xs-7 { + width: 58.33333333%; + } + .col-xs-6 { + width: 50%; + } + .col-xs-5 { + width: 41.66666667%; + } + .col-xs-4 { + width: 33.33333333%; + } + .col-xs-3 { + width: 25%; + } + .col-xs-2 { + width: 16.66666667%; + } + .col-xs-1 { + width: 8.33333333%; + } + .col-xs-auto { + width: auto; + } + .hide-xs { + display: none !important; + } + .show-xs { + display: block !important; + } +} + +.hero { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: justify; + justify-content: space-between; + padding-bottom: 4rem; + padding-top: 4rem; +} + +.hero.hero-sm { + padding-bottom: 2rem; + padding-top: 2rem; +} + +.hero.hero-lg { + padding-bottom: 8rem; + padding-top: 8rem; +} + +.hero .hero-body { + padding: .4rem; +} + +.navbar { + align-items: stretch; + display: -ms-flexbox; + display: flex; + -ms-flex-align: stretch; + -ms-flex-pack: justify; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + justify-content: space-between; +} + +.navbar .navbar-section { + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0; + flex: 1 0 0; + -ms-flex-align: center; +} + +.navbar .navbar-section:not(:first-child):last-child { + -ms-flex-pack: end; + justify-content: flex-end; +} + +.navbar .navbar-center { + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-align: center; +} + +.navbar .navbar-brand { + font-size: .9rem; + text-decoration: none; +} + +.accordion input:checked ~ .accordion-header > .icon:first-child, +.accordion[open] .accordion-header > .icon:first-child { + transform: rotate(90deg); +} + +.accordion input:checked ~ .accordion-body, +.accordion[open] .accordion-body { + max-height: 50rem; +} + +.accordion .accordion-header { + display: block; + padding: .2rem .4rem; +} + +.accordion .accordion-header .icon { + transition: transform .25s; +} + +.accordion .accordion-body { + margin-bottom: .4rem; + max-height: 0; + overflow: hidden; + transition: max-height .25s; +} + +summary.accordion-header::-webkit-details-marker { + display: none; +} + +.avatar { + background: #5755d9; + border-radius: 50%; + color: rgba(255, 255, 255, .85); + display: inline-block; + font-size: .8rem; + font-weight: 300; + height: 1.6rem; + line-height: 1.25; + margin: 0; + position: relative; + vertical-align: middle; + width: 1.6rem; +} + +.avatar.avatar-xs { + font-size: .4rem; + height: .8rem; + width: .8rem; +} + +.avatar.avatar-sm { + font-size: .6rem; + height: 1.2rem; + width: 1.2rem; +} + +.avatar.avatar-lg { + font-size: 1.2rem; + height: 2.4rem; + width: 2.4rem; +} + +.avatar.avatar-xl { + font-size: 1.6rem; + height: 3.2rem; + width: 3.2rem; +} + +.avatar img { + border-radius: 50%; + height: 100%; + position: relative; + width: 100%; + z-index: 1; +} + +.avatar .avatar-icon, +.avatar .avatar-presence { + background: #fff; + bottom: 14.64%; + height: 50%; + padding: .1rem; + position: absolute; + right: 14.64%; + transform: translate(50%, 50%); + width: 50%; + z-index: 2; +} + +.avatar .avatar-presence { + background: #bcc3ce; + border-radius: 50%; + box-shadow: 0 0 0 .1rem #fff; + height: .5em; + width: .5em; +} + +.avatar .avatar-presence.online { + background: #32b643; +} + +.avatar .avatar-presence.busy { + background: #e85600; +} + +.avatar .avatar-presence.away { + background: #ffb700; +} + +.avatar[data-initial]::before { + color: currentColor; + content: attr(data-initial); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + z-index: 1; +} + +.badge { + position: relative; + white-space: nowrap; +} + +.badge[data-badge]::after, +.badge:not([data-badge])::after { + background: #5755d9; + background-clip: padding-box; + border-radius: .5rem; + box-shadow: 0 0 0 .1rem #fff; + color: #fff; + content: attr(data-badge); + display: inline-block; + transform: translate(-.05rem, -.5rem); +} + +.badge[data-badge]::after { + font-size: .7rem; + height: .9rem; + line-height: 1; + min-width: .9rem; + padding: .1rem .2rem; + text-align: center; + white-space: nowrap; +} + +.badge:not([data-badge])::after, +.badge[data-badge=""]::after { + height: 6px; + min-width: 6px; + padding: 0; + width: 6px; +} + +.badge.btn::after { + position: absolute; + right: 0; + top: 0; + transform: translate(50%, -50%); +} + +.badge.avatar::after { + position: absolute; + right: 14.64%; + top: 14.64%; + transform: translate(50%, -50%); + z-index: 100; +} + +.breadcrumb { + list-style: none; + margin: .2rem 0; + padding: .2rem 0; +} + +.breadcrumb .breadcrumb-item { + color: #66758c; + display: inline-block; + margin: 0; + padding: .2rem 0; +} + +.breadcrumb .breadcrumb-item:not(:last-child) { + margin-right: .2rem; +} + +.breadcrumb .breadcrumb-item:not(:last-child) a { + color: #66758c; +} + +.breadcrumb .breadcrumb-item:not(:first-child)::before { + color: #66758c; + content: "/"; + padding-right: .4rem; +} + +.bar { + background: #eef0f3; + border-radius: .1rem; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + height: .8rem; + width: 100%; +} + +.bar.bar-sm { + height: .2rem; +} + +.bar .bar-item { + background: #5755d9; + color: #fff; + display: block; + -ms-flex-negative: 0; + flex-shrink: 0; + font-size: .7rem; + height: 100%; + line-height: .8rem; + position: relative; + text-align: center; + width: 0; +} + +.bar .bar-item:first-child { + border-bottom-left-radius: .1rem; + border-top-left-radius: .1rem; +} + +.bar .bar-item:last-child { + border-bottom-right-radius: .1rem; + border-top-right-radius: .1rem; + -ms-flex-negative: 1; + flex-shrink: 1; +} + +.bar-slider { + height: .1rem; + margin: .4rem 0; + position: relative; +} + +.bar-slider .bar-item { + left: 0; + padding: 0; + position: absolute; +} + +.bar-slider .bar-item:not(:last-child):first-child { + background: #eef0f3; + z-index: 1; +} + +.bar-slider .bar-slider-btn { + background: #5755d9; + border: 0; + border-radius: 50%; + height: .6rem; + padding: 0; + position: absolute; + right: 0; + top: 50%; + transform: translate(50%, -50%); + width: .6rem; +} + +.bar-slider .bar-slider-btn:active { + box-shadow: 0 0 0 .1rem #5755d9; +} + +.card { + background: #fff; + border: .05rem solid #dadee4; + border-radius: .1rem; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card .card-header, +.card .card-body, +.card .card-footer { + padding: .8rem; + padding-bottom: 0; +} + +.card .card-header:last-child, +.card .card-body:last-child, +.card .card-footer:last-child { + padding-bottom: .8rem; +} + +.card .card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.card .card-image { + padding-top: .8rem; +} + +.card .card-image:first-child { + padding-top: 0; +} + +.card .card-image:first-child img { + border-top-left-radius: .1rem; + border-top-right-radius: .1rem; +} + +.card .card-image:last-child img { + border-bottom-left-radius: .1rem; + border-bottom-right-radius: .1rem; +} + +.chip { + align-items: center; + background: #eef0f3; + border-radius: 5rem; + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + font-size: 90%; + height: 1.2rem; + line-height: .8rem; + margin: .1rem; + max-width: 320px; + overflow: hidden; + padding: .2rem .4rem; + text-decoration: none; + text-overflow: ellipsis; + vertical-align: middle; + white-space: nowrap; +} + +.chip.active { + background: #5755d9; + color: #fff; +} + +.chip .avatar { + margin-left: -.4rem; + margin-right: .2rem; +} + +.chip .btn-clear { + border-radius: 50%; + transform: scale(.75); +} + +.dropdown { + display: inline-block; + position: relative; +} + +.dropdown .menu { + animation: slide-down .15s ease 1; + display: none; + left: 0; + max-height: 50vh; + overflow-y: auto; + position: absolute; + top: 100%; +} + +.dropdown.dropdown-right .menu { + left: auto; + right: 0; +} + +.dropdown.active .menu, +.dropdown .dropdown-toggle:focus + .menu, +.dropdown .menu:hover { + display: block; +} + +.dropdown .btn-group .dropdown-toggle:nth-last-child(2) { + border-bottom-right-radius: .1rem; + border-top-right-radius: .1rem; +} + +.empty { + background: #f7f8f9; + border-radius: .1rem; + color: #66758c; + padding: 3.2rem 1.6rem; + text-align: center; +} + +.empty .empty-icon { + margin-bottom: .8rem; +} + +.empty .empty-title, +.empty .empty-subtitle { + margin: .4rem auto; +} + +.empty .empty-action { + margin-top: .8rem; +} + +.menu { + background: #fff; + border-radius: .1rem; + box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); + list-style: none; + margin: 0; + min-width: 180px; + padding: .4rem; + transform: translateY(.2rem); + z-index: 300; +} + +.menu.menu-nav { + background: transparent; + box-shadow: none; +} + +.menu .menu-item { + margin-top: 0; + padding: 0 .4rem; + position: relative; + text-decoration: none; +} + +.menu .menu-item > a { + border-radius: .1rem; + color: inherit; + display: block; + margin: 0 -.4rem; + padding: .2rem .4rem; + text-decoration: none; +} + +.menu .menu-item > a:focus, +.menu .menu-item > a:hover { + background: #f1f1fc; + color: #5755d9; +} + +.menu .menu-item > a:active, +.menu .menu-item > a.active { + background: #f1f1fc; + color: #5755d9; +} + +.menu .menu-item .form-checkbox, +.menu .menu-item .form-radio, +.menu .menu-item .form-switch { + margin: .1rem 0; +} + +.menu .menu-item + .menu-item { + margin-top: .2rem; +} + +.menu .menu-badge { + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + height: 100%; + position: absolute; + right: 0; + top: 0; +} + +.menu .menu-badge .label { + margin-right: .4rem; +} + +.modal { + align-items: center; + bottom: 0; + display: none; + -ms-flex-align: center; + -ms-flex-pack: center; + justify-content: center; + left: 0; + opacity: 0; + overflow: hidden; + padding: .4rem; + position: fixed; + right: 0; + top: 0; +} + +.modal:target, +.modal.active { + display: -ms-flexbox; + display: flex; + opacity: 1; + z-index: 400; +} + +.modal:target .modal-overlay, +.modal.active .modal-overlay { + background: rgba(247, 248, 249, .75); + bottom: 0; + cursor: default; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.modal:target .modal-container, +.modal.active .modal-container { + animation: slide-down .2s ease 1; + z-index: 1; +} + +.modal.modal-sm .modal-container { + max-width: 320px; + padding: 0 .4rem; +} + +.modal.modal-lg .modal-overlay { + background: #fff; +} + +.modal.modal-lg .modal-container { + box-shadow: none; + max-width: 960px; +} + +.modal-container { + background: #fff; + border-radius: .1rem; + box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + max-height: 75vh; + max-width: 640px; + padding: 0 .8rem; + width: 100%; +} + +.modal-container.modal-fullheight { + max-height: 100vh; +} + +.modal-container .modal-header { + color: #303742; + padding: .8rem; +} + +.modal-container .modal-body { + overflow-y: auto; + padding: .8rem; + position: relative; +} + +.modal-container .modal-footer { + padding: .8rem; + text-align: right; +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + list-style: none; + margin: .2rem 0; +} + +.nav .nav-item a { + color: #66758c; + padding: .2rem .4rem; + text-decoration: none; +} + +.nav .nav-item a:focus, +.nav .nav-item a:hover { + color: #5755d9; +} + +.nav .nav-item.active > a { + color: #505c6e; + font-weight: bold; +} + +.nav .nav-item.active > a:focus, +.nav .nav-item.active > a:hover { + color: #5755d9; +} + +.nav .nav { + margin-bottom: .4rem; + margin-left: .8rem; +} + +.pagination { + display: -ms-flexbox; + display: flex; + list-style: none; + margin: .2rem 0; + padding: .2rem 0; +} + +.pagination .page-item { + margin: .2rem .05rem; +} + +.pagination .page-item span { + display: inline-block; + padding: .2rem .2rem; +} + +.pagination .page-item a { + border-radius: .1rem; + display: inline-block; + padding: .2rem .4rem; + text-decoration: none; +} + +.pagination .page-item a:focus, +.pagination .page-item a:hover { + color: #5755d9; +} + +.pagination .page-item.disabled a { + cursor: default; + opacity: .5; + pointer-events: none; +} + +.pagination .page-item.active a { + background: #5755d9; + color: #fff; +} + +.pagination .page-item.page-prev, +.pagination .page-item.page-next { + -ms-flex: 1 0 50%; + flex: 1 0 50%; +} + +.pagination .page-item.page-next { + text-align: right; +} + +.pagination .page-item .page-item-title { + margin: 0; +} + +.pagination .page-item .page-item-subtitle { + margin: 0; + opacity: .5; +} + +.panel { + border: .05rem solid #dadee4; + border-radius: .1rem; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.panel .panel-header, +.panel .panel-footer { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + padding: .8rem; +} + +.panel .panel-nav { + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.panel .panel-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + overflow-y: auto; + padding: 0 .8rem; +} + +.popover { + display: inline-block; + position: relative; +} + +.popover .popover-container { + left: 50%; + opacity: 0; + padding: .4rem; + position: absolute; + top: 0; + transform: translate(-50%, -50%) scale(0); + transition: transform .2s; + width: 320px; + z-index: 300; +} + +.popover *:focus + .popover-container, +.popover:hover .popover-container { + display: block; + opacity: 1; + transform: translate(-50%, -100%) scale(1); +} + +.popover.popover-right .popover-container { + left: 100%; + top: 50%; +} + +.popover.popover-right *:focus + .popover-container, +.popover.popover-right:hover .popover-container { + transform: translate(0, -50%) scale(1); +} + +.popover.popover-bottom .popover-container { + left: 50%; + top: 100%; +} + +.popover.popover-bottom *:focus + .popover-container, +.popover.popover-bottom:hover .popover-container { + transform: translate(-50%, 0) scale(1); +} + +.popover.popover-left .popover-container { + left: 0; + top: 50%; +} + +.popover.popover-left *:focus + .popover-container, +.popover.popover-left:hover .popover-container { + transform: translate(-100%, -50%) scale(1); +} + +.popover .card { + border: 0; + box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); +} + +.step { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + list-style: none; + margin: .2rem 0; + width: 100%; +} + +.step .step-item { + -ms-flex: 1 1 0; + flex: 1 1 0; + margin-top: 0; + min-height: 1rem; + position: relative; + text-align: center; +} + +.step .step-item:not(:first-child)::before { + background: #5755d9; + content: ""; + height: 2px; + left: -50%; + position: absolute; + top: 9px; + width: 100%; +} + +.step .step-item a { + color: #5755d9; + display: inline-block; + padding: 20px 10px 0; + text-decoration: none; +} + +.step .step-item a::before { + background: #5755d9; + border: .1rem solid #fff; + border-radius: 50%; + content: ""; + display: block; + height: .6rem; + left: 50%; + position: absolute; + top: .2rem; + transform: translateX(-50%); + width: .6rem; + z-index: 1; +} + +.step .step-item.active a::before { + background: #fff; + border: .1rem solid #5755d9; +} + +.step .step-item.active ~ .step-item::before { + background: #dadee4; +} + +.step .step-item.active ~ .step-item a { + color: #bcc3ce; +} + +.step .step-item.active ~ .step-item a::before { + background: #dadee4; +} + +.tab { + align-items: center; + border-bottom: .05rem solid #dadee4; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + list-style: none; + margin: .2rem 0 .15rem 0; +} + +.tab .tab-item { + margin-top: 0; +} + +.tab .tab-item a { + border-bottom: .1rem solid transparent; + color: inherit; + display: block; + margin: 0 .4rem 0 0; + padding: .4rem .2rem .3rem .2rem; + text-decoration: none; +} + +.tab .tab-item a:focus, +.tab .tab-item a:hover { + color: #5755d9; +} + +.tab .tab-item.active a, +.tab .tab-item a.active { + border-bottom-color: #5755d9; + color: #5755d9; +} + +.tab .tab-item.tab-action { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + text-align: right; +} + +.tab .tab-item .btn-clear { + margin-top: -.2rem; +} + +.tab.tab-block .tab-item { + -ms-flex: 1 0 0; + flex: 1 0 0; + text-align: center; +} + +.tab.tab-block .tab-item a { + margin: 0; +} + +.tab.tab-block .tab-item .badge[data-badge]::after { + position: absolute; + right: .1rem; + top: .1rem; + transform: translate(0, 0); +} + +.tab:not(.tab-block) .badge { + padding-right: 0; +} + +.tile { + align-content: space-between; + align-items: flex-start; + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + -ms-flex-line-pack: justify; +} + +.tile .tile-icon, +.tile .tile-action { + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.tile .tile-content { + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.tile .tile-content:not(:first-child) { + padding-left: .4rem; +} + +.tile .tile-content:not(:last-child) { + padding-right: .4rem; +} + +.tile .tile-title, +.tile .tile-subtitle { + line-height: 1.2rem; +} + +.tile.tile-centered { + align-items: center; + -ms-flex-align: center; +} + +.tile.tile-centered .tile-content { + overflow: hidden; +} + +.tile.tile-centered .tile-title, +.tile.tile-centered .tile-subtitle { + margin-bottom: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.toast { + background: rgba(48, 55, 66, .95); + border: .05rem solid #303742; + border-color: #303742; + border-radius: .1rem; + color: #fff; + display: block; + padding: .4rem; + width: 100%; +} + +.toast.toast-primary { + background: rgba(87, 85, 217, .95); + border-color: #5755d9; +} + +.toast.toast-success { + background: rgba(50, 182, 67, .95); + border-color: #32b643; +} + +.toast.toast-warning { + background: rgba(255, 183, 0, .95); + border-color: #ffb700; +} + +.toast.toast-error { + background: rgba(232, 86, 0, .95); + border-color: #e85600; +} + +.toast a { + color: #fff; + text-decoration: underline; +} + +.toast a:focus, +.toast a:hover, +.toast a:active, +.toast a.active { + opacity: .75; +} + +.toast .btn-clear { + margin: .1rem; +} + +.toast p:last-child { + margin-bottom: 0; +} + +.tooltip { + position: relative; +} + +.tooltip::after { + background: rgba(48, 55, 66, .95); + border-radius: .1rem; + bottom: 100%; + color: #fff; + content: attr(data-tooltip); + display: block; + font-size: .7rem; + left: 50%; + max-width: 320px; + opacity: 0; + overflow: hidden; + padding: .2rem .4rem; + pointer-events: none; + position: absolute; + text-overflow: ellipsis; + transform: translate(-50%, .4rem); + transition: opacity .2s, transform .2s; + white-space: pre; + z-index: 300; +} + +.tooltip:focus::after, +.tooltip:hover::after { + opacity: 1; + transform: translate(-50%, -.2rem); +} + +.tooltip[disabled], +.tooltip.disabled { + pointer-events: auto; +} + +.tooltip.tooltip-right::after { + bottom: 50%; + left: 100%; + transform: translate(-.2rem, 50%); +} + +.tooltip.tooltip-right:focus::after, +.tooltip.tooltip-right:hover::after { + transform: translate(.2rem, 50%); +} + +.tooltip.tooltip-bottom::after { + bottom: auto; + top: 100%; + transform: translate(-50%, -.4rem); +} + +.tooltip.tooltip-bottom:focus::after, +.tooltip.tooltip-bottom:hover::after { + transform: translate(-50%, .2rem); +} + +.tooltip.tooltip-left::after { + bottom: 50%; + left: auto; + right: 100%; + transform: translate(.4rem, 50%); +} + +.tooltip.tooltip-left:focus::after, +.tooltip.tooltip-left:hover::after { + transform: translate(-.2rem, 50%); +} + +@keyframes loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes slide-down { + 0% { + opacity: 0; + transform: translateY(-1.6rem); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.text-primary { + color: #5755d9 !important; +} + +a.text-primary:focus, +a.text-primary:hover { + color: #4240d4; +} + +a.text-primary:visited { + color: #6c6ade; +} + +.text-secondary { + color: #e5e5f9 !important; +} + +a.text-secondary:focus, +a.text-secondary:hover { + color: #d1d0f4; +} + +a.text-secondary:visited { + color: #fafafe; +} + +.text-gray { + color: #bcc3ce !important; +} + +a.text-gray:focus, +a.text-gray:hover { + color: #adb6c4; +} + +a.text-gray:visited { + color: #cbd0d9; +} + +.text-light { + color: #fff !important; +} + +a.text-light:focus, +a.text-light:hover { + color: #f2f2f2; +} + +a.text-light:visited { + color: white; +} + +.text-dark { + color: #3b4351 !important; +} + +a.text-dark:focus, +a.text-dark:hover { + color: #303742; +} + +a.text-dark:visited { + color: #455060; +} + +.text-success { + color: #32b643 !important; +} + +a.text-success:focus, +a.text-success:hover { + color: #2da23c; +} + +a.text-success:visited { + color: #39c94b; +} + +.text-warning { + color: #ffb700 !important; +} + +a.text-warning:focus, +a.text-warning:hover { + color: #e6a500; +} + +a.text-warning:visited { + color: #ffbe1a; +} + +.text-error { + color: #e85600 !important; +} + +a.text-error:focus, +a.text-error:hover { + color: #cf4d00; +} + +a.text-error:visited { + color: #ff6003; +} + +.bg-primary { + background: #5755d9 !important; + color: #fff; +} + +.bg-secondary { + background: #f1f1fc !important; +} + +.bg-dark { + background: #303742 !important; + color: #fff; +} + +.bg-gray { + background: #f7f8f9 !important; +} + +.bg-success { + background: #32b643 !important; + color: #fff; +} + +.bg-warning { + background: #ffb700 !important; + color: #fff; +} + +.bg-error { + background: #e85600 !important; + color: #fff; +} + +.c-hand { + cursor: pointer; +} + +.c-move { + cursor: move; +} + +.c-zoom-in { + cursor: zoom-in; +} + +.c-zoom-out { + cursor: zoom-out; +} + +.c-not-allowed { + cursor: not-allowed; +} + +.c-auto { + cursor: auto; +} + +.d-block { + display: block; +} + +.d-inline { + display: inline; +} + +.d-inline-block { + display: inline-block; +} + +.d-flex { + display: -ms-flexbox; + display: flex; +} + +.d-inline-flex { + display: -ms-inline-flexbox; + display: inline-flex; +} + +.d-none, +.d-hide { + display: none !important; +} + +.d-visible { + visibility: visible; +} + +.d-invisible { + visibility: hidden; +} + +.text-hide { + background: transparent; + border: 0; + color: transparent; + font-size: 0; + line-height: 0; + text-shadow: none; +} + +.text-assistive { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.divider, +.divider-vert { + display: block; + position: relative; +} + +.divider[data-content]::after, +.divider-vert[data-content]::after { + background: #fff; + color: #bcc3ce; + content: attr(data-content); + display: inline-block; + font-size: .7rem; + padding: 0 .4rem; + transform: translateY(-.65rem); +} + +.divider { + border-top: .05rem solid #f1f3f5; + height: .05rem; + margin: .4rem 0; +} + +.divider[data-content] { + margin: .8rem 0; +} + +.divider-vert { + display: block; + padding: .8rem; +} + +.divider-vert::before { + border-left: .05rem solid #dadee4; + bottom: .4rem; + content: ""; + display: block; + left: 50%; + position: absolute; + top: .4rem; + transform: translateX(-50%); +} + +.divider-vert[data-content]::after { + left: 50%; + padding: .2rem 0; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} + +.loading { + color: transparent !important; + min-height: .8rem; + pointer-events: none; + position: relative; +} + +.loading::after { + animation: loading 500ms infinite linear; + background: transparent; + border: .1rem solid #5755d9; + border-radius: 50%; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: .8rem; + left: 50%; + margin-left: -.4rem; + margin-top: -.4rem; + opacity: 1; + padding: 0; + position: absolute; + top: 50%; + width: .8rem; + z-index: 1; +} + +.loading.loading-lg { + min-height: 2rem; +} + +.loading.loading-lg::after { + height: 1.6rem; + margin-left: -.8rem; + margin-top: -.8rem; + width: 1.6rem; +} + +.clearfix::after { + clear: both; + content: ""; + display: table; +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.p-relative { + position: relative !important; +} + +.p-absolute { + position: absolute !important; +} + +.p-fixed { + position: fixed !important; +} + +.p-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.p-centered { + display: block; + float: none; + margin-left: auto; + margin-right: auto; +} + +.flex-centered { + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + -ms-flex-pack: center; + justify-content: center; +} + +.m-0 { + margin: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mx-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.my-0 { + margin-bottom: 0 !important; + margin-top: 0 !important; +} + +.m-1 { + margin: .2rem !important; +} + +.mb-1 { + margin-bottom: .2rem !important; +} + +.ml-1 { + margin-left: .2rem !important; +} + +.mr-1 { + margin-right: .2rem !important; +} + +.mt-1 { + margin-top: .2rem !important; +} + +.mx-1 { + margin-left: .2rem !important; + margin-right: .2rem !important; +} + +.my-1 { + margin-bottom: .2rem !important; + margin-top: .2rem !important; +} + +.m-2 { + margin: .4rem !important; +} + +.mb-2 { + margin-bottom: .4rem !important; +} + +.ml-2 { + margin-left: .4rem !important; +} + +.mr-2 { + margin-right: .4rem !important; +} + +.mt-2 { + margin-top: .4rem !important; +} + +.mx-2 { + margin-left: .4rem !important; + margin-right: .4rem !important; +} + +.my-2 { + margin-bottom: .4rem !important; + margin-top: .4rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pl-0 { + padding-left: 0 !important; +} + +.pr-0 { + padding-right: 0 !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.px-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.py-0 { + padding-bottom: 0 !important; + padding-top: 0 !important; +} + +.p-1 { + padding: .2rem !important; +} + +.pb-1 { + padding-bottom: .2rem !important; +} + +.pl-1 { + padding-left: .2rem !important; +} + +.pr-1 { + padding-right: .2rem !important; +} + +.pt-1 { + padding-top: .2rem !important; +} + +.px-1 { + padding-left: .2rem !important; + padding-right: .2rem !important; +} + +.py-1 { + padding-bottom: .2rem !important; + padding-top: .2rem !important; +} + +.p-2 { + padding: .4rem !important; +} + +.pb-2 { + padding-bottom: .4rem !important; +} + +.pl-2 { + padding-left: .4rem !important; +} + +.pr-2 { + padding-right: .4rem !important; +} + +.pt-2 { + padding-top: .4rem !important; +} + +.px-2 { + padding-left: .4rem !important; + padding-right: .4rem !important; +} + +.py-2 { + padding-bottom: .4rem !important; + padding-top: .4rem !important; +} + +.s-rounded { + border-radius: .1rem; +} + +.s-circle { + border-radius: 50%; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-normal { + font-weight: normal; +} + +.text-bold { + font-weight: bold; +} + +.text-italic { + font-style: italic; +} + +.text-large { + font-size: 1.2em; +} + +.text-small { + font-size: .9em; +} + +.text-tiny { + font-size: .8em; +} + +.text-muted { + opacity: .8; +} + +.text-ellipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-clip { + overflow: hidden; + text-overflow: clip; + white-space: nowrap; +} + +.text-break { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} \ No newline at end of file diff --git a/img/e-rihsit_logo.png b/img/e-rihsit_logo.png new file mode 100644 index 0000000..f0a325d Binary files /dev/null and b/img/e-rihsit_logo.png differ diff --git a/img/logo_ispc.png b/img/logo_ispc.png new file mode 100644 index 0000000..97891b5 Binary files /dev/null and b/img/logo_ispc.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..eb7720b --- /dev/null +++ b/index.html @@ -0,0 +1,44 @@ + + + + + + + + + Q-RIHS + + +

Q-RIHS

+ +

Tracciamento strumenti E-RIHS

+ +

Inserire link e ID strumento per generare l'etichetta con il QR Code

+ +
+
+
+ + + +
+ +
+
+ + Etichetta strumento + +

Anteprima

+
+
+
+ + + + \ No newline at end of file diff --git a/js/index.js b/js/index.js new file mode 100644 index 0000000..14fdc89 --- /dev/null +++ b/js/index.js @@ -0,0 +1,61 @@ +document.addEventListener('DOMContentLoaded', () => { + const download = document.querySelector('#download'); + + console.log('I\'m outside clickers'); + + document.querySelector('#gen').addEventListener('click', () => { + let link = document.querySelector('input[name="link"]').value; + let idInstr =document.querySelector('input[name="id-str"]').value; + + let canvas = document.querySelector('canvas'); + const ctx = canvas.getContext('2d'); + ctx.clearRect(0,0,canvas.width, canvas.height); + + ctx.fillStyle = "#333"; + + // Prepare img elements + const qrImg = new Image(); + const ispcLogo = new Image(); + const erihsLogo = new Image(); + + ispcLogo.src = "./img/logo_ispc.png"; + erihsLogo.src = "./img/e-rihsit_logo.png"; + + let qr = new QRious({element: qrImg}); + + qr.set({ + size: 200, + value: link + }) + + // Draw images + ispcLogo.onload = () => { + ctx.drawImage(ispcLogo, 25, 10, 200, 75) + } + + qrImg.src = qr.toDataURL(); + qrImg.onload = () => { + ctx.drawImage(qrImg, 25, 90, 200, 200) + } + // Draw instrument ID as text + ctx.font = '48px sans-serif'; + ctx.fillText(idInstr, 45, 330); + + erihsLogo.onload = () => { + ctx.drawImage(erihsLogo, 25, 355, 200, 41) + } + download.classList.remove('disabled'); + }); + + download.addEventListener('click', () => { + let downloadLink = document.createElement('a'); + downloadLink.setAttribute('download', 'etichetta.png'); + let canvas = document.querySelector('canvas'); + + canvas.toBlob(function(blob) { + let url = URL.createObjectURL(blob); + downloadLink.setAttribute('href', url); + downloadLink.click(); + }); + }); +}); \ No newline at end of file diff --git a/js/package.json b/js/package.json new file mode 100644 index 0000000..18a1e41 --- /dev/null +++ b/js/package.json @@ -0,0 +1,3 @@ +{ + "dependencies": {} +} diff --git a/js/qrious.min.js b/js/qrious.min.js new file mode 100644 index 0000000..5735ea6 --- /dev/null +++ b/js/qrious.min.js @@ -0,0 +1,6 @@ +/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License +Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License +*/ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=v.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A}); + +//# sourceMappingURL=qrious.min.js.map \ No newline at end of file diff --git a/js/qrious.min.js.map b/js/qrious.min.js.map new file mode 100644 index 0000000..ff65e0b --- /dev/null +++ b/js/qrious.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"qrious.min.js","sources":["../node_modules/nevis/src/extend.js","../node_modules/nevis/src/nevis.js","../node_modules/qrious-core/src/renderer/Renderer.js","../node_modules/qrious-core/src/renderer/CanvasRenderer.js","../node_modules/qrious-core/src/Alignment.js","../node_modules/qrious-core/src/ErrorCorrection.js","../node_modules/qrious-core/src/Galois.js","../node_modules/qrious-core/src/Version.js","../node_modules/qrious-core/src/Frame.js","../node_modules/qrious-core/src/renderer/ImageRenderer.js","../node_modules/qrious-core/src/option/Option.js","../node_modules/qrious-core/src/util/Utilities.js","../node_modules/qrious-core/src/option/OptionManager.js","../node_modules/qrious-core/src/service/ServiceManager.js","../node_modules/qrious-core/src/QRious.js","../node_modules/qrious-core/src/service/Service.js","../node_modules/qrious-core/src/service/element/ElementService.js","../src/service/element/BrowserElementService.js","../src/QRious.js"],"sourcesContent":["/*\n * Copyright (C) 2017 Alasdair Mercer, !ninja\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\n/**\n * A bare-bones constructor for surrogate prototype swapping.\n *\n * @private\n * @constructor\n */\nvar Constructor = /* istanbul ignore next */ function() {};\n/**\n * A reference to Object.prototype.hasOwnProperty.\n *\n * @private\n * @type {Function}\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * A reference to Array.prototype.slice.\n *\n * @private\n * @type {Function}\n */\nvar slice = Array.prototype.slice;\n\n/**\n * Creates an object which inherits the given prototype.\n *\n * Optionally, the created object can be extended further with the specified properties.\n *\n * @param {Object} prototype - the prototype to be inherited by the created object\n * @param {Object} [properties] - the optional properties to be extended by the created object\n * @return {Object} The newly created object.\n * @private\n */\nfunction createObject(prototype, properties) {\n var result;\n /* istanbul ignore next */\n if (typeof Object.create === 'function') {\n result = Object.create(prototype);\n } else {\n Constructor.prototype = prototype;\n result = new Constructor();\n Constructor.prototype = null;\n }\n\n if (properties) {\n extendObject(true, result, properties);\n }\n\n return result;\n}\n\n/**\n * Extends the constructor to which this method is associated with the prototype and/or\n * statics provided.\n *\n * If name is provided, it will be used as the class name and can be accessed via a special\n * class_ property on the child constructor, otherwise the class name of the super constructor will be used\n * instead. The class name may also be used string representation for instances of the child constructor (via\n * toString), but this is not applicable to the lite version of Nevis.\n *\n * If constructor is provided, it will be used as the constructor for the child, otherwise a simple\n * constructor which only calls the super constructor will be used instead.\n *\n * The super constructor can be accessed via a special super_ property on the child constructor.\n *\n * @param {string} [name=this.class_] - the class name to be used for the child constructor\n * @param {Function} [constructor] - the constructor for the child\n * @param {Object} [prototype] - the prototype properties to be defined for the child\n * @param {Object} [statics] - the static properties to be defined for the child\n * @return {Function} The child constructor provided or the one created if none was given.\n * @public\n */\nfunction extend(name, constructor, prototype, statics) {\n var superConstructor = this;\n\n if (typeof name !== 'string') {\n statics = prototype;\n prototype = constructor;\n constructor = name;\n name = null;\n }\n\n if (typeof constructor !== 'function') {\n statics = prototype;\n prototype = constructor;\n constructor = function() {\n return superConstructor.apply(this, arguments);\n };\n }\n\n extendObject(false, constructor, superConstructor, statics);\n\n constructor.prototype = createObject(superConstructor.prototype, prototype);\n constructor.prototype.constructor = constructor;\n\n constructor.class_ = name || superConstructor.class_;\n constructor.super_ = superConstructor;\n\n return constructor;\n}\n\n/**\n * Extends the specified target object with the properties in each of the sources provided.\n *\n * if any source is null it will be ignored.\n *\n * @param {boolean} own - true to only copy own properties from sources onto\n * target; otherwise false\n * @param {Object} target - the target object which should be extended\n * @param {...Object} [sources] - the source objects whose properties are to be copied onto target\n * @return {void}\n * @private\n */\nfunction extendObject(own, target, sources) {\n sources = slice.call(arguments, 2);\n\n var property;\n var source;\n\n for (var i = 0, length = sources.length; i < length; i++) {\n source = sources[i];\n\n for (property in source) {\n if (!own || hasOwnProperty.call(source, property)) {\n target[property] = source[property];\n }\n }\n }\n}\n\nmodule.exports = extend;\n","/*\n * Copyright (C) 2017 Alasdair Mercer, !ninja\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\nvar extend = require('./extend');\n\n/**\n * The base class from which all others should extend.\n *\n * @public\n * @constructor\n */\nfunction Nevis() {}\nNevis.class_ = 'Nevis';\nNevis.super_ = Object;\n\n/**\n * Extends the constructor to which this method is associated with the prototype and/or\n * statics provided.\n *\n * If name is provided, it will be used as the class name and can be accessed via a special\n * class_ property on the child constructor, otherwise the class name of the super constructor will be used\n * instead. The class name may also be used string representation for instances of the child constructor (via\n * toString), but this is not applicable to the lite version of Nevis.\n *\n * If constructor is provided, it will be used as the constructor for the child, otherwise a simple\n * constructor which only calls the super constructor will be used instead.\n *\n * The super constructor can be accessed via a special super_ property on the child constructor.\n *\n * @param {string} [name=this.class_] - the class name to be used for the child constructor\n * @param {Function} [constructor] - the constructor for the child\n * @param {Object} [prototype] - the prototype properties to be defined for the child\n * @param {Object} [statics] - the static properties to be defined for the child\n * @return {Function} The child constructor provided or the one created if none was given.\n * @public\n * @static\n * @memberof Nevis\n */\nNevis.extend = extend;\n\nmodule.exports = Nevis;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Responsible for rendering a QR code {@link Frame} on a specific type of element.\n *\n * A renderer may be dependant on the rendering of another element, so the ordering of their execution is important.\n *\n * The rendering of a element can be deferred by disabling the renderer initially, however, any attempt get the element\n * from the renderer will result in it being immediately enabled and the element being rendered.\n *\n * @param {QRious} qrious - the {@link QRious} instance to be used\n * @param {*} element - the element onto which the QR code is to be rendered\n * @param {boolean} [enabled] - true this {@link Renderer} is enabled; otherwise false.\n * @public\n * @class\n * @extends Nevis\n */\nvar Renderer = Nevis.extend(function(qrious, element, enabled) {\n /**\n * The {@link QRious} instance.\n *\n * @protected\n * @type {QRious}\n * @memberof Renderer#\n */\n this.qrious = qrious;\n\n /**\n * The element onto which this {@link Renderer} is rendering the QR code.\n *\n * @protected\n * @type {*}\n * @memberof Renderer#\n */\n this.element = element;\n this.element.qrious = qrious;\n\n /**\n * Whether this {@link Renderer} is enabled.\n *\n * @protected\n * @type {boolean}\n * @memberof Renderer#\n */\n this.enabled = Boolean(enabled);\n}, {\n\n /**\n * Draws the specified QR code frame on the underlying element.\n *\n * Implementations of {@link Renderer} must override this method with their own specific logic.\n *\n * @param {Frame} frame - the {@link Frame} to be drawn\n * @return {void}\n * @protected\n * @abstract\n * @memberof Renderer#\n */\n draw: function(frame) {},\n\n /**\n * Returns the element onto which this {@link Renderer} is rendering the QR code.\n *\n * If this method is called while this {@link Renderer} is disabled, it will be immediately enabled and rendered\n * before the element is returned.\n *\n * @return {*} The element.\n * @public\n * @memberof Renderer#\n */\n getElement: function() {\n if (!this.enabled) {\n this.enabled = true;\n this.render();\n }\n\n return this.element;\n },\n\n /**\n * Calculates the size (in pixel units) to represent an individual module within the QR code based on the\n * frame provided.\n *\n * Any configured padding will be excluded from the returned size.\n *\n * The returned value will be at least one, even in cases where the size of the QR code does not fit its contents.\n * This is done so that the inevitable clipping is handled more gracefully since this way at least something is\n * displayed instead of just a blank space filled by the background color.\n *\n * @param {Frame} frame - the {@link Frame} from which the module size is to be derived\n * @return {number} The pixel size for each module in the QR code which will be no less than one.\n * @protected\n * @memberof Renderer#\n */\n getModuleSize: function(frame) {\n var qrious = this.qrious;\n var padding = qrious.padding || 0;\n var pixels = Math.floor((qrious.size - (padding * 2)) / frame.width);\n\n return Math.max(1, pixels);\n },\n\n /**\n * Calculates the offset/padding (in pixel units) to be inserted before the QR code based on the frame\n * provided.\n *\n * The returned value will be zero if there is no available offset or if the size of the QR code does not fit its\n * contents. It will never be a negative value. This is done so that the inevitable clipping appears more naturally\n * and it is not clipped from all directions.\n *\n * @param {Frame} frame - the {@link Frame} from which the offset is to be derived\n * @return {number} The pixel offset for the QR code which will be no less than zero.\n * @protected\n * @memberof Renderer#\n */\n getOffset: function(frame) {\n var qrious = this.qrious;\n var padding = qrious.padding;\n\n if (padding != null) {\n return padding;\n }\n\n var moduleSize = this.getModuleSize(frame);\n var offset = Math.floor((qrious.size - (moduleSize * frame.width)) / 2);\n\n return Math.max(0, offset);\n },\n\n /**\n * Renders a QR code on the underlying element based on the frame provided.\n *\n * @param {Frame} frame - the {@link Frame} to be rendered\n * @return {void}\n * @public\n * @memberof Renderer#\n */\n render: function(frame) {\n if (this.enabled) {\n this.resize();\n this.reset();\n this.draw(frame);\n }\n },\n\n /**\n * Resets the underlying element, effectively clearing any previously rendered QR code.\n *\n * Implementations of {@link Renderer} must override this method with their own specific logic.\n *\n * @return {void}\n * @protected\n * @abstract\n * @memberof Renderer#\n */\n reset: function() {},\n\n /**\n * Ensures that the size of the underlying element matches that defined on the associated {@link QRious} instance.\n *\n * Implementations of {@link Renderer} must override this method with their own specific logic.\n *\n * @return {void}\n * @protected\n * @abstract\n * @memberof Renderer#\n */\n resize: function() {}\n\n});\n\nmodule.exports = Renderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Renderer = require('./Renderer');\n\n/**\n * An implementation of {@link Renderer} for working with canvas elements.\n *\n * @public\n * @class\n * @extends Renderer\n */\nvar CanvasRenderer = Renderer.extend({\n\n /**\n * @override\n */\n draw: function(frame) {\n var i, j;\n var qrious = this.qrious;\n var moduleSize = this.getModuleSize(frame);\n var offset = this.getOffset(frame);\n var context = this.element.getContext('2d');\n\n context.fillStyle = qrious.foreground;\n context.globalAlpha = qrious.foregroundAlpha;\n\n for (i = 0; i < frame.width; i++) {\n for (j = 0; j < frame.width; j++) {\n if (frame.buffer[(j * frame.width) + i]) {\n context.fillRect((moduleSize * i) + offset, (moduleSize * j) + offset, moduleSize, moduleSize);\n }\n }\n }\n },\n\n /**\n * @override\n */\n reset: function() {\n var qrious = this.qrious;\n var context = this.element.getContext('2d');\n var size = qrious.size;\n\n context.lineWidth = 1;\n context.clearRect(0, 0, size, size);\n context.fillStyle = qrious.background;\n context.globalAlpha = qrious.backgroundAlpha;\n context.fillRect(0, 0, size, size);\n },\n\n /**\n * @override\n */\n resize: function() {\n var element = this.element;\n\n element.width = element.height = this.qrious.size;\n }\n\n});\n\nmodule.exports = CanvasRenderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\n/* eslint no-multi-spaces: \"off\" */\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains alignment pattern information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Alignment = Nevis.extend(null, {\n\n /**\n * The alignment pattern block.\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof Alignment\n */\n BLOCK: [\n 0, 11, 15, 19, 23, 27, 31,\n 16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24,\n 26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28\n ]\n\n});\n\nmodule.exports = Alignment;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\n/* eslint no-multi-spaces: \"off\" */\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains error correction information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar ErrorCorrection = Nevis.extend(null, {\n\n /**\n * The error correction blocks.\n *\n * There are four elements per version. The first two indicate the number of blocks, then the data width, and finally\n * the ECC width.\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof ErrorCorrection\n */\n BLOCKS: [\n 1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17,\n 1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28,\n 1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22,\n 1, 0, 80, 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16,\n 1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22,\n 2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28,\n 2, 0, 78, 20, 4, 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26,\n 2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26,\n 2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24,\n 2, 2, 68, 18, 4, 1, 43, 26, 6, 2, 19, 24, 6, 2, 15, 28,\n 4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24,\n 2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28,\n 4, 0, 107, 26, 8, 1, 37, 22, 8, 4, 20, 24, 12, 4, 11, 22,\n 3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24,\n 5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24,\n 5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 19, 24, 3, 13, 15, 30,\n 1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28,\n 5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28,\n 3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 21, 26, 9, 16, 13, 26,\n 3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28,\n 4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30,\n 2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 24, 30, 34, 0, 13, 24,\n 4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30,\n 6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30,\n 8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 24, 30, 22, 13, 15, 30,\n 10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30,\n 8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30,\n 3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 24, 30, 11, 31, 15, 30,\n 7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30,\n 5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30,\n 13, 3, 115, 30, 2, 29, 46, 28, 42, 1, 24, 30, 23, 28, 15, 30,\n 17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30,\n 17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30,\n 13, 6, 115, 30, 14, 23, 46, 28, 44, 7, 24, 30, 59, 1, 16, 30,\n 12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30,\n 6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30,\n 17, 4, 122, 30, 29, 14, 46, 28, 49, 10, 24, 30, 24, 46, 15, 30,\n 4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30,\n 20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30,\n 19, 6, 118, 30, 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30\n ],\n\n /**\n * The final format bits with mask (level << 3 | mask).\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof ErrorCorrection\n */\n FINAL_FORMAT: [\n // L\n 0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976,\n // M\n 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0,\n // Q\n 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed,\n // H\n 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b\n ],\n\n /**\n * A map of human-readable ECC levels.\n *\n * @public\n * @static\n * @type {Object.}\n * @memberof ErrorCorrection\n */\n LEVELS: {\n L: 1,\n M: 2,\n Q: 3,\n H: 4\n }\n\n});\n\nmodule.exports = ErrorCorrection;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains Galois field information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Galois = Nevis.extend(null, {\n\n /**\n * The Galois field exponent table.\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof Galois\n */\n EXPONENT: [\n 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26,\n 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0,\n 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23,\n 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1,\n 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0,\n 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2,\n 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce,\n 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc,\n 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54,\n 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73,\n 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff,\n 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41,\n 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6,\n 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09,\n 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,\n 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00\n ],\n\n /**\n * The Galois field log table.\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof Galois\n */\n LOG: [\n 0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b,\n 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71,\n 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45,\n 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6,\n 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88,\n 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40,\n 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d,\n 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57,\n 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18,\n 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e,\n 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61,\n 0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2,\n 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6,\n 0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a,\n 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7,\n 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf\n ]\n\n});\n\nmodule.exports = Galois;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains version pattern information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Version = Nevis.extend(null, {\n\n /**\n * The version pattern block.\n *\n * @public\n * @static\n * @type {number[]}\n * @memberof Version\n */\n BLOCK: [\n 0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d, 0x928, 0xb78, 0x45d, 0xa17, 0x532,\n 0x9a6, 0x683, 0x8c9, 0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75, 0x250, 0x9d5,\n 0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64, 0x541, 0xc69\n ]\n\n});\n\nmodule.exports = Version;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar Alignment = require('./Alignment');\nvar ErrorCorrection = require('./ErrorCorrection');\nvar Galois = require('./Galois');\nvar Version = require('./Version');\n\n/**\n * Generates information for a QR code frame based on a specific value to be encoded.\n *\n * @param {Frame~Options} options - the options to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar Frame = Nevis.extend(function(options) {\n var dataBlock, eccBlock, index, neccBlock1, neccBlock2;\n var valueLength = options.value.length;\n\n this._badness = [];\n this._level = ErrorCorrection.LEVELS[options.level];\n this._polynomial = [];\n this._value = options.value;\n this._version = 0;\n this._stringBuffer = [];\n\n while (this._version < 40) {\n this._version++;\n\n index = ((this._level - 1) * 4) + ((this._version - 1) * 16);\n\n neccBlock1 = ErrorCorrection.BLOCKS[index++];\n neccBlock2 = ErrorCorrection.BLOCKS[index++];\n dataBlock = ErrorCorrection.BLOCKS[index++];\n eccBlock = ErrorCorrection.BLOCKS[index];\n\n index = (dataBlock * (neccBlock1 + neccBlock2)) + neccBlock2 - 3 + (this._version <= 9);\n\n if (valueLength <= index) {\n break;\n }\n }\n\n this._dataBlock = dataBlock;\n this._eccBlock = eccBlock;\n this._neccBlock1 = neccBlock1;\n this._neccBlock2 = neccBlock2;\n\n /**\n * The data width is based on version.\n *\n * @public\n * @type {number}\n * @memberof Frame#\n */\n // FIXME: Ensure that it fits instead of being truncated.\n var width = this.width = 17 + (4 * this._version);\n\n /**\n * The image buffer.\n *\n * @public\n * @type {number[]}\n * @memberof Frame#\n */\n this.buffer = Frame._createArray(width * width);\n\n this._ecc = Frame._createArray(dataBlock + ((dataBlock + eccBlock) * (neccBlock1 + neccBlock2)) + neccBlock2);\n this._mask = Frame._createArray(((width * (width + 1)) + 1) / 2);\n\n this._insertFinders();\n this._insertAlignments();\n\n // Insert single foreground cell.\n this.buffer[8 + (width * (width - 8))] = 1;\n\n this._insertTimingGap();\n this._reverseMask();\n this._insertTimingRowAndColumn();\n this._insertVersion();\n this._syncMask();\n this._convertBitStream(valueLength);\n this._calculatePolynomial();\n this._appendEccToData();\n this._interleaveBlocks();\n this._pack();\n this._finish();\n}, {\n\n _addAlignment: function(x, y) {\n var i;\n var buffer = this.buffer;\n var width = this.width;\n\n buffer[x + (width * y)] = 1;\n\n for (i = -2; i < 2; i++) {\n buffer[x + i + (width * (y - 2))] = 1;\n buffer[x - 2 + (width * (y + i + 1))] = 1;\n buffer[x + 2 + (width * (y + i))] = 1;\n buffer[x + i + 1 + (width * (y + 2))] = 1;\n }\n\n for (i = 0; i < 2; i++) {\n this._setMask(x - 1, y + i);\n this._setMask(x + 1, y - i);\n this._setMask(x - i, y - 1);\n this._setMask(x + i, y + 1);\n }\n },\n\n _appendData: function(data, dataLength, ecc, eccLength) {\n var bit, i, j;\n var polynomial = this._polynomial;\n var stringBuffer = this._stringBuffer;\n\n for (i = 0; i < eccLength; i++) {\n stringBuffer[ecc + i] = 0;\n }\n\n for (i = 0; i < dataLength; i++) {\n bit = Galois.LOG[stringBuffer[data + i] ^ stringBuffer[ecc]];\n\n if (bit !== 255) {\n for (j = 1; j < eccLength; j++) {\n stringBuffer[ecc + j - 1] = stringBuffer[ecc + j] ^\n Galois.EXPONENT[Frame._modN(bit + polynomial[eccLength - j])];\n }\n } else {\n for (j = ecc; j < ecc + eccLength; j++) {\n stringBuffer[j] = stringBuffer[j + 1];\n }\n }\n\n stringBuffer[ecc + eccLength - 1] = bit === 255 ? 0 : Galois.EXPONENT[Frame._modN(bit + polynomial[0])];\n }\n },\n\n _appendEccToData: function() {\n var i;\n var data = 0;\n var dataBlock = this._dataBlock;\n var ecc = this._calculateMaxLength();\n var eccBlock = this._eccBlock;\n\n for (i = 0; i < this._neccBlock1; i++) {\n this._appendData(data, dataBlock, ecc, eccBlock);\n\n data += dataBlock;\n ecc += eccBlock;\n }\n\n for (i = 0; i < this._neccBlock2; i++) {\n this._appendData(data, dataBlock + 1, ecc, eccBlock);\n\n data += dataBlock + 1;\n ecc += eccBlock;\n }\n },\n\n _applyMask: function(mask) {\n var r3x, r3y, x, y;\n var buffer = this.buffer;\n var width = this.width;\n\n switch (mask) {\n case 0:\n for (y = 0; y < width; y++) {\n for (x = 0; x < width; x++) {\n if (!((x + y) & 1) && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 1:\n for (y = 0; y < width; y++) {\n for (x = 0; x < width; x++) {\n if (!(y & 1) && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 2:\n for (y = 0; y < width; y++) {\n for (r3x = 0, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n }\n\n if (!r3x && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 3:\n for (r3y = 0, y = 0; y < width; y++, r3y++) {\n if (r3y === 3) {\n r3y = 0;\n }\n\n for (r3x = r3y, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n }\n\n if (!r3x && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 4:\n for (y = 0; y < width; y++) {\n for (r3x = 0, r3y = (y >> 1) & 1, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n r3y = !r3y;\n }\n\n if (!r3y && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 5:\n for (r3y = 0, y = 0; y < width; y++, r3y++) {\n if (r3y === 3) {\n r3y = 0;\n }\n\n for (r3x = 0, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n }\n\n if (!((x & y & 1) + !(!r3x | !r3y)) && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 6:\n for (r3y = 0, y = 0; y < width; y++, r3y++) {\n if (r3y === 3) {\n r3y = 0;\n }\n\n for (r3x = 0, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n }\n\n if (!((x & y & 1) + (r3x && r3x === r3y) & 1) && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n case 7:\n for (r3y = 0, y = 0; y < width; y++, r3y++) {\n if (r3y === 3) {\n r3y = 0;\n }\n\n for (r3x = 0, x = 0; x < width; x++, r3x++) {\n if (r3x === 3) {\n r3x = 0;\n }\n\n if (!((r3x && r3x === r3y) + (x + y & 1) & 1) && !this._isMasked(x, y)) {\n buffer[x + (y * width)] ^= 1;\n }\n }\n }\n\n break;\n }\n },\n\n _calculateMaxLength: function() {\n return (this._dataBlock * (this._neccBlock1 + this._neccBlock2)) + this._neccBlock2;\n },\n\n _calculatePolynomial: function() {\n var i, j;\n var eccBlock = this._eccBlock;\n var polynomial = this._polynomial;\n\n polynomial[0] = 1;\n\n for (i = 0; i < eccBlock; i++) {\n polynomial[i + 1] = 1;\n\n for (j = i; j > 0; j--) {\n polynomial[j] = polynomial[j] ? polynomial[j - 1] ^\n Galois.EXPONENT[Frame._modN(Galois.LOG[polynomial[j]] + i)] : polynomial[j - 1];\n }\n\n polynomial[0] = Galois.EXPONENT[Frame._modN(Galois.LOG[polynomial[0]] + i)];\n }\n\n // Use logs for generator polynomial to save calculation step.\n for (i = 0; i <= eccBlock; i++) {\n polynomial[i] = Galois.LOG[polynomial[i]];\n }\n },\n\n _checkBadness: function() {\n var b, b1, h, x, y;\n var bad = 0;\n var badness = this._badness;\n var buffer = this.buffer;\n var width = this.width;\n\n // Blocks of same colour.\n for (y = 0; y < width - 1; y++) {\n for (x = 0; x < width - 1; x++) {\n // All foreground colour.\n if ((buffer[x + (width * y)] &&\n buffer[x + 1 + (width * y)] &&\n buffer[x + (width * (y + 1))] &&\n buffer[x + 1 + (width * (y + 1))]) ||\n // All background colour.\n !(buffer[x + (width * y)] ||\n buffer[x + 1 + (width * y)] ||\n buffer[x + (width * (y + 1))] ||\n buffer[x + 1 + (width * (y + 1))])) {\n bad += Frame.N2;\n }\n }\n }\n\n var bw = 0;\n\n // X runs.\n for (y = 0; y < width; y++) {\n h = 0;\n\n badness[0] = 0;\n\n for (b = 0, x = 0; x < width; x++) {\n b1 = buffer[x + (width * y)];\n\n if (b === b1) {\n badness[h]++;\n } else {\n badness[++h] = 1;\n }\n\n b = b1;\n bw += b ? 1 : -1;\n }\n\n bad += this._getBadness(h);\n }\n\n if (bw < 0) {\n bw = -bw;\n }\n\n var count = 0;\n var big = bw;\n big += big << 2;\n big <<= 1;\n\n while (big > width * width) {\n big -= width * width;\n count++;\n }\n\n bad += count * Frame.N4;\n\n // Y runs.\n for (x = 0; x < width; x++) {\n h = 0;\n\n badness[0] = 0;\n\n for (b = 0, y = 0; y < width; y++) {\n b1 = buffer[x + (width * y)];\n\n if (b === b1) {\n badness[h]++;\n } else {\n badness[++h] = 1;\n }\n\n b = b1;\n }\n\n bad += this._getBadness(h);\n }\n\n return bad;\n },\n\n _convertBitStream: function(length) {\n var bit, i;\n var ecc = this._ecc;\n var version = this._version;\n\n // Convert string to bit stream. 8-bit data to QR-coded 8-bit data (numeric, alphanumeric, or kanji not supported).\n for (i = 0; i < length; i++) {\n ecc[i] = this._value.charCodeAt(i);\n }\n\n var stringBuffer = this._stringBuffer = ecc.slice();\n var maxLength = this._calculateMaxLength();\n\n if (length >= maxLength - 2) {\n length = maxLength - 2;\n\n if (version > 9) {\n length--;\n }\n }\n\n // Shift and re-pack to insert length prefix.\n var index = length;\n\n if (version > 9) {\n stringBuffer[index + 2] = 0;\n stringBuffer[index + 3] = 0;\n\n while (index--) {\n bit = stringBuffer[index];\n\n stringBuffer[index + 3] |= 255 & (bit << 4);\n stringBuffer[index + 2] = bit >> 4;\n }\n\n stringBuffer[2] |= 255 & (length << 4);\n stringBuffer[1] = length >> 4;\n stringBuffer[0] = 0x40 | (length >> 12);\n } else {\n stringBuffer[index + 1] = 0;\n stringBuffer[index + 2] = 0;\n\n while (index--) {\n bit = stringBuffer[index];\n\n stringBuffer[index + 2] |= 255 & (bit << 4);\n stringBuffer[index + 1] = bit >> 4;\n }\n\n stringBuffer[1] |= 255 & (length << 4);\n stringBuffer[0] = 0x40 | (length >> 4);\n }\n\n // Fill to end with pad pattern.\n index = length + 3 - (version < 10);\n\n while (index < maxLength) {\n stringBuffer[index++] = 0xec;\n stringBuffer[index++] = 0x11;\n }\n },\n\n _getBadness: function(length) {\n var i;\n var badRuns = 0;\n var badness = this._badness;\n\n for (i = 0; i <= length; i++) {\n if (badness[i] >= 5) {\n badRuns += Frame.N1 + badness[i] - 5;\n }\n }\n\n // FBFFFBF as in finder.\n for (i = 3; i < length - 1; i += 2) {\n if (badness[i - 2] === badness[i + 2] &&\n badness[i + 2] === badness[i - 1] &&\n badness[i - 1] === badness[i + 1] &&\n badness[i - 1] * 3 === badness[i] &&\n // Background around the foreground pattern? Not part of the specs.\n (badness[i - 3] === 0 || i + 3 > length ||\n badness[i - 3] * 3 >= badness[i] * 4 ||\n badness[i + 3] * 3 >= badness[i] * 4)) {\n badRuns += Frame.N3;\n }\n }\n\n return badRuns;\n },\n\n _finish: function() {\n // Save pre-mask copy of frame.\n this._stringBuffer = this.buffer.slice();\n\n var currentMask, i;\n var bit = 0;\n var mask = 30000;\n\n /*\n * Using for instead of while since in original Arduino code if an early mask was \"good enough\" it wouldn't try for\n * a better one since they get more complex and take longer.\n */\n for (i = 0; i < 8; i++) {\n // Returns foreground-background imbalance.\n this._applyMask(i);\n\n currentMask = this._checkBadness();\n\n // Is current mask better than previous best?\n if (currentMask < mask) {\n mask = currentMask;\n bit = i;\n }\n\n // Don't increment \"i\" to a void redoing mask.\n if (bit === 7) {\n break;\n }\n\n // Reset for next pass.\n this.buffer = this._stringBuffer.slice();\n }\n\n // Redo best mask as none were \"good enough\" (i.e. last wasn't bit).\n if (bit !== i) {\n this._applyMask(bit);\n }\n\n // Add in final mask/ECC level bytes.\n mask = ErrorCorrection.FINAL_FORMAT[bit + (this._level - 1 << 3)];\n\n var buffer = this.buffer;\n var width = this.width;\n\n // Low byte.\n for (i = 0; i < 8; i++, mask >>= 1) {\n if (mask & 1) {\n buffer[width - 1 - i + (width * 8)] = 1;\n\n if (i < 6) {\n buffer[8 + (width * i)] = 1;\n } else {\n buffer[8 + (width * (i + 1))] = 1;\n }\n }\n }\n\n // High byte.\n for (i = 0; i < 7; i++, mask >>= 1) {\n if (mask & 1) {\n buffer[8 + (width * (width - 7 + i))] = 1;\n\n if (i) {\n buffer[6 - i + (width * 8)] = 1;\n } else {\n buffer[7 + (width * 8)] = 1;\n }\n }\n }\n },\n\n _interleaveBlocks: function() {\n var i, j;\n var dataBlock = this._dataBlock;\n var ecc = this._ecc;\n var eccBlock = this._eccBlock;\n var k = 0;\n var maxLength = this._calculateMaxLength();\n var neccBlock1 = this._neccBlock1;\n var neccBlock2 = this._neccBlock2;\n var stringBuffer = this._stringBuffer;\n\n for (i = 0; i < dataBlock; i++) {\n for (j = 0; j < neccBlock1; j++) {\n ecc[k++] = stringBuffer[i + (j * dataBlock)];\n }\n\n for (j = 0; j < neccBlock2; j++) {\n ecc[k++] = stringBuffer[(neccBlock1 * dataBlock) + i + (j * (dataBlock + 1))];\n }\n }\n\n for (j = 0; j < neccBlock2; j++) {\n ecc[k++] = stringBuffer[(neccBlock1 * dataBlock) + i + (j * (dataBlock + 1))];\n }\n\n for (i = 0; i < eccBlock; i++) {\n for (j = 0; j < neccBlock1 + neccBlock2; j++) {\n ecc[k++] = stringBuffer[maxLength + i + (j * eccBlock)];\n }\n }\n\n this._stringBuffer = ecc;\n },\n\n _insertAlignments: function() {\n var i, x, y;\n var version = this._version;\n var width = this.width;\n\n if (version > 1) {\n i = Alignment.BLOCK[version];\n y = width - 7;\n\n for (;;) {\n x = width - 7;\n\n while (x > i - 3) {\n this._addAlignment(x, y);\n\n if (x < i) {\n break;\n }\n\n x -= i;\n }\n\n if (y <= i + 9) {\n break;\n }\n\n y -= i;\n\n this._addAlignment(6, y);\n this._addAlignment(y, 6);\n }\n }\n },\n\n _insertFinders: function() {\n var i, j, x, y;\n var buffer = this.buffer;\n var width = this.width;\n\n for (i = 0; i < 3; i++) {\n j = 0;\n y = 0;\n\n if (i === 1) {\n j = width - 7;\n }\n if (i === 2) {\n y = width - 7;\n }\n\n buffer[y + 3 + (width * (j + 3))] = 1;\n\n for (x = 0; x < 6; x++) {\n buffer[y + x + (width * j)] = 1;\n buffer[y + (width * (j + x + 1))] = 1;\n buffer[y + 6 + (width * (j + x))] = 1;\n buffer[y + x + 1 + (width * (j + 6))] = 1;\n }\n\n for (x = 1; x < 5; x++) {\n this._setMask(y + x, j + 1);\n this._setMask(y + 1, j + x + 1);\n this._setMask(y + 5, j + x);\n this._setMask(y + x + 1, j + 5);\n }\n\n for (x = 2; x < 4; x++) {\n buffer[y + x + (width * (j + 2))] = 1;\n buffer[y + 2 + (width * (j + x + 1))] = 1;\n buffer[y + 4 + (width * (j + x))] = 1;\n buffer[y + x + 1 + (width * (j + 4))] = 1;\n }\n }\n },\n\n _insertTimingGap: function() {\n var x, y;\n var width = this.width;\n\n for (y = 0; y < 7; y++) {\n this._setMask(7, y);\n this._setMask(width - 8, y);\n this._setMask(7, y + width - 7);\n }\n\n for (x = 0; x < 8; x++) {\n this._setMask(x, 7);\n this._setMask(x + width - 8, 7);\n this._setMask(x, width - 8);\n }\n },\n\n _insertTimingRowAndColumn: function() {\n var x;\n var buffer = this.buffer;\n var width = this.width;\n\n for (x = 0; x < width - 14; x++) {\n if (x & 1) {\n this._setMask(8 + x, 6);\n this._setMask(6, 8 + x);\n } else {\n buffer[8 + x + (width * 6)] = 1;\n buffer[6 + (width * (8 + x))] = 1;\n }\n }\n },\n\n _insertVersion: function() {\n var i, j, x, y;\n var buffer = this.buffer;\n var version = this._version;\n var width = this.width;\n\n if (version > 6) {\n i = Version.BLOCK[version - 7];\n j = 17;\n\n for (x = 0; x < 6; x++) {\n for (y = 0; y < 3; y++, j--) {\n if (1 & (j > 11 ? version >> j - 12 : i >> j)) {\n buffer[5 - x + (width * (2 - y + width - 11))] = 1;\n buffer[2 - y + width - 11 + (width * (5 - x))] = 1;\n } else {\n this._setMask(5 - x, 2 - y + width - 11);\n this._setMask(2 - y + width - 11, 5 - x);\n }\n }\n }\n }\n },\n\n _isMasked: function(x, y) {\n var bit = Frame._getMaskBit(x, y);\n\n return this._mask[bit] === 1;\n },\n\n _pack: function() {\n var bit, i, j;\n var k = 1;\n var v = 1;\n var width = this.width;\n var x = width - 1;\n var y = width - 1;\n\n // Interleaved data and ECC codes.\n var length = ((this._dataBlock + this._eccBlock) * (this._neccBlock1 + this._neccBlock2)) + this._neccBlock2;\n\n for (i = 0; i < length; i++) {\n bit = this._stringBuffer[i];\n\n for (j = 0; j < 8; j++, bit <<= 1) {\n if (0x80 & bit) {\n this.buffer[x + (width * y)] = 1;\n }\n\n // Find next fill position.\n do {\n if (v) {\n x--;\n } else {\n x++;\n\n if (k) {\n if (y !== 0) {\n y--;\n } else {\n x -= 2;\n k = !k;\n\n if (x === 6) {\n x--;\n y = 9;\n }\n }\n } else if (y !== width - 1) {\n y++;\n } else {\n x -= 2;\n k = !k;\n\n if (x === 6) {\n x--;\n y -= 8;\n }\n }\n }\n\n v = !v;\n } while (this._isMasked(x, y));\n }\n }\n },\n\n _reverseMask: function() {\n var x, y;\n var width = this.width;\n\n for (x = 0; x < 9; x++) {\n this._setMask(x, 8);\n }\n\n for (x = 0; x < 8; x++) {\n this._setMask(x + width - 8, 8);\n this._setMask(8, x);\n }\n\n for (y = 0; y < 7; y++) {\n this._setMask(8, y + width - 7);\n }\n },\n\n _setMask: function(x, y) {\n var bit = Frame._getMaskBit(x, y);\n\n this._mask[bit] = 1;\n },\n\n _syncMask: function() {\n var x, y;\n var width = this.width;\n\n for (y = 0; y < width; y++) {\n for (x = 0; x <= y; x++) {\n if (this.buffer[x + (width * y)]) {\n this._setMask(x, y);\n }\n }\n }\n }\n\n}, {\n\n _createArray: function(length) {\n var i;\n var array = [];\n\n for (i = 0; i < length; i++) {\n array[i] = 0;\n }\n\n return array;\n },\n\n _getMaskBit: function(x, y) {\n var bit;\n\n if (x > y) {\n bit = x;\n x = y;\n y = bit;\n }\n\n bit = y;\n bit += y * y;\n bit >>= 1;\n bit += x;\n\n return bit;\n },\n\n _modN: function(x) {\n while (x >= 255) {\n x -= 255;\n x = (x >> 8) + (x & 255);\n }\n\n return x;\n },\n\n // *Badness* coefficients.\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n\n});\n\nmodule.exports = Frame;\n\n/**\n * The options used by {@link Frame}.\n *\n * @typedef {Object} Frame~Options\n * @property {string} level - The ECC level to be used.\n * @property {string} value - The value to be encoded.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Renderer = require('./Renderer');\n\n/**\n * An implementation of {@link Renderer} for working with img elements.\n *\n * This depends on {@link CanvasRenderer} being executed first as this implementation simply applies the data URL from\n * the rendered canvas element as the src for the img element being rendered.\n *\n * @public\n * @class\n * @extends Renderer\n */\nvar ImageRenderer = Renderer.extend({\n\n /**\n * @override\n */\n draw: function() {\n this.element.src = this.qrious.toDataURL();\n },\n\n /**\n * @override\n */\n reset: function() {\n this.element.src = '';\n },\n\n /**\n * @override\n */\n resize: function() {\n var element = this.element;\n\n element.width = element.height = this.qrious.size;\n }\n\n});\n\nmodule.exports = ImageRenderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Defines an available option while also configuring how values are applied to the target object.\n *\n * Optionally, a default value can be specified as well a value transformer for greater control over how the option\n * value is applied.\n *\n * If no value transformer is specified, then any specified option will be applied directly. All values are maintained\n * on the target object itself as a field using the option name prefixed with a single underscore.\n *\n * When an option is specified as modifiable, the {@link OptionManager} will be required to include a setter for the\n * property that is defined on the target object that uses the option name.\n *\n * @param {string} name - the name to be used\n * @param {boolean} [modifiable] - true if the property defined on target objects should include a setter;\n * otherwise false\n * @param {*} [defaultValue] - the default value to be used\n * @param {Option~ValueTransformer} [valueTransformer] - the value transformer to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar Option = Nevis.extend(function(name, modifiable, defaultValue, valueTransformer) {\n /**\n * The name for this {@link Option}.\n *\n * @public\n * @type {string}\n * @memberof Option#\n */\n this.name = name;\n\n /**\n * Whether a setter should be included on the property defined on target objects for this {@link Option}.\n *\n * @public\n * @type {boolean}\n * @memberof Option#\n */\n this.modifiable = Boolean(modifiable);\n\n /**\n * The default value for this {@link Option}.\n *\n * @public\n * @type {*}\n * @memberof Option#\n */\n this.defaultValue = defaultValue;\n\n this._valueTransformer = valueTransformer;\n}, {\n\n /**\n * Transforms the specified value so that it can be applied for this {@link Option}.\n *\n * If a value transformer has been specified for this {@link Option}, it will be called upon to transform\n * value. Otherwise, value will be returned directly.\n *\n * @param {*} value - the value to be transformed\n * @return {*} The transformed value or value if no value transformer is specified.\n * @public\n * @memberof Option#\n */\n transform: function(value) {\n var transformer = this._valueTransformer;\n if (typeof transformer === 'function') {\n return transformer(value, this);\n }\n\n return value;\n }\n\n});\n\nmodule.exports = Option;\n\n/**\n * Returns a transformed value for the specified value to be applied for the option provided.\n *\n * @callback Option~ValueTransformer\n * @param {*} value - the value to be transformed\n * @param {Option} option - the {@link Option} for which value is being transformed\n * @return {*} The transform value.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains utility methods that are useful throughout the library.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Utilities = Nevis.extend(null, {\n\n /**\n * Returns the absolute value of a given number.\n *\n * This method is simply a convenient shorthand for Math.abs while ensuring that nulls are returned as\n * null instead of zero.\n *\n * @param {number} value - the number whose absolute value is to be returned\n * @return {number} The absolute value of value or null if value is\n * null.\n * @public\n * @static\n * @memberof Utilities\n */\n abs: function(value) {\n return value != null ? Math.abs(value) : null;\n },\n\n /**\n * Returns whether the specified object has a property with the specified name as an own\n * (not inherited) property.\n *\n * @param {Object} object - the object on which the property is to be checked\n * @param {string} name - the name of the property to be checked\n * @return {boolean} true if object has an own property with name.\n * @public\n * @static\n * @memberof Utilities\n */\n hasOwn: function(object, name) {\n return Object.prototype.hasOwnProperty.call(object, name);\n },\n\n /**\n * A non-operation method that does absolutely nothing.\n *\n * @return {void}\n * @public\n * @static\n * @memberof Utilities\n */\n noop: function() {},\n\n /**\n * Transforms the specified string to upper case while remaining null-safe.\n *\n * @param {string} string - the string to be transformed to upper case\n * @return {string} string transformed to upper case if string is not null.\n * @public\n * @static\n * @memberof Utilities\n */\n toUpperCase: function(string) {\n return string != null ? string.toUpperCase() : null;\n }\n\n});\n\nmodule.exports = Utilities;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar Utilities = require('../util/Utilities');\n\n/**\n * Manages multiple {@link Option} instances that are intended to be used by multiple implementations.\n *\n * Although the option definitions are shared between targets, the values are maintained on the targets themselves.\n *\n * @param {Option[]} options - the options to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar OptionManager = Nevis.extend(function(options) {\n /**\n * The available options for this {@link OptionManager}.\n *\n * @public\n * @type {Object.}\n * @memberof OptionManager#\n */\n this.options = {};\n\n options.forEach(function(option) {\n this.options[option.name] = option;\n }, this);\n}, {\n\n /**\n * Returns whether an option with the specified name is available.\n *\n * @param {string} name - the name of the {@link Option} whose existence is to be checked\n * @return {boolean} true if an {@link Option} exists with name; otherwise\n * false.\n * @public\n * @memberof OptionManager#\n */\n exists: function(name) {\n return this.options[name] != null;\n },\n\n /**\n * Returns the value of the option with the specified name on the target object provided.\n *\n * @param {string} name - the name of the {@link Option} whose value on target is to be returned\n * @param {Object} target - the object from which the value of the named {@link Option} is to be returned\n * @return {*} The value of the {@link Option} with name on target.\n * @public\n * @memberof OptionManager#\n */\n get: function(name, target) {\n return OptionManager._get(this.options[name], target);\n },\n\n /**\n * Returns a copy of all of the available options on the target object provided.\n *\n * @param {Object} target - the object from which the option name/value pairs are to be returned\n * @return {Object.} A hash containing the name/value pairs of all options on target.\n * @public\n * @memberof OptionManager#\n */\n getAll: function(target) {\n var name;\n var options = this.options;\n var result = {};\n\n for (name in options) {\n if (Utilities.hasOwn(options, name)) {\n result[name] = OptionManager._get(options[name], target);\n }\n }\n\n return result;\n },\n\n /**\n * Initializes the available options for the target object provided and then applies the initial values\n * within the speciifed options.\n *\n * This method will throw an error if any of the names within options does not match an available option.\n *\n * This involves setting the default values and defining properties for all of the available options on\n * target before finally calling {@link OptionMananger#setAll} with options and\n * target. Any options that are configured to be modifiable will have a setter included in their defined\n * property that will allow its corresponding value to be modified.\n *\n * If a change handler is specified, it will be called whenever the value changes on target for a\n * modifiable option, but only when done so via the defined property's setter.\n *\n * @param {Object.} options - the name/value pairs of the initial options to be set\n * @param {Object} target - the object on which the options are to be initialized\n * @param {Function} [changeHandler] - the function to be called whenever the value of an modifiable option changes on\n * target\n * @return {void}\n * @throws {Error} If options contains an invalid option name.\n * @public\n * @memberof OptionManager#\n */\n init: function(options, target, changeHandler) {\n if (typeof changeHandler !== 'function') {\n changeHandler = Utilities.noop;\n }\n\n var name, option;\n\n for (name in this.options) {\n if (Utilities.hasOwn(this.options, name)) {\n option = this.options[name];\n\n OptionManager._set(option, option.defaultValue, target);\n OptionManager._createAccessor(option, target, changeHandler);\n }\n }\n\n this._setAll(options, target, true);\n },\n\n /**\n * Sets the value of the option with the specified name on the target object provided to\n * value.\n *\n * This method will throw an error if name does not match an available option or matches an option that\n * cannot be modified.\n *\n * If value is null and the {@link Option} has a default value configured, then that default\n * value will be used instead. If the {@link Option} also has a value transformer configured, it will be used to\n * transform whichever value was determined to be used.\n *\n * This method returns whether the value of the underlying field on target was changed as a result.\n *\n * @param {string} name - the name of the {@link Option} whose value is to be set\n * @param {*} value - the value to be set for the named {@link Option} on target\n * @param {Object} target - the object on which value is to be set for the named {@link Option}\n * @return {boolean} true if the underlying field on target was changed; otherwise\n * false.\n * @throws {Error} If name is invalid or is for an option that cannot be modified.\n * @public\n * @memberof OptionManager#\n */\n set: function(name, value, target) {\n return this._set(name, value, target);\n },\n\n /**\n * Sets all of the specified options on the target object provided to their corresponding\n * values.\n *\n * This method will throw an error if any of the names within options does not match an available option\n * or matches an option that cannot be modified.\n *\n * If any value within options is null and the corresponding {@link Option} has a default\n * value configured, then that default value will be used instead. If an {@link Option} also has a value transformer\n * configured, it will be used to transform whichever value was determined to be used.\n *\n * This method returns whether the value for any of the underlying fields on target were changed as a\n * result.\n *\n * @param {Object.} options - the name/value pairs of options to be set\n * @param {Object} target - the object on which the options are to be set\n * @return {boolean} true if any of the underlying fields on target were changed; otherwise\n * false.\n * @throws {Error} If options contains an invalid option name or an option that cannot be modiifed.\n * @public\n * @memberof OptionManager#\n */\n setAll: function(options, target) {\n return this._setAll(options, target);\n },\n\n _set: function(name, value, target, allowUnmodifiable) {\n var option = this.options[name];\n if (!option) {\n throw new Error('Invalid option: ' + name);\n }\n if (!option.modifiable && !allowUnmodifiable) {\n throw new Error('Option cannot be modified: ' + name);\n }\n\n return OptionManager._set(option, value, target);\n },\n\n _setAll: function(options, target, allowUnmodifiable) {\n if (!options) {\n return false;\n }\n\n var name;\n var changed = false;\n\n for (name in options) {\n if (Utilities.hasOwn(options, name) && this._set(name, options[name], target, allowUnmodifiable)) {\n changed = true;\n }\n }\n\n return changed;\n }\n\n}, {\n\n _createAccessor: function(option, target, changeHandler) {\n var descriptor = {\n get: function() {\n return OptionManager._get(option, target);\n }\n };\n\n if (option.modifiable) {\n descriptor.set = function(value) {\n if (OptionManager._set(option, value, target)) {\n changeHandler(value, option);\n }\n };\n }\n\n Object.defineProperty(target, option.name, descriptor);\n },\n\n _get: function(option, target) {\n return target['_' + option.name];\n },\n\n _set: function(option, value, target) {\n var fieldName = '_' + option.name;\n var oldValue = target[fieldName];\n var newValue = option.transform(value != null ? value : option.defaultValue);\n\n target[fieldName] = newValue;\n\n return newValue !== oldValue;\n }\n\n});\n\nmodule.exports = OptionManager;\n\n/**\n * Called whenever the value of a modifiable {@link Option} is changed on a target object via the defined property's\n * setter.\n *\n * @callback OptionManager~ChangeHandler\n * @param {*} value - the new value for option on the target object\n * @param {Option} option - the modifable {@link Option} whose value has changed on the target object.\n * @return {void}\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * A basic manager for {@link Service} implementations that are mapped to simple names.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar ServiceManager = Nevis.extend(function() {\n this._services = {};\n}, {\n\n /**\n * Returns the {@link Service} being managed with the specified name.\n *\n * @param {string} name - the name of the {@link Service} to be returned\n * @return {Service} The {@link Service} is being managed with name.\n * @throws {Error} If no {@link Service} is being managed with name.\n * @public\n * @memberof ServiceManager#\n */\n getService: function(name) {\n var service = this._services[name];\n if (!service) {\n throw new Error('Service is not being managed with name: ' + name);\n }\n\n return service;\n },\n\n /**\n * Sets the {@link Service} implementation to be managed for the specified name to the\n * service provided.\n *\n * @param {string} name - the name of the {@link Service} to be managed with name\n * @param {Service} service - the {@link Service} implementation to be managed\n * @return {void}\n * @throws {Error} If a {@link Service} is already being managed with the same name.\n * @public\n * @memberof ServiceManager#\n */\n setService: function(name, service) {\n if (this._services[name]) {\n throw new Error('Service is already managed with name: ' + name);\n }\n\n if (service) {\n this._services[name] = service;\n }\n }\n\n});\n\nmodule.exports = ServiceManager;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar CanvasRenderer = require('./renderer/CanvasRenderer');\nvar Frame = require('./Frame');\nvar ImageRenderer = require('./renderer/ImageRenderer');\nvar Option = require('./option/Option');\nvar OptionManager = require('./option/OptionManager');\nvar ServiceManager = require('./service/ServiceManager');\nvar Utilities = require('./util/Utilities');\n\nvar optionManager = new OptionManager([\n new Option('background', true, 'white'),\n new Option('backgroundAlpha', true, 1, Utilities.abs),\n new Option('element'),\n new Option('foreground', true, 'black'),\n new Option('foregroundAlpha', true, 1, Utilities.abs),\n new Option('level', true, 'L', Utilities.toUpperCase),\n new Option('mime', true, 'image/png'),\n new Option('padding', true, null, Utilities.abs),\n new Option('size', true, 100, Utilities.abs),\n new Option('value', true, '')\n]);\nvar serviceManager = new ServiceManager();\n\n/**\n * Enables configuration of a QR code generator which uses HTML5 canvas for rendering.\n *\n * @param {QRious~Options} [options] - the options to be used\n * @throws {Error} If any options are invalid.\n * @public\n * @class\n * @extends Nevis\n */\nvar QRious = Nevis.extend(function(options) {\n optionManager.init(options, this, this.update.bind(this));\n\n var element = optionManager.get('element', this);\n var elementService = serviceManager.getService('element');\n var canvas = element && elementService.isCanvas(element) ? element : elementService.createCanvas();\n var image = element && elementService.isImage(element) ? element : elementService.createImage();\n\n this._canvasRenderer = new CanvasRenderer(this, canvas, true);\n this._imageRenderer = new ImageRenderer(this, image, image === element);\n\n this.update();\n}, {\n\n /**\n * Returns all of the options configured for this {@link QRious}.\n *\n * Any changes made to the returned object will not be reflected in the options themselves or their corresponding\n * underlying fields.\n *\n * @return {Object.} A copy of the applied options.\n * @public\n * @memberof QRious#\n */\n get: function() {\n return optionManager.getAll(this);\n },\n\n /**\n * Sets all of the specified options and automatically updates this {@link QRious} if any of the\n * underlying fields are changed as a result.\n *\n * This is the preferred method for updating multiple options at one time to avoid unnecessary updates between\n * changes.\n *\n * @param {QRious~Options} options - the options to be set\n * @return {void}\n * @throws {Error} If any options are invalid or cannot be modified.\n * @public\n * @memberof QRious#\n */\n set: function(options) {\n if (optionManager.setAll(options, this)) {\n this.update();\n }\n },\n\n /**\n * Returns the image data URI for the generated QR code using the mime provided.\n *\n * @param {string} [mime] - the MIME type for the image\n * @return {string} The image data URI for the QR code.\n * @public\n * @memberof QRious#\n */\n toDataURL: function(mime) {\n return this.canvas.toDataURL(mime || this.mime);\n },\n\n /**\n * Updates this {@link QRious} by generating a new {@link Frame} and re-rendering the QR code.\n *\n * @return {void}\n * @protected\n * @memberof QRious#\n */\n update: function() {\n var frame = new Frame({\n level: this.level,\n value: this.value\n });\n\n this._canvasRenderer.render(frame);\n this._imageRenderer.render(frame);\n }\n\n}, {\n\n /**\n * Configures the service provided to be used by all {@link QRious} instances.\n *\n * @param {Service} service - the {@link Service} to be configured\n * @return {void}\n * @throws {Error} If a {@link Service} has already been configured with the same name.\n * @public\n * @static\n * @memberof QRious\n */\n use: function(service) {\n serviceManager.setService(service.getName(), service);\n }\n\n});\n\nObject.defineProperties(QRious.prototype, {\n\n canvas: {\n /**\n * Returns the canvas element being used to render the QR code for this {@link QRious}.\n *\n * @return {*} The canvas element.\n * @public\n * @memberof QRious#\n * @alias canvas\n */\n get: function() {\n return this._canvasRenderer.getElement();\n }\n },\n\n image: {\n /**\n * Returns the img element being used to render the QR code for this {@link QRious}.\n *\n * @return {*} The img element.\n * @public\n * @memberof QRious#\n * @alias image\n */\n get: function() {\n return this._imageRenderer.getElement();\n }\n }\n\n});\n\nmodule.exports = QRious;\n\n/**\n * The options used by {@link QRious}.\n *\n * @typedef {Object} QRious~Options\n * @property {string} [background=\"white\"] - The background color to be applied to the QR code.\n * @property {number} [backgroundAlpha=1] - The background alpha to be applied to the QR code.\n * @property {*} [element] - The element to be used to render the QR code which may either be an canvas or\n * img. The element(s) will be created if needed.\n * @property {string} [foreground=\"black\"] - The foreground color to be applied to the QR code.\n * @property {number} [foregroundAlpha=1] - The foreground alpha to be applied to the QR code.\n * @property {string} [level=\"L\"] - The error correction level to be applied to the QR code.\n * @property {string} [mime=\"image/png\"] - The MIME type to be used to render the image for the QR code.\n * @property {number} [padding] - The padding for the QR code in pixels.\n * @property {number} [size=100] - The size of the QR code in pixels.\n * @property {string} [value=\"\"] - The value to be encoded within the QR code.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Defines a service contract that must be met by all implementations.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Service = Nevis.extend({\n\n /**\n * Returns the name of this {@link Service}.\n *\n * @return {string} The service name.\n * @public\n * @abstract\n * @memberof Service#\n */\n getName: function() {}\n\n});\n\nmodule.exports = Service;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar Service = require('../Service');\n\n/**\n * A service for working with elements.\n *\n * @public\n * @class\n * @extends Service\n */\nvar ElementService = Service.extend({\n\n /**\n * Creates an instance of a canvas element.\n *\n * Implementations of {@link ElementService} must override this method with their own specific logic.\n *\n * @return {*} The newly created canvas element.\n * @public\n * @abstract\n * @memberof ElementService#\n */\n createCanvas: function() {},\n\n /**\n * Creates an instance of a image element.\n *\n * Implementations of {@link ElementService} must override this method with their own specific logic.\n *\n * @return {*} The newly created image element.\n * @public\n * @abstract\n * @memberof ElementService#\n */\n createImage: function() {},\n\n /**\n * @override\n */\n getName: function() {\n return 'element';\n },\n\n /**\n * Returns whether the specified element is a canvas.\n *\n * Implementations of {@link ElementService} must override this method with their own specific logic.\n *\n * @param {*} element - the element to be checked\n * @return {boolean} true if element is a canvas; otherwise false.\n * @public\n * @abstract\n * @memberof ElementService#\n */\n isCanvas: function(element) {},\n\n /**\n * Returns whether the specified element is an image.\n *\n * Implementations of {@link ElementService} must override this method with their own specific logic.\n *\n * @param {*} element - the element to be checked\n * @return {boolean} true if element is an image; otherwise false.\n * @public\n * @abstract\n * @memberof ElementService#\n */\n isImage: function(element) {}\n\n});\n\nmodule.exports = ElementService;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar ElementService = require('qrious-core/src/service/element/ElementService');\n\n/**\n * An implementation of {@link ElementService} intended for use within a browser environment.\n *\n * @public\n * @class\n * @extends ElementService\n */\nvar BrowserElementService = ElementService.extend({\n\n /**\n * @override\n */\n createCanvas: function() {\n return document.createElement('canvas');\n },\n\n /**\n * @override\n */\n createImage: function() {\n return document.createElement('img');\n },\n\n /**\n * @override\n */\n isCanvas: function(element) {\n return element instanceof HTMLCanvasElement;\n },\n\n /**\n * @override\n */\n isImage: function(element) {\n return element instanceof HTMLImageElement;\n }\n\n});\n\nmodule.exports = BrowserElementService;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n'use strict';\n\nvar QRious = require('qrious-core');\n\nvar BrowserElementService = require('./service/element/BrowserElementService');\n\nQRious.use(new BrowserElementService());\n\nmodule.exports = QRious;\n"],"names":["createObject","prototype","properties","result","Object","create","Constructor","extendObject","extend","name","constructor","statics","superConstructor","this","apply","arguments","class_","super_","own","target","sources","property","source","i","length","slice","call","hasOwnProperty","Nevis","Array","qrious","element","enabled","Boolean","draw","frame","getElement","render","getModuleSize","padding","pixels","Math","floor","size","width","max","getOffset","moduleSize","offset","resize","reset","Renderer","j","context","getContext","fillStyle","foreground","globalAlpha","foregroundAlpha","buffer","fillRect","lineWidth","clearRect","background","backgroundAlpha","height","BLOCK","BLOCKS","FINAL_FORMAT","LEVELS","L","M","Q","H","EXPONENT","LOG","Frame","options","dataBlock","eccBlock","index","neccBlock1","neccBlock2","valueLength","value","_badness","_level","ErrorCorrection","level","_polynomial","_value","_version","_stringBuffer","_dataBlock","_eccBlock","_neccBlock1","_neccBlock2","_createArray","_ecc","_mask","_insertFinders","_insertAlignments","_insertTimingGap","_reverseMask","_insertTimingRowAndColumn","_insertVersion","_syncMask","_convertBitStream","_calculatePolynomial","_appendEccToData","_interleaveBlocks","_pack","_finish","_addAlignment","x","y","_setMask","_appendData","data","dataLength","ecc","eccLength","bit","polynomial","stringBuffer","Galois","_modN","_calculateMaxLength","_applyMask","mask","r3x","r3y","_isMasked","_checkBadness","b","b1","h","bad","badness","N2","bw","_getBadness","count","big","N4","version","charCodeAt","maxLength","badRuns","N1","N3","currentMask","k","Alignment","Version","_getMaskBit","v","array","src","toDataURL","modifiable","defaultValue","valueTransformer","_valueTransformer","transform","transformer","abs","hasOwn","object","noop","toUpperCase","string","OptionManager","forEach","option","exists","get","_get","getAll","Utilities","init","changeHandler","_set","_createAccessor","_setAll","set","setAll","allowUnmodifiable","Error","changed","descriptor","defineProperty","fieldName","oldValue","newValue","_services","getService","service","setService","optionManager","Option","serviceManager","ServiceManager","QRious","update","bind","elementService","canvas","isCanvas","createCanvas","image","isImage","createImage","_canvasRenderer","CanvasRenderer","_imageRenderer","ImageRenderer","mime","use","getName","defineProperties","document","createElement","HTMLCanvasElement","HTMLImageElement","BrowserElementService"],"mappings":"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O,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,GAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,GAAI,IAAK,GAAO,EAA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,IAAM,EAC1F,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAC1F,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAW5FC,KACE,IAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAC1F,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,EAAM,GAAM,IAC1F,EAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAC1F,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAC1F,EAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAC1F,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,GAAM,GAC1F,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAC1F,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC1F,EAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAC1F,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAC1F,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC1F,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAC1F,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAA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"} \ No newline at end of file diff --git a/js/vendor/.yarn-integrity b/js/vendor/.yarn-integrity new file mode 100644 index 0000000..f010195 --- /dev/null +++ b/js/vendor/.yarn-integrity @@ -0,0 +1,16 @@ +{ + "systemParams": "win32-x64-93", + "modulesFolders": [ + "vendor" + ], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [ + "js-qrcode@^1.0.0" + ], + "lockfileEntries": { + "js-qrcode@^1.0.0": "https://registry.yarnpkg.com/js-qrcode/-/js-qrcode-1.0.0.tgz#5694d07033ef00a8c17d0eeda017a756ed460955" + }, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/js/yarn.lock b/js/yarn.lock new file mode 100644 index 0000000..fb57ccd --- /dev/null +++ b/js/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +