From a17e59af58bb04bbc45b9552a249b03471a49ba3 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 7 Aug 2015 10:37:36 -0400 Subject: [PATCH] (feat) added v3 js/css/map files for packaging --- UI/WebServerResources/css/styles.css | 11681 +++++++ UI/WebServerResources/css/styles.css.map | 1 + UI/WebServerResources/js/Common.js | 3 + UI/WebServerResources/js/Common.js.map | 1 + UI/WebServerResources/js/Contacts.js | 2 + UI/WebServerResources/js/Contacts.js.map | 1 + UI/WebServerResources/js/Contacts.services.js | 2 + .../js/Contacts.services.js.map | 1 + UI/WebServerResources/js/Mailer.js | 2 + UI/WebServerResources/js/Mailer.js.map | 1 + UI/WebServerResources/js/Mailer.services.js | 2 + .../js/Mailer.services.js.map | 1 + UI/WebServerResources/js/Main.js | 2 + UI/WebServerResources/js/Main.js.map | 1 + UI/WebServerResources/js/Preferences.js | 2 + UI/WebServerResources/js/Preferences.js.map | 1 + .../js/Preferences.services.js | 2 + .../js/Preferences.services.js.map | 1 + UI/WebServerResources/js/Scheduler.js | 2 + UI/WebServerResources/js/Scheduler.js.map | 1 + .../js/Scheduler.services.js | 2 + .../js/Scheduler.services.js.map | 1 + .../js/vendor/angular-animate.js | 2139 ++ .../js/vendor/angular-animate.min.js | 33 + .../js/vendor/angular-animate.min.js.map | 8 + .../js/vendor/angular-aria.js | 393 + .../js/vendor/angular-aria.min.js | 13 + .../js/vendor/angular-aria.min.js.map | 8 + .../js/vendor/angular-file-upload.min.js | 7 + .../js/vendor/angular-material.js | 17841 +++++++++++ .../js/vendor/angular-material.min.js | 14 + .../js/vendor/angular-sanitize.js | 679 + .../js/vendor/angular-sanitize.min.js | 16 + .../js/vendor/angular-sanitize.min.js.map | 8 + .../js/vendor/angular-ui-router.js | 4370 +++ .../js/vendor/angular-ui-router.min.js | 7 + UI/WebServerResources/js/vendor/angular.js | 26443 ++++++++++++++++ .../js/vendor/angular.min.js | 253 + .../js/vendor/angular.min.js.map | 8 + UI/WebServerResources/js/vendor/lodash.js | 12352 ++++++++ UI/WebServerResources/js/vendor/lodash.min.js | 98 + 41 files changed, 76403 insertions(+) create mode 100644 UI/WebServerResources/css/styles.css create mode 100644 UI/WebServerResources/css/styles.css.map create mode 100644 UI/WebServerResources/js/Common.js create mode 100644 UI/WebServerResources/js/Common.js.map create mode 100644 UI/WebServerResources/js/Contacts.js create mode 100644 UI/WebServerResources/js/Contacts.js.map create mode 100644 UI/WebServerResources/js/Contacts.services.js create mode 100644 UI/WebServerResources/js/Contacts.services.js.map create mode 100644 UI/WebServerResources/js/Mailer.js create mode 100644 UI/WebServerResources/js/Mailer.js.map create mode 100644 UI/WebServerResources/js/Mailer.services.js create mode 100644 UI/WebServerResources/js/Mailer.services.js.map create mode 100644 UI/WebServerResources/js/Main.js create mode 100644 UI/WebServerResources/js/Main.js.map create mode 100644 UI/WebServerResources/js/Preferences.js create mode 100644 UI/WebServerResources/js/Preferences.js.map create mode 100644 UI/WebServerResources/js/Preferences.services.js create mode 100644 UI/WebServerResources/js/Preferences.services.js.map create mode 100644 UI/WebServerResources/js/Scheduler.js create mode 100644 UI/WebServerResources/js/Scheduler.js.map create mode 100644 UI/WebServerResources/js/Scheduler.services.js create mode 100644 UI/WebServerResources/js/Scheduler.services.js.map create mode 100644 UI/WebServerResources/js/vendor/angular-animate.js create mode 100644 UI/WebServerResources/js/vendor/angular-animate.min.js create mode 100644 UI/WebServerResources/js/vendor/angular-animate.min.js.map create mode 100644 UI/WebServerResources/js/vendor/angular-aria.js create mode 100644 UI/WebServerResources/js/vendor/angular-aria.min.js create mode 100644 UI/WebServerResources/js/vendor/angular-aria.min.js.map create mode 100644 UI/WebServerResources/js/vendor/angular-file-upload.min.js create mode 100644 UI/WebServerResources/js/vendor/angular-material.js create mode 100644 UI/WebServerResources/js/vendor/angular-material.min.js create mode 100644 UI/WebServerResources/js/vendor/angular-sanitize.js create mode 100644 UI/WebServerResources/js/vendor/angular-sanitize.min.js create mode 100644 UI/WebServerResources/js/vendor/angular-sanitize.min.js.map create mode 100644 UI/WebServerResources/js/vendor/angular-ui-router.js create mode 100644 UI/WebServerResources/js/vendor/angular-ui-router.min.js create mode 100644 UI/WebServerResources/js/vendor/angular.js create mode 100644 UI/WebServerResources/js/vendor/angular.min.js create mode 100644 UI/WebServerResources/js/vendor/angular.min.js.map create mode 100644 UI/WebServerResources/js/vendor/lodash.js create mode 100644 UI/WebServerResources/js/vendor/lodash.min.js diff --git a/UI/WebServerResources/css/styles.css b/UI/WebServerResources/css/styles.css new file mode 100644 index 0000000000..6efc4eec18 --- /dev/null +++ b/UI/WebServerResources/css/styles.css @@ -0,0 +1,11681 @@ +/** +* +* Material design color palettes +* @see http://www.google.com/design/spec/style/color.html +* +**/ +.md-default-theme.fg-sogoBlue-50 { + color: #f0faf9; } + +.md-default-theme.bg-sogoBlue-50 { + background-color: #f0faf9; } + +.md-default-theme.fg-sogoBlue-100 { + color: #e1f5f3; } + +.md-default-theme.bg-sogoBlue-100 { + background-color: #e1f5f3; } + +.md-default-theme.fg-sogoBlue-200 { + color: #ceebe8; } + +.md-default-theme.bg-sogoBlue-200 { + background-color: #ceebe8; } + +.md-default-theme.fg-sogoBlue-300 { + color: #bfe0dd; } + +.md-default-theme.bg-sogoBlue-300 { + background-color: #bfe0dd; } + +.md-default-theme.fg-sogoBlue-400 { + color: #b2d6d3; } + +.md-default-theme.bg-sogoBlue-400 { + background-color: #b2d6d3; } + +.md-default-theme.fg-sogoBlue-500 { + color: #a1ccc8; } + +.md-default-theme.bg-sogoBlue-500 { + background-color: #a1ccc8; } + +.md-default-theme.fg-sogoBlue-600 { + color: #8ebfbb; } + +.md-default-theme.bg-sogoBlue-600 { + background-color: #8ebfbb; } + +.md-default-theme.fg-sogoBlue-700 { + color: #7db3b0; } + +.md-default-theme.bg-sogoBlue-700 { + background-color: #7db3b0; } + +.md-default-theme.fg-sogoBlue-800 { + color: #639997; } + +.md-default-theme.bg-sogoBlue-800 { + background-color: #639997; } + +.md-default-theme.fg-sogoBlue-900 { + color: #4d8080; } + +.md-default-theme.bg-sogoBlue-900 { + background-color: #4d8080; } + +.md-default-theme.fg-sogoBlue-A100 { + color: #d4f7fa; } + +.md-default-theme.bg-sogoBlue-A100 { + background-color: #d4f7fa; } + +.md-default-theme.fg-sogoBlue-A200 { + color: #c3f5fa; } + +.md-default-theme.bg-sogoBlue-A200 { + background-color: #c3f5fa; } + +.md-default-theme.fg-sogoBlue-A400 { + color: #53e3f0; } + +.md-default-theme.bg-sogoBlue-A400 { + background-color: #53e3f0; } + +.md-default-theme.fg-sogoBlue-A700 { + color: #00b0c0; } + +.md-default-theme.bg-sogoBlue-A700 { + background-color: #00b0c0; } + +.md-default-theme.fg-sogoGreen-50 { + color: #eaf5e9; } + +.md-default-theme.bg-sogoGreen-50 { + background-color: #eaf5e9; } + +.md-default-theme.fg-sogoGreen-100 { + color: #cbe5c8; } + +.md-default-theme.bg-sogoGreen-100 { + background-color: #cbe5c8; } + +.md-default-theme.fg-sogoGreen-200 { + color: #aad6a5; } + +.md-default-theme.bg-sogoGreen-200 { + background-color: #aad6a5; } + +.md-default-theme.fg-sogoGreen-300 { + color: #88c781; } + +.md-default-theme.bg-sogoGreen-300 { + background-color: #88c781; } + +.md-default-theme.fg-sogoGreen-400 { + color: #66b86a; } + +.md-default-theme.bg-sogoGreen-400 { + background-color: #66b86a; } + +.md-default-theme.fg-sogoGreen-500 { + color: #56b04c; } + +.md-default-theme.bg-sogoGreen-500 { + background-color: #56b04c; } + +.md-default-theme.fg-sogoGreen-600 { + color: #4da143; } + +.md-default-theme.bg-sogoGreen-600 { + background-color: #4da143; } + +.md-default-theme.fg-sogoGreen-700 { + color: #388e3c; } + +.md-default-theme.bg-sogoGreen-700 { + background-color: #388e3c; } + +.md-default-theme.fg-sogoGreen-800 { + color: #367d2e; } + +.md-default-theme.bg-sogoGreen-800 { + background-color: #367d2e; } + +.md-default-theme.fg-sogoGreen-900 { + color: #225e1b; } + +.md-default-theme.bg-sogoGreen-900 { + background-color: #225e1b; } + +.md-default-theme.fg-sogoGreen-A100 { + color: #b9f6ca; } + +.md-default-theme.bg-sogoGreen-A100 { + background-color: #b9f6ca; } + +.md-default-theme.fg-sogoGreen-A200 { + color: #69f0ae; } + +.md-default-theme.bg-sogoGreen-A200 { + background-color: #69f0ae; } + +.md-default-theme.fg-sogoGreen-A400 { + color: #00e676; } + +.md-default-theme.bg-sogoGreen-A400 { + background-color: #00e676; } + +.md-default-theme.fg-sogoGreen-A700 { + color: #00c853; } + +.md-default-theme.bg-sogoGreen-A700 { + background-color: #00c853; } + +.md-default-theme.fg-sogoPaper-50 { + color: #fcfbf8; } + +.md-default-theme.bg-sogoPaper-50 { + background-color: #fcfbf8; } + +.md-default-theme.fg-sogoPaper-100 { + color: #f7f1dc; } + +.md-default-theme.bg-sogoPaper-100 { + background-color: #f7f1dc; } + +.md-default-theme.fg-sogoPaper-200 { + color: #ede5ca; } + +.md-default-theme.bg-sogoPaper-200 { + background-color: #ede5ca; } + +.md-default-theme.fg-sogoPaper-300 { + color: #e6d8ba; } + +.md-default-theme.bg-sogoPaper-300 { + background-color: #e6d8ba; } + +.md-default-theme.fg-sogoPaper-400 { + color: #e2d2a3; } + +.md-default-theme.bg-sogoPaper-400 { + background-color: #e2d2a3; } + +.md-default-theme.fg-sogoPaper-500 { + color: #d6c48d; } + +.md-default-theme.bg-sogoPaper-500 { + background-color: #d6c48d; } + +.md-default-theme.fg-sogoPaper-600 { + color: #baa870; } + +.md-default-theme.bg-sogoPaper-600 { + background-color: #baa870; } + +.md-default-theme.fg-sogoPaper-700 { + color: #857545; } + +.md-default-theme.bg-sogoPaper-700 { + background-color: #857545; } + +.md-default-theme.fg-sogoPaper-800 { + color: #524517; } + +.md-default-theme.bg-sogoPaper-800 { + background-color: #524517; } + +.md-default-theme.fg-sogoPaper-900 { + color: #433809; } + +.md-default-theme.bg-sogoPaper-900 { + background-color: #433809; } + +.md-default-theme.fg-sogoPaper-1000 { + color: #000; } + +.md-default-theme.bg-sogoPaper-1000 { + background-color: #000; } + +.md-default-theme.fg-sogoPaper-A100 { + color: #fff; } + +.md-default-theme.bg-sogoPaper-A100 { + background-color: #fff; } + +.md-default-theme.fg-sogoPaper-A200 { + color: #eee; } + +.md-default-theme.bg-sogoPaper-A200 { + background-color: #eee; } + +.md-default-theme.fg-sogoPaper-A400 { + color: #bdbdbd; } + +.md-default-theme.bg-sogoPaper-A400 { + background-color: #bdbdbd; } + +.md-default-theme.fg-sogoPaper-A700 { + color: #857545; } + +.md-default-theme.bg-sogoPaper-A700 { + background-color: #857545; } + +/* Welcome to Compass. + * In this file you should write your main styles. (or centralize your imports) + * Import this file using the following HTML or equivalent: + * */ +/* line 5, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + vertical-align: baseline; } + +/* line 22, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; } + +/* line 24, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; } + +/* line 26, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; } + +/* line 28, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; } + +/* line 30, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; } + +/* line 103, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; } + +/* line 32, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; } + +/* line 116, ../../.rvm/gems/ruby-2.1.5/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block; } + +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; } + +/* Local overrides from angular-material src */ +/* mixin definition ; sets LTR and RTL within the same style call */ +html, body { + height: 100%; + color: rgba(0, 0, 0, 0.87); + background: white; + position: relative; } + +body { + margin: 0; + padding: 0; } + +[tabindex='-1']:focus { + outline: none; } + +.inset { + padding: 10px; } + +button.md-no-style { + font-weight: normal; + background-color: inherit; + text-align: left; + border: none; + padding: 0; + margin: 0; } + +select, +button, +textarea, +input { + vertical-align: baseline; } + +input[type="reset"], +input[type="submit"], +html input[type="button"], +button { + cursor: pointer; + -webkit-appearance: button; } + input[type="reset"][disabled], + input[type="submit"][disabled], + html input[type="button"][disabled], + button[disabled] { + cursor: default; } + +textarea { + vertical-align: top; + overflow: auto; } + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; + -webkit-box-sizing: content-box; } + input[type="search"]::-webkit-search-decoration, + input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.md-visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + text-transform: none; + width: 1px; } + +.md-shadow { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + border-radius: inherit; + pointer-events: none; } + +.md-shadow-bottom-z-1 { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-shadow-bottom-z-2 { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +.md-shadow-animated.md-shadow { + -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); } + +/* + * A container inside of a rippling element (eg a button), + * which contains all of the individual ripples + */ +.md-ripple-container { + pointer-events: none; + position: absolute; + overflow: hidden; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transition: all 0.55s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.55s cubic-bezier(0.25, 0.8, 0.25, 1); } + +.md-ripple { + position: absolute; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + opacity: 0; + border-radius: 50%; } + .md-ripple.md-ripple-placed { + -webkit-transition: left 1.8s cubic-bezier(0.25, 0.8, 0.25, 1), top 1.8s cubic-bezier(0.25, 0.8, 0.25, 1), margin 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), border 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), width 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), height 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), -webkit-transform 1.3s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: left 1.8s cubic-bezier(0.25, 0.8, 0.25, 1), top 1.8s cubic-bezier(0.25, 0.8, 0.25, 1), margin 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), border 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), width 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), height 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 1.3s cubic-bezier(0.25, 0.8, 0.25, 1), transform 1.3s cubic-bezier(0.25, 0.8, 0.25, 1); } + .md-ripple.md-ripple-scaled { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); } + .md-ripple.md-ripple-active, .md-ripple.md-ripple-full, .md-ripple.md-ripple-visible { + opacity: 0.20; } + +.md-padding { + padding: 8px; } + +.md-margin { + margin: 8px; } + +.md-scroll-mask { + position: absolute; + background-color: transparent; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .md-scroll-mask > .md-scroll-mask-bar { + display: block; + position: absolute; + background-color: #fafafa; + right: 0; + top: 0; + bottom: 0; + z-index: 65; + box-shadow: inset 0px 0px 1px rgba(0, 0, 0, 0.3); } + +@media (min-width: 600px) { + .md-padding { + padding: 16px; } } + +html * { + box-sizing: border-box; } + +/* Sizes: + 0 <= size < 600 Phone + 600 <= size < 960 Tablet + 960 <= size < 1200 Tablet-Landscape + 1200 <= size PC +*/ +[layout], .md-layout { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + +[layout=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-direction: column; } + +[layout=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-direction: row; } + +[layout-padding] > [flex-sm], +.md-layout-padding > [flex-sm], +[layout-padding] > [flex-lt-md], .md-layout-padding > [flex-lt-md] { + padding: 4px; } + +[layout-padding], +.md-layout-padding, +[layout-padding] > [flex], +.md-layout-padding > [flex], +[layout-padding] > .md-flex, +.md-layout-padding > .md-flex, +[layout-padding] > [flex-gt-sm], +.md-layout-padding > [flex-gt-sm], +[layout-padding] > [flex-md], +.md-layout-padding > [flex-md], +[layout-padding] > [flex-lt-lg], .md-layout-padding > [flex-lt-lg] { + padding: 8px; } + +[layout-padding] > [flex-gt-md], +.md-layout-padding > [flex-gt-md], +[layout-padding] > [flex-lg], .md-layout-padding > [flex-lg] { + padding: 16px; } + +[layout-margin] > [flex-sm], +.md-layout-margin > [flex-sm], +[layout-margin] > [flex-lt-md], .md-layout-margin > [flex-lt-md] { + margin: 4px; } + +[layout-margin], +.md-layout-margin, +[layout-margin] > [flex], +.md-layout-margin > [flex], +[layout-margin] > .md-flex, +.md-layout-margin > .md-flex, +[layout-margin] > [flex-gt-sm], +.md-layout-margin > [flex-gt-sm], +[layout-margin] > [flex-md], +.md-layout-margin > [flex-md], +[layout-margin] > [flex-lt-lg], .md-layout-margin > [flex-lt-lg] { + margin: 8px; } + +[layout-margin] > [flex-gt-md], +.md-layout-margin > [flex-gt-md], +[layout-margin] > [flex-lg], .md-layout-margin > [flex-lg] { + margin: 16px; } + +[layout-wrap], .md-layout-wrap { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +[layout-fill], .md-layout-fill { + margin: 0; + min-height: 100%; + width: 100%; } + +@-moz-document url-prefix() { + [layout-fill], .md-layout-fill { + margin: 0; + width: 100%; + min-height: auto; + height: inherit; } } + +[flex], .md-flex { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + +[flex="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + +[layout="row"] > [flex="0"] { + max-width: 0%; } + +[layout="column"] > [flex="0"] { + max-height: 0%; } + +[flex="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + +[layout="row"] > [flex="5"] { + max-width: 5%; } + +[layout="column"] > [flex="5"] { + max-height: 5%; } + +[flex="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + +[layout="row"] > [flex="10"] { + max-width: 10%; } + +[layout="column"] > [flex="10"] { + max-height: 10%; } + +[flex="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + +[layout="row"] > [flex="15"] { + max-width: 15%; } + +[layout="column"] > [flex="15"] { + max-height: 15%; } + +[flex="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + +[layout="row"] > [flex="20"] { + max-width: 20%; } + +[layout="column"] > [flex="20"] { + max-height: 20%; } + +[flex="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + +[layout="row"] > [flex="25"] { + max-width: 25%; } + +[layout="column"] > [flex="25"] { + max-height: 25%; } + +[flex="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + +[layout="row"] > [flex="30"] { + max-width: 30%; } + +[layout="column"] > [flex="30"] { + max-height: 30%; } + +[flex="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + +[layout="row"] > [flex="35"] { + max-width: 35%; } + +[layout="column"] > [flex="35"] { + max-height: 35%; } + +[flex="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + +[layout="row"] > [flex="40"] { + max-width: 40%; } + +[layout="column"] > [flex="40"] { + max-height: 40%; } + +[flex="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + +[layout="row"] > [flex="45"] { + max-width: 45%; } + +[layout="column"] > [flex="45"] { + max-height: 45%; } + +[flex="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + +[layout="row"] > [flex="50"] { + max-width: 50%; } + +[layout="column"] > [flex="50"] { + max-height: 50%; } + +[flex="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + +[layout="row"] > [flex="55"] { + max-width: 55%; } + +[layout="column"] > [flex="55"] { + max-height: 55%; } + +[flex="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + +[layout="row"] > [flex="60"] { + max-width: 60%; } + +[layout="column"] > [flex="60"] { + max-height: 60%; } + +[flex="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + +[layout="row"] > [flex="65"] { + max-width: 65%; } + +[layout="column"] > [flex="65"] { + max-height: 65%; } + +[flex="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + +[layout="row"] > [flex="70"] { + max-width: 70%; } + +[layout="column"] > [flex="70"] { + max-height: 70%; } + +[flex="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + +[layout="row"] > [flex="75"] { + max-width: 75%; } + +[layout="column"] > [flex="75"] { + max-height: 75%; } + +[flex="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + +[layout="row"] > [flex="80"] { + max-width: 80%; } + +[layout="column"] > [flex="80"] { + max-height: 80%; } + +[flex="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + +[layout="row"] > [flex="85"] { + max-width: 85%; } + +[layout="column"] > [flex="85"] { + max-height: 85%; } + +[flex="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + +[layout="row"] > [flex="90"] { + max-width: 90%; } + +[layout="column"] > [flex="90"] { + max-height: 90%; } + +[flex="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + +[layout="row"] > [flex="95"] { + max-width: 95%; } + +[layout="column"] > [flex="95"] { + max-height: 95%; } + +[flex="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + +[layout="row"] > [flex="100"] { + max-width: 100%; } + +[layout="column"] > [flex="100"] { + max-height: 100%; } + +[flex="33"], [flex="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + +[flex="66"], [flex="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + +[layout="row"] > [flex="33"], [layout="row"] > [flex="34"] { + max-width: 33.33%; } + +[layout="row"] > [flex="66"], [layout="row"] > [flex="67"] { + max-width: 66.66%; } + +[layout="column"] > [flex="33"], [layout="column"] > [flex="34"] { + max-height: 33.33%; } + +[layout="column"] > [flex="66"], [layout="column"] > [flex="67"] { + max-height: 66.66%; } + +[layout-align="center"], [layout-align="center center"], +[layout-align="center start"], +[layout-align="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + +[layout-align="end"], [layout-align="end center"], +[layout-align="end start"], +[layout-align="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + +[layout-align="space-around"], [layout-align="space-around center"], +[layout-align="space-around start"], +[layout-align="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + +[layout-align="space-between"], [layout-align="space-between center"], +[layout-align="space-between start"], +[layout-align="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + +[layout-align="center center"], +[layout-align="start center"], +[layout-align="end center"], +[layout-align="space-between center"], +[layout-align="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +[layout-align="center start"], +[layout-align="start start"], +[layout-align="end start"], +[layout-align="space-between start"], +[layout-align="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + +[layout-align="center end"], +[layout-align="start end"], +[layout-align="end end"], +[layout-align="space-between end"], +[layout-align="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + +[flex-order="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + +[flex-order="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +[flex-order="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + +[flex-order="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + +[flex-order="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + +[flex-order="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + +[flex-order="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + +[flex-order="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + +[flex-order="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + +[flex-order="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + +[offset="5"] { + margin-left: 5%; } + +[offset="10"] { + margin-left: 10%; } + +[offset="15"] { + margin-left: 15%; } + +[offset="20"] { + margin-left: 20%; } + +[offset="25"] { + margin-left: 25%; } + +[offset="30"] { + margin-left: 30%; } + +[offset="35"] { + margin-left: 35%; } + +[offset="40"] { + margin-left: 40%; } + +[offset="45"] { + margin-left: 45%; } + +[offset="50"] { + margin-left: 50%; } + +[offset="55"] { + margin-left: 55%; } + +[offset="60"] { + margin-left: 60%; } + +[offset="65"] { + margin-left: 65%; } + +[offset="70"] { + margin-left: 70%; } + +[offset="75"] { + margin-left: 75%; } + +[offset="80"] { + margin-left: 80%; } + +[offset="85"] { + margin-left: 85%; } + +[offset="90"] { + margin-left: 90%; } + +[offset="95"] { + margin-left: 95%; } + +[offset="33"], [offset="34"] { + margin-left: 33.33%; } + +[offset="66"], [offset="67"] { + margin-left: 66.66%; } + +/** + * `hide-gt-sm show-gt-lg` should hide from 600px to 1200px + * `show-md hide-gt-sm` should show from 0px to 960px and hide at >960px + * `hide-gt-md show-gt-sm` should show everywhere (show overrides hide)` + */ +@media (max-width: 599px) { + [hide-sm]:not([show-sm]):not([show]), [hide]:not([show-sm]):not([show]), .md-hide:not([show-sm]):not([show]) { + display: none; } + [flex-order-sm="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-sm="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-sm="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-sm="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-sm="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-sm="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-sm="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-sm="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-sm="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-sm="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-sm="center"], [layout-align-sm="center center"], + [layout-align-sm="center start"], + [layout-align-sm="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-sm="end"], [layout-align-sm="end center"], + [layout-align-sm="end start"], + [layout-align-sm="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-sm="space-around"], [layout-align-sm="space-around center"], + [layout-align-sm="space-around start"], + [layout-align-sm="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-sm="space-between"], [layout-align-sm="space-between center"], + [layout-align-sm="space-between start"], + [layout-align-sm="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-sm="center center"], + [layout-align-sm="start center"], + [layout-align-sm="end center"], + [layout-align-sm="space-between center"], + [layout-align-sm="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-sm="center start"], + [layout-align-sm="start start"], + [layout-align-sm="end start"], + [layout-align-sm="space-between start"], + [layout-align-sm="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-sm="center end"], + [layout-align-sm="start end"], + [layout-align-sm="end end"], + [layout-align-sm="space-between end"], + [layout-align-sm="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-sm] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-sm=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-sm=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-sm="5"] { + margin-left: 5%; } + [offset-sm="10"] { + margin-left: 10%; } + [offset-sm="15"] { + margin-left: 15%; } + [offset-sm="20"] { + margin-left: 20%; } + [offset-sm="25"] { + margin-left: 25%; } + [offset-sm="30"] { + margin-left: 30%; } + [offset-sm="35"] { + margin-left: 35%; } + [offset-sm="40"] { + margin-left: 40%; } + [offset-sm="45"] { + margin-left: 45%; } + [offset-sm="50"] { + margin-left: 50%; } + [offset-sm="55"] { + margin-left: 55%; } + [offset-sm="60"] { + margin-left: 60%; } + [offset-sm="65"] { + margin-left: 65%; } + [offset-sm="70"] { + margin-left: 70%; } + [offset-sm="75"] { + margin-left: 75%; } + [offset-sm="80"] { + margin-left: 80%; } + [offset-sm="85"] { + margin-left: 85%; } + [offset-sm="90"] { + margin-left: 90%; } + [offset-sm="95"] { + margin-left: 95%; } + [offset-sm="33"], [offset-sm="34"] { + margin-left: 33.33%; } + [offset-sm="66"], [offset-sm="67"] { + margin-left: 66.66%; } + [flex-sm] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-sm="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-sm="0"] { + max-width: 0%; } + [layout="column"] > [flex-sm="0"] { + max-height: 0%; } + [flex-sm="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-sm="5"] { + max-width: 5%; } + [layout="column"] > [flex-sm="5"] { + max-height: 5%; } + [flex-sm="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-sm="10"] { + max-width: 10%; } + [layout="column"] > [flex-sm="10"] { + max-height: 10%; } + [flex-sm="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-sm="15"] { + max-width: 15%; } + [layout="column"] > [flex-sm="15"] { + max-height: 15%; } + [flex-sm="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-sm="20"] { + max-width: 20%; } + [layout="column"] > [flex-sm="20"] { + max-height: 20%; } + [flex-sm="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-sm="25"] { + max-width: 25%; } + [layout="column"] > [flex-sm="25"] { + max-height: 25%; } + [flex-sm="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-sm="30"] { + max-width: 30%; } + [layout="column"] > [flex-sm="30"] { + max-height: 30%; } + [flex-sm="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-sm="35"] { + max-width: 35%; } + [layout="column"] > [flex-sm="35"] { + max-height: 35%; } + [flex-sm="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-sm="40"] { + max-width: 40%; } + [layout="column"] > [flex-sm="40"] { + max-height: 40%; } + [flex-sm="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-sm="45"] { + max-width: 45%; } + [layout="column"] > [flex-sm="45"] { + max-height: 45%; } + [flex-sm="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-sm="50"] { + max-width: 50%; } + [layout="column"] > [flex-sm="50"] { + max-height: 50%; } + [flex-sm="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-sm="55"] { + max-width: 55%; } + [layout="column"] > [flex-sm="55"] { + max-height: 55%; } + [flex-sm="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-sm="60"] { + max-width: 60%; } + [layout="column"] > [flex-sm="60"] { + max-height: 60%; } + [flex-sm="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-sm="65"] { + max-width: 65%; } + [layout="column"] > [flex-sm="65"] { + max-height: 65%; } + [flex-sm="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-sm="70"] { + max-width: 70%; } + [layout="column"] > [flex-sm="70"] { + max-height: 70%; } + [flex-sm="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-sm="75"] { + max-width: 75%; } + [layout="column"] > [flex-sm="75"] { + max-height: 75%; } + [flex-sm="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-sm="80"] { + max-width: 80%; } + [layout="column"] > [flex-sm="80"] { + max-height: 80%; } + [flex-sm="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-sm="85"] { + max-width: 85%; } + [layout="column"] > [flex-sm="85"] { + max-height: 85%; } + [flex-sm="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-sm="90"] { + max-width: 90%; } + [layout="column"] > [flex-sm="90"] { + max-height: 90%; } + [flex-sm="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-sm="95"] { + max-width: 95%; } + [layout="column"] > [flex-sm="95"] { + max-height: 95%; } + [flex-sm="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-sm="100"] { + max-width: 100%; } + [layout="column"] > [flex-sm="100"] { + max-height: 100%; } + [flex-sm="33"], [flex-sm="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-sm="66"], [flex-sm="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-sm="33"], [layout="row"] > [flex-sm="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-sm="66"], [layout="row"] > [flex-sm="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-sm="33"], [layout="column"] > [flex-sm="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-sm="66"], [layout="column"] > [flex-sm="67"] { + max-height: 66.66%; } } + +@media (min-width: 600px) { + [flex-order-gt-sm="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-sm="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-sm="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-sm="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-sm="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-sm="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-sm="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-sm="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-sm="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-sm="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-sm="center"], [layout-align-gt-sm="center center"], + [layout-align-gt-sm="center start"], + [layout-align-gt-sm="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-sm="end"], [layout-align-gt-sm="end center"], + [layout-align-gt-sm="end start"], + [layout-align-gt-sm="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-sm="space-around"], [layout-align-gt-sm="space-around center"], + [layout-align-gt-sm="space-around start"], + [layout-align-gt-sm="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-sm="space-between"], [layout-align-gt-sm="space-between center"], + [layout-align-gt-sm="space-between start"], + [layout-align-gt-sm="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-sm="center center"], + [layout-align-gt-sm="start center"], + [layout-align-gt-sm="end center"], + [layout-align-gt-sm="space-between center"], + [layout-align-gt-sm="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-sm="center start"], + [layout-align-gt-sm="start start"], + [layout-align-gt-sm="end start"], + [layout-align-gt-sm="space-between start"], + [layout-align-gt-sm="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-sm="center end"], + [layout-align-gt-sm="start end"], + [layout-align-gt-sm="end end"], + [layout-align-gt-sm="space-between end"], + [layout-align-gt-sm="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-sm] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-sm=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-sm=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-gt-sm="5"] { + margin-left: 5%; } + [offset-gt-sm="10"] { + margin-left: 10%; } + [offset-gt-sm="15"] { + margin-left: 15%; } + [offset-gt-sm="20"] { + margin-left: 20%; } + [offset-gt-sm="25"] { + margin-left: 25%; } + [offset-gt-sm="30"] { + margin-left: 30%; } + [offset-gt-sm="35"] { + margin-left: 35%; } + [offset-gt-sm="40"] { + margin-left: 40%; } + [offset-gt-sm="45"] { + margin-left: 45%; } + [offset-gt-sm="50"] { + margin-left: 50%; } + [offset-gt-sm="55"] { + margin-left: 55%; } + [offset-gt-sm="60"] { + margin-left: 60%; } + [offset-gt-sm="65"] { + margin-left: 65%; } + [offset-gt-sm="70"] { + margin-left: 70%; } + [offset-gt-sm="75"] { + margin-left: 75%; } + [offset-gt-sm="80"] { + margin-left: 80%; } + [offset-gt-sm="85"] { + margin-left: 85%; } + [offset-gt-sm="90"] { + margin-left: 90%; } + [offset-gt-sm="95"] { + margin-left: 95%; } + [offset-gt-sm="33"], [offset-gt-sm="34"] { + margin-left: 33.33%; } + [offset-gt-sm="66"], [offset-gt-sm="67"] { + margin-left: 66.66%; } + [flex-gt-sm] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-sm="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-sm="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-sm="0"] { + max-height: 0%; } + [flex-gt-sm="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-sm="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-sm="5"] { + max-height: 5%; } + [flex-gt-sm="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-sm="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-sm="10"] { + max-height: 10%; } + [flex-gt-sm="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-sm="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-sm="15"] { + max-height: 15%; } + [flex-gt-sm="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-sm="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-sm="20"] { + max-height: 20%; } + [flex-gt-sm="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-sm="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-sm="25"] { + max-height: 25%; } + [flex-gt-sm="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-sm="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-sm="30"] { + max-height: 30%; } + [flex-gt-sm="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-sm="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-sm="35"] { + max-height: 35%; } + [flex-gt-sm="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-sm="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-sm="40"] { + max-height: 40%; } + [flex-gt-sm="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-sm="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-sm="45"] { + max-height: 45%; } + [flex-gt-sm="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-sm="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-sm="50"] { + max-height: 50%; } + [flex-gt-sm="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-sm="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-sm="55"] { + max-height: 55%; } + [flex-gt-sm="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-sm="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-sm="60"] { + max-height: 60%; } + [flex-gt-sm="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-sm="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-sm="65"] { + max-height: 65%; } + [flex-gt-sm="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-sm="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-sm="70"] { + max-height: 70%; } + [flex-gt-sm="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-sm="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-sm="75"] { + max-height: 75%; } + [flex-gt-sm="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-sm="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-sm="80"] { + max-height: 80%; } + [flex-gt-sm="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-sm="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-sm="85"] { + max-height: 85%; } + [flex-gt-sm="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-sm="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-sm="90"] { + max-height: 90%; } + [flex-gt-sm="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-sm="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-sm="95"] { + max-height: 95%; } + [flex-gt-sm="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-sm="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-sm="100"] { + max-height: 100%; } + [flex-gt-sm="33"], [flex-gt-sm="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-sm="66"], [flex-gt-sm="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-sm="33"], [layout="row"] > [flex-gt-sm="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-sm="66"], [layout="row"] > [flex-gt-sm="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-sm="33"], [layout="column"] > [flex-gt-sm="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-sm="66"], [layout="column"] > [flex-gt-sm="67"] { + max-height: 66.66%; } } + +@media (min-width: 600px) and (max-width: 1023px) { + [hide]:not([show-gt-sm]):not([show-md]):not([show]), .md-hide:not([show-gt-sm]):not([show-md]):not([show]), [hide-gt-sm]:not([show-gt-sm]):not([show-md]):not([show]) { + display: none; } + [hide-md]:not([show-md]):not([show]) { + display: none; } + [flex-order-md="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-md="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-md="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-md="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-md="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-md="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-md="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-md="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-md="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-md="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-md="center"], [layout-align-md="center center"], + [layout-align-md="center start"], + [layout-align-md="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-md="end"], [layout-align-md="end center"], + [layout-align-md="end start"], + [layout-align-md="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-md="space-around"], [layout-align-md="space-around center"], + [layout-align-md="space-around start"], + [layout-align-md="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-md="space-between"], [layout-align-md="space-between center"], + [layout-align-md="space-between start"], + [layout-align-md="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-md="center center"], + [layout-align-md="start center"], + [layout-align-md="end center"], + [layout-align-md="space-between center"], + [layout-align-md="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-md="center start"], + [layout-align-md="start start"], + [layout-align-md="end start"], + [layout-align-md="space-between start"], + [layout-align-md="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-md="center end"], + [layout-align-md="start end"], + [layout-align-md="end end"], + [layout-align-md="space-between end"], + [layout-align-md="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-md] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-md=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-md=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-md="5"] { + margin-left: 5%; } + [offset-md="10"] { + margin-left: 10%; } + [offset-md="15"] { + margin-left: 15%; } + [offset-md="20"] { + margin-left: 20%; } + [offset-md="25"] { + margin-left: 25%; } + [offset-md="30"] { + margin-left: 30%; } + [offset-md="35"] { + margin-left: 35%; } + [offset-md="40"] { + margin-left: 40%; } + [offset-md="45"] { + margin-left: 45%; } + [offset-md="50"] { + margin-left: 50%; } + [offset-md="55"] { + margin-left: 55%; } + [offset-md="60"] { + margin-left: 60%; } + [offset-md="65"] { + margin-left: 65%; } + [offset-md="70"] { + margin-left: 70%; } + [offset-md="75"] { + margin-left: 75%; } + [offset-md="80"] { + margin-left: 80%; } + [offset-md="85"] { + margin-left: 85%; } + [offset-md="90"] { + margin-left: 90%; } + [offset-md="95"] { + margin-left: 95%; } + [offset-md="33"], [offset-md="34"] { + margin-left: 33.33%; } + [offset-md="66"], [offset-md="67"] { + margin-left: 66.66%; } + [flex-md] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-md="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-md="0"] { + max-width: 0%; } + [layout="column"] > [flex-md="0"] { + max-height: 0%; } + [flex-md="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-md="5"] { + max-width: 5%; } + [layout="column"] > [flex-md="5"] { + max-height: 5%; } + [flex-md="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-md="10"] { + max-width: 10%; } + [layout="column"] > [flex-md="10"] { + max-height: 10%; } + [flex-md="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-md="15"] { + max-width: 15%; } + [layout="column"] > [flex-md="15"] { + max-height: 15%; } + [flex-md="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-md="20"] { + max-width: 20%; } + [layout="column"] > [flex-md="20"] { + max-height: 20%; } + [flex-md="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-md="25"] { + max-width: 25%; } + [layout="column"] > [flex-md="25"] { + max-height: 25%; } + [flex-md="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-md="30"] { + max-width: 30%; } + [layout="column"] > [flex-md="30"] { + max-height: 30%; } + [flex-md="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-md="35"] { + max-width: 35%; } + [layout="column"] > [flex-md="35"] { + max-height: 35%; } + [flex-md="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-md="40"] { + max-width: 40%; } + [layout="column"] > [flex-md="40"] { + max-height: 40%; } + [flex-md="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-md="45"] { + max-width: 45%; } + [layout="column"] > [flex-md="45"] { + max-height: 45%; } + [flex-md="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-md="50"] { + max-width: 50%; } + [layout="column"] > [flex-md="50"] { + max-height: 50%; } + [flex-md="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-md="55"] { + max-width: 55%; } + [layout="column"] > [flex-md="55"] { + max-height: 55%; } + [flex-md="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-md="60"] { + max-width: 60%; } + [layout="column"] > [flex-md="60"] { + max-height: 60%; } + [flex-md="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-md="65"] { + max-width: 65%; } + [layout="column"] > [flex-md="65"] { + max-height: 65%; } + [flex-md="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-md="70"] { + max-width: 70%; } + [layout="column"] > [flex-md="70"] { + max-height: 70%; } + [flex-md="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-md="75"] { + max-width: 75%; } + [layout="column"] > [flex-md="75"] { + max-height: 75%; } + [flex-md="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-md="80"] { + max-width: 80%; } + [layout="column"] > [flex-md="80"] { + max-height: 80%; } + [flex-md="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-md="85"] { + max-width: 85%; } + [layout="column"] > [flex-md="85"] { + max-height: 85%; } + [flex-md="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-md="90"] { + max-width: 90%; } + [layout="column"] > [flex-md="90"] { + max-height: 90%; } + [flex-md="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-md="95"] { + max-width: 95%; } + [layout="column"] > [flex-md="95"] { + max-height: 95%; } + [flex-md="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-md="100"] { + max-width: 100%; } + [layout="column"] > [flex-md="100"] { + max-height: 100%; } + [flex-md="33"], [flex-md="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-md="66"], [flex-md="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-md="33"], [layout="row"] > [flex-md="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-md="66"], [layout="row"] > [flex-md="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-md="33"], [layout="column"] > [flex-md="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-md="66"], [layout="column"] > [flex-md="67"] { + max-height: 66.66%; } } + +@media (min-width: 1024px) { + [flex-order-gt-md="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-md="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-md="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-md="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-md="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-md="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-md="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-md="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-md="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-md="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-md="center"], [layout-align-gt-md="center center"], + [layout-align-gt-md="center start"], + [layout-align-gt-md="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-md="end"], [layout-align-gt-md="end center"], + [layout-align-gt-md="end start"], + [layout-align-gt-md="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-md="space-around"], [layout-align-gt-md="space-around center"], + [layout-align-gt-md="space-around start"], + [layout-align-gt-md="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-md="space-between"], [layout-align-gt-md="space-between center"], + [layout-align-gt-md="space-between start"], + [layout-align-gt-md="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-md="center center"], + [layout-align-gt-md="start center"], + [layout-align-gt-md="end center"], + [layout-align-gt-md="space-between center"], + [layout-align-gt-md="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-md="center start"], + [layout-align-gt-md="start start"], + [layout-align-gt-md="end start"], + [layout-align-gt-md="space-between start"], + [layout-align-gt-md="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-md="center end"], + [layout-align-gt-md="start end"], + [layout-align-gt-md="end end"], + [layout-align-gt-md="space-between end"], + [layout-align-gt-md="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-md] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-md=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-md=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-gt-md="5"] { + margin-left: 5%; } + [offset-gt-md="10"] { + margin-left: 10%; } + [offset-gt-md="15"] { + margin-left: 15%; } + [offset-gt-md="20"] { + margin-left: 20%; } + [offset-gt-md="25"] { + margin-left: 25%; } + [offset-gt-md="30"] { + margin-left: 30%; } + [offset-gt-md="35"] { + margin-left: 35%; } + [offset-gt-md="40"] { + margin-left: 40%; } + [offset-gt-md="45"] { + margin-left: 45%; } + [offset-gt-md="50"] { + margin-left: 50%; } + [offset-gt-md="55"] { + margin-left: 55%; } + [offset-gt-md="60"] { + margin-left: 60%; } + [offset-gt-md="65"] { + margin-left: 65%; } + [offset-gt-md="70"] { + margin-left: 70%; } + [offset-gt-md="75"] { + margin-left: 75%; } + [offset-gt-md="80"] { + margin-left: 80%; } + [offset-gt-md="85"] { + margin-left: 85%; } + [offset-gt-md="90"] { + margin-left: 90%; } + [offset-gt-md="95"] { + margin-left: 95%; } + [offset-gt-md="33"], [offset-gt-md="34"] { + margin-left: 33.33%; } + [offset-gt-md="66"], [offset-gt-md="67"] { + margin-left: 66.66%; } + [flex-gt-md] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-md="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-md="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-md="0"] { + max-height: 0%; } + [flex-gt-md="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-md="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-md="5"] { + max-height: 5%; } + [flex-gt-md="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-md="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-md="10"] { + max-height: 10%; } + [flex-gt-md="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-md="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-md="15"] { + max-height: 15%; } + [flex-gt-md="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-md="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-md="20"] { + max-height: 20%; } + [flex-gt-md="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-md="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-md="25"] { + max-height: 25%; } + [flex-gt-md="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-md="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-md="30"] { + max-height: 30%; } + [flex-gt-md="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-md="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-md="35"] { + max-height: 35%; } + [flex-gt-md="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-md="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-md="40"] { + max-height: 40%; } + [flex-gt-md="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-md="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-md="45"] { + max-height: 45%; } + [flex-gt-md="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-md="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-md="50"] { + max-height: 50%; } + [flex-gt-md="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-md="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-md="55"] { + max-height: 55%; } + [flex-gt-md="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-md="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-md="60"] { + max-height: 60%; } + [flex-gt-md="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-md="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-md="65"] { + max-height: 65%; } + [flex-gt-md="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-md="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-md="70"] { + max-height: 70%; } + [flex-gt-md="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-md="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-md="75"] { + max-height: 75%; } + [flex-gt-md="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-md="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-md="80"] { + max-height: 80%; } + [flex-gt-md="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-md="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-md="85"] { + max-height: 85%; } + [flex-gt-md="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-md="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-md="90"] { + max-height: 90%; } + [flex-gt-md="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-md="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-md="95"] { + max-height: 95%; } + [flex-gt-md="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-md="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-md="100"] { + max-height: 100%; } + [flex-gt-md="33"], [flex-gt-md="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-md="66"], [flex-gt-md="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-md="33"], [layout="row"] > [flex-gt-md="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-md="66"], [layout="row"] > [flex-gt-md="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-md="33"], [layout="column"] > [flex-gt-md="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-md="66"], [layout="column"] > [flex-gt-md="67"] { + max-height: 66.66%; } } + +@media (min-width: 1024px) and (max-width: 1279px) { + [hide]:not([show-gt-sm]):not([show-gt-md]):not([show-lg]):not([show]), .md-hide:not([show-gt-sm]):not([show-gt-md]):not([show-lg]):not([show]), [hide-gt-sm]:not([show-gt-sm]):not([show-gt-md]):not([show-lg]):not([show]), [hide-gt-md]:not([show-gt-sm]):not([show-gt-md]):not([show-lg]):not([show]) { + display: none; } + [hide-lg]:not([show-lg]):not([show]) { + display: none; } + [flex-order-lg="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-lg="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-lg="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-lg="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-lg="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-lg="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-lg="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-lg="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-lg="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-lg="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-lg="center"], [layout-align-lg="center center"], + [layout-align-lg="center start"], + [layout-align-lg="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-lg="end"], [layout-align-lg="end center"], + [layout-align-lg="end start"], + [layout-align-lg="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-lg="space-around"], [layout-align-lg="space-around center"], + [layout-align-lg="space-around start"], + [layout-align-lg="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-lg="space-between"], [layout-align-lg="space-between center"], + [layout-align-lg="space-between start"], + [layout-align-lg="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-lg="center center"], + [layout-align-lg="start center"], + [layout-align-lg="end center"], + [layout-align-lg="space-between center"], + [layout-align-lg="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-lg="center start"], + [layout-align-lg="start start"], + [layout-align-lg="end start"], + [layout-align-lg="space-between start"], + [layout-align-lg="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-lg="center end"], + [layout-align-lg="start end"], + [layout-align-lg="end end"], + [layout-align-lg="space-between end"], + [layout-align-lg="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-lg] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-lg=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-lg=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-lg="5"] { + margin-left: 5%; } + [offset-lg="10"] { + margin-left: 10%; } + [offset-lg="15"] { + margin-left: 15%; } + [offset-lg="20"] { + margin-left: 20%; } + [offset-lg="25"] { + margin-left: 25%; } + [offset-lg="30"] { + margin-left: 30%; } + [offset-lg="35"] { + margin-left: 35%; } + [offset-lg="40"] { + margin-left: 40%; } + [offset-lg="45"] { + margin-left: 45%; } + [offset-lg="50"] { + margin-left: 50%; } + [offset-lg="55"] { + margin-left: 55%; } + [offset-lg="60"] { + margin-left: 60%; } + [offset-lg="65"] { + margin-left: 65%; } + [offset-lg="70"] { + margin-left: 70%; } + [offset-lg="75"] { + margin-left: 75%; } + [offset-lg="80"] { + margin-left: 80%; } + [offset-lg="85"] { + margin-left: 85%; } + [offset-lg="90"] { + margin-left: 90%; } + [offset-lg="95"] { + margin-left: 95%; } + [offset-lg="33"], [offset-lg="34"] { + margin-left: 33.33%; } + [offset-lg="66"], [offset-lg="67"] { + margin-left: 66.66%; } + [flex-lg] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-lg="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-lg="0"] { + max-width: 0%; } + [layout="column"] > [flex-lg="0"] { + max-height: 0%; } + [flex-lg="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-lg="5"] { + max-width: 5%; } + [layout="column"] > [flex-lg="5"] { + max-height: 5%; } + [flex-lg="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-lg="10"] { + max-width: 10%; } + [layout="column"] > [flex-lg="10"] { + max-height: 10%; } + [flex-lg="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-lg="15"] { + max-width: 15%; } + [layout="column"] > [flex-lg="15"] { + max-height: 15%; } + [flex-lg="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-lg="20"] { + max-width: 20%; } + [layout="column"] > [flex-lg="20"] { + max-height: 20%; } + [flex-lg="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-lg="25"] { + max-width: 25%; } + [layout="column"] > [flex-lg="25"] { + max-height: 25%; } + [flex-lg="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-lg="30"] { + max-width: 30%; } + [layout="column"] > [flex-lg="30"] { + max-height: 30%; } + [flex-lg="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-lg="35"] { + max-width: 35%; } + [layout="column"] > [flex-lg="35"] { + max-height: 35%; } + [flex-lg="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-lg="40"] { + max-width: 40%; } + [layout="column"] > [flex-lg="40"] { + max-height: 40%; } + [flex-lg="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-lg="45"] { + max-width: 45%; } + [layout="column"] > [flex-lg="45"] { + max-height: 45%; } + [flex-lg="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-lg="50"] { + max-width: 50%; } + [layout="column"] > [flex-lg="50"] { + max-height: 50%; } + [flex-lg="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-lg="55"] { + max-width: 55%; } + [layout="column"] > [flex-lg="55"] { + max-height: 55%; } + [flex-lg="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-lg="60"] { + max-width: 60%; } + [layout="column"] > [flex-lg="60"] { + max-height: 60%; } + [flex-lg="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-lg="65"] { + max-width: 65%; } + [layout="column"] > [flex-lg="65"] { + max-height: 65%; } + [flex-lg="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-lg="70"] { + max-width: 70%; } + [layout="column"] > [flex-lg="70"] { + max-height: 70%; } + [flex-lg="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-lg="75"] { + max-width: 75%; } + [layout="column"] > [flex-lg="75"] { + max-height: 75%; } + [flex-lg="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-lg="80"] { + max-width: 80%; } + [layout="column"] > [flex-lg="80"] { + max-height: 80%; } + [flex-lg="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-lg="85"] { + max-width: 85%; } + [layout="column"] > [flex-lg="85"] { + max-height: 85%; } + [flex-lg="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-lg="90"] { + max-width: 90%; } + [layout="column"] > [flex-lg="90"] { + max-height: 90%; } + [flex-lg="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-lg="95"] { + max-width: 95%; } + [layout="column"] > [flex-lg="95"] { + max-height: 95%; } + [flex-lg="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-lg="100"] { + max-width: 100%; } + [layout="column"] > [flex-lg="100"] { + max-height: 100%; } + [flex-lg="33"], [flex-lg="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-lg="66"], [flex-lg="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-lg="33"], [layout="row"] > [flex-lg="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-lg="66"], [layout="row"] > [flex-lg="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-lg="33"], [layout="column"] > [flex-lg="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-lg="66"], [layout="column"] > [flex-lg="67"] { + max-height: 66.66%; } } + +@media (min-width: 1280px) { + [hide-gt-sm]:not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show]), [hide-gt-md]:not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show]), [hide-gt-lg]:not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show]), [hide]:not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show]), .md-hide:not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show]) { + display: none; } + [flex-order-gt-lg="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-lg="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-lg="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-lg="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-lg="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-lg="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-lg="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-lg="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-lg="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-lg="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-lg="center"], [layout-align-gt-lg="center center"], + [layout-align-gt-lg="center start"], + [layout-align-gt-lg="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-lg="end"], [layout-align-gt-lg="end center"], + [layout-align-gt-lg="end start"], + [layout-align-gt-lg="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-lg="space-around"], [layout-align-gt-lg="space-around center"], + [layout-align-gt-lg="space-around start"], + [layout-align-gt-lg="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-lg="space-between"], [layout-align-gt-lg="space-between center"], + [layout-align-gt-lg="space-between start"], + [layout-align-gt-lg="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-lg="center center"], + [layout-align-gt-lg="start center"], + [layout-align-gt-lg="end center"], + [layout-align-gt-lg="space-between center"], + [layout-align-gt-lg="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-lg="center start"], + [layout-align-gt-lg="start start"], + [layout-align-gt-lg="end start"], + [layout-align-gt-lg="space-between start"], + [layout-align-gt-lg="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-lg="center end"], + [layout-align-gt-lg="start end"], + [layout-align-gt-lg="end end"], + [layout-align-gt-lg="space-between end"], + [layout-align-gt-lg="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-lg] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-lg=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-lg=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [offset-gt-lg="5"] { + margin-left: 5%; } + [offset-gt-lg="10"] { + margin-left: 10%; } + [offset-gt-lg="15"] { + margin-left: 15%; } + [offset-gt-lg="20"] { + margin-left: 20%; } + [offset-gt-lg="25"] { + margin-left: 25%; } + [offset-gt-lg="30"] { + margin-left: 30%; } + [offset-gt-lg="35"] { + margin-left: 35%; } + [offset-gt-lg="40"] { + margin-left: 40%; } + [offset-gt-lg="45"] { + margin-left: 45%; } + [offset-gt-lg="50"] { + margin-left: 50%; } + [offset-gt-lg="55"] { + margin-left: 55%; } + [offset-gt-lg="60"] { + margin-left: 60%; } + [offset-gt-lg="65"] { + margin-left: 65%; } + [offset-gt-lg="70"] { + margin-left: 70%; } + [offset-gt-lg="75"] { + margin-left: 75%; } + [offset-gt-lg="80"] { + margin-left: 80%; } + [offset-gt-lg="85"] { + margin-left: 85%; } + [offset-gt-lg="90"] { + margin-left: 90%; } + [offset-gt-lg="95"] { + margin-left: 95%; } + [offset-gt-lg="33"], [offset-gt-lg="34"] { + margin-left: 33.33%; } + [offset-gt-lg="66"], [offset-gt-lg="67"] { + margin-left: 66.66%; } + [flex-gt-lg] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-lg="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-lg="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-lg="0"] { + max-height: 0%; } + [flex-gt-lg="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-lg="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-lg="5"] { + max-height: 5%; } + [flex-gt-lg="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-lg="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-lg="10"] { + max-height: 10%; } + [flex-gt-lg="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-lg="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-lg="15"] { + max-height: 15%; } + [flex-gt-lg="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-lg="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-lg="20"] { + max-height: 20%; } + [flex-gt-lg="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-lg="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-lg="25"] { + max-height: 25%; } + [flex-gt-lg="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-lg="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-lg="30"] { + max-height: 30%; } + [flex-gt-lg="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-lg="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-lg="35"] { + max-height: 35%; } + [flex-gt-lg="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-lg="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-lg="40"] { + max-height: 40%; } + [flex-gt-lg="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-lg="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-lg="45"] { + max-height: 45%; } + [flex-gt-lg="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-lg="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-lg="50"] { + max-height: 50%; } + [flex-gt-lg="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-lg="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-lg="55"] { + max-height: 55%; } + [flex-gt-lg="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-lg="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-lg="60"] { + max-height: 60%; } + [flex-gt-lg="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-lg="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-lg="65"] { + max-height: 65%; } + [flex-gt-lg="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-lg="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-lg="70"] { + max-height: 70%; } + [flex-gt-lg="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-lg="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-lg="75"] { + max-height: 75%; } + [flex-gt-lg="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-lg="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-lg="80"] { + max-height: 80%; } + [flex-gt-lg="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-lg="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-lg="85"] { + max-height: 85%; } + [flex-gt-lg="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-lg="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-lg="90"] { + max-height: 90%; } + [flex-gt-lg="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-lg="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-lg="95"] { + max-height: 95%; } + [flex-gt-lg="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-lg="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-lg="100"] { + max-height: 100%; } + [flex-gt-lg="33"], [flex-gt-lg="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-lg="66"], [flex-gt-lg="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-lg="33"], [layout="row"] > [flex-gt-lg="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-lg="66"], [layout="row"] > [flex-gt-lg="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-lg="33"], [layout="column"] > [flex-gt-lg="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-lg="66"], [layout="column"] > [flex-gt-lg="67"] { + max-height: 66.66%; } } + +/** + * Overrides angular-material sources + * There are some redundancies (thanks to breakpoint-slicer) that can't + * be easily overriden and are interfeering + * + */ +/* Sizes: + 0 <= size < 600 Phone + 600 <= size < 960 Tablet + 960 <= size < 1200 Tablet-Landscape + 1200 <= size PC +*/ +@media (min-width: 1) and (max-width: 600px) { + .hide-sm:not(.show-sm):not(.show), .hide:not(.show-sm):not(.show) { + display: none !important; } + [flex-order-sm="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-sm="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-sm="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-sm="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-sm="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-sm="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-sm="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-sm="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-sm="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-sm="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-sm="center"], [layout-align-sm="center center"], + [layout-align-sm="center start"], + [layout-align-sm="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-sm="end"], [layout-align-sm="end center"], + [layout-align-sm="end start"], + [layout-align-sm="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-sm="space-around"], [layout-align-sm="space-around center"], + [layout-align-sm="space-around start"], + [layout-align-sm="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-sm="space-between"], [layout-align-sm="space-between center"], + [layout-align-sm="space-between start"], + [layout-align-sm="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-sm="center center"], + [layout-align-sm="start center"], + [layout-align-sm="end center"], + [layout-align-sm="space-between center"], + [layout-align-sm="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-sm="center start"], + [layout-align-sm="start start"], + [layout-align-sm="end start"], + [layout-align-sm="space-between start"], + [layout-align-sm="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-sm="center end"], + [layout-align-sm="start end"], + [layout-align-sm="end end"], + [layout-align-sm="space-between end"], + [layout-align-sm="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-sm] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-sm=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-sm=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-sm] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-sm="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-sm="0"] { + max-width: 0%; } + [layout="column"] > [flex-sm="0"] { + max-height: 0%; } + [flex-sm="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-sm="5"] { + max-width: 5%; } + [layout="column"] > [flex-sm="5"] { + max-height: 5%; } + [flex-sm="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-sm="10"] { + max-width: 10%; } + [layout="column"] > [flex-sm="10"] { + max-height: 10%; } + [flex-sm="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-sm="15"] { + max-width: 15%; } + [layout="column"] > [flex-sm="15"] { + max-height: 15%; } + [flex-sm="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-sm="20"] { + max-width: 20%; } + [layout="column"] > [flex-sm="20"] { + max-height: 20%; } + [flex-sm="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-sm="25"] { + max-width: 25%; } + [layout="column"] > [flex-sm="25"] { + max-height: 25%; } + [flex-sm="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-sm="30"] { + max-width: 30%; } + [layout="column"] > [flex-sm="30"] { + max-height: 30%; } + [flex-sm="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-sm="35"] { + max-width: 35%; } + [layout="column"] > [flex-sm="35"] { + max-height: 35%; } + [flex-sm="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-sm="40"] { + max-width: 40%; } + [layout="column"] > [flex-sm="40"] { + max-height: 40%; } + [flex-sm="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-sm="45"] { + max-width: 45%; } + [layout="column"] > [flex-sm="45"] { + max-height: 45%; } + [flex-sm="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-sm="50"] { + max-width: 50%; } + [layout="column"] > [flex-sm="50"] { + max-height: 50%; } + [flex-sm="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-sm="55"] { + max-width: 55%; } + [layout="column"] > [flex-sm="55"] { + max-height: 55%; } + [flex-sm="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-sm="60"] { + max-width: 60%; } + [layout="column"] > [flex-sm="60"] { + max-height: 60%; } + [flex-sm="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-sm="65"] { + max-width: 65%; } + [layout="column"] > [flex-sm="65"] { + max-height: 65%; } + [flex-sm="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-sm="70"] { + max-width: 70%; } + [layout="column"] > [flex-sm="70"] { + max-height: 70%; } + [flex-sm="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-sm="75"] { + max-width: 75%; } + [layout="column"] > [flex-sm="75"] { + max-height: 75%; } + [flex-sm="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-sm="80"] { + max-width: 80%; } + [layout="column"] > [flex-sm="80"] { + max-height: 80%; } + [flex-sm="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-sm="85"] { + max-width: 85%; } + [layout="column"] > [flex-sm="85"] { + max-height: 85%; } + [flex-sm="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-sm="90"] { + max-width: 90%; } + [layout="column"] > [flex-sm="90"] { + max-height: 90%; } + [flex-sm="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-sm="95"] { + max-width: 95%; } + [layout="column"] > [flex-sm="95"] { + max-height: 95%; } + [flex-sm="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-sm="100"] { + max-width: 100%; } + [layout="column"] > [flex-sm="100"] { + max-height: 100%; } + [flex-sm="33"], [flex-sm="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-sm="66"], [flex-sm="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-sm="33"], [layout="row"] > [flex-sm="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-sm="66"], [layout="row"] > [flex-sm="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-sm="33"], [layout="column"] > [flex-sm="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-sm="66"], [layout="column"] > [flex-sm="67"] { + max-height: 66.66%; } } + +@media (min-width: 601px) { + .show-sm { + display: none !important; } } + +@media (min-width: 601px) { + [flex-order-gt-sm="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-sm="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-sm="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-sm="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-sm="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-sm="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-sm="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-sm="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-sm="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-sm="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-sm="center"], [layout-align-gt-sm="center center"], + [layout-align-gt-sm="center start"], + [layout-align-gt-sm="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-sm="end"], [layout-align-gt-sm="end center"], + [layout-align-gt-sm="end start"], + [layout-align-gt-sm="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-sm="space-around"], [layout-align-gt-sm="space-around center"], + [layout-align-gt-sm="space-around start"], + [layout-align-gt-sm="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-sm="space-between"], [layout-align-gt-sm="space-between center"], + [layout-align-gt-sm="space-between start"], + [layout-align-gt-sm="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-sm="center center"], + [layout-align-gt-sm="start center"], + [layout-align-gt-sm="end center"], + [layout-align-gt-sm="space-between center"], + [layout-align-gt-sm="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-sm="center start"], + [layout-align-gt-sm="start start"], + [layout-align-gt-sm="end start"], + [layout-align-gt-sm="space-between start"], + [layout-align-gt-sm="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-sm="center end"], + [layout-align-gt-sm="start end"], + [layout-align-gt-sm="end end"], + [layout-align-gt-sm="space-between end"], + [layout-align-gt-sm="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-sm] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-sm=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-sm=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-gt-sm] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-sm="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-sm="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-sm="0"] { + max-height: 0%; } + [flex-gt-sm="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-sm="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-sm="5"] { + max-height: 5%; } + [flex-gt-sm="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-sm="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-sm="10"] { + max-height: 10%; } + [flex-gt-sm="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-sm="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-sm="15"] { + max-height: 15%; } + [flex-gt-sm="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-sm="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-sm="20"] { + max-height: 20%; } + [flex-gt-sm="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-sm="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-sm="25"] { + max-height: 25%; } + [flex-gt-sm="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-sm="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-sm="30"] { + max-height: 30%; } + [flex-gt-sm="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-sm="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-sm="35"] { + max-height: 35%; } + [flex-gt-sm="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-sm="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-sm="40"] { + max-height: 40%; } + [flex-gt-sm="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-sm="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-sm="45"] { + max-height: 45%; } + [flex-gt-sm="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-sm="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-sm="50"] { + max-height: 50%; } + [flex-gt-sm="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-sm="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-sm="55"] { + max-height: 55%; } + [flex-gt-sm="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-sm="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-sm="60"] { + max-height: 60%; } + [flex-gt-sm="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-sm="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-sm="65"] { + max-height: 65%; } + [flex-gt-sm="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-sm="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-sm="70"] { + max-height: 70%; } + [flex-gt-sm="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-sm="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-sm="75"] { + max-height: 75%; } + [flex-gt-sm="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-sm="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-sm="80"] { + max-height: 80%; } + [flex-gt-sm="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-sm="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-sm="85"] { + max-height: 85%; } + [flex-gt-sm="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-sm="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-sm="90"] { + max-height: 90%; } + [flex-gt-sm="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-sm="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-sm="95"] { + max-height: 95%; } + [flex-gt-sm="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-sm="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-sm="100"] { + max-height: 100%; } + [flex-gt-sm="33"], [flex-gt-sm="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-sm="66"], [flex-gt-sm="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-sm="33"], [layout="row"] > [flex-gt-sm="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-sm="66"], [layout="row"] > [flex-gt-sm="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-sm="33"], [layout="column"] > [flex-gt-sm="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-sm="66"], [layout="column"] > [flex-gt-sm="67"] { + max-height: 66.66%; } } + +@media (min-width: 601px) and (max-width: 1024px) { + .hide:not(.show-gt-sm):not(.show-md):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-md):not(.show) { + display: none; } + .hide-md:not(.show-md):not(.show) { + display: none; } + [flex-order-md="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-md="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-md="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-md="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-md="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-md="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-md="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-md="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-md="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-md="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-md="center"], [layout-align-md="center center"], + [layout-align-md="center start"], + [layout-align-md="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-md="end"], [layout-align-md="end center"], + [layout-align-md="end start"], + [layout-align-md="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-md="space-around"], [layout-align-md="space-around center"], + [layout-align-md="space-around start"], + [layout-align-md="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-md="space-between"], [layout-align-md="space-between center"], + [layout-align-md="space-between start"], + [layout-align-md="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-md="center center"], + [layout-align-md="start center"], + [layout-align-md="end center"], + [layout-align-md="space-between center"], + [layout-align-md="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-md="center start"], + [layout-align-md="start start"], + [layout-align-md="end start"], + [layout-align-md="space-between start"], + [layout-align-md="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-md="center end"], + [layout-align-md="start end"], + [layout-align-md="end end"], + [layout-align-md="space-between end"], + [layout-align-md="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-md] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-md=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-md=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-md] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-md="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-md="0"] { + max-width: 0%; } + [layout="column"] > [flex-md="0"] { + max-height: 0%; } + [flex-md="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-md="5"] { + max-width: 5%; } + [layout="column"] > [flex-md="5"] { + max-height: 5%; } + [flex-md="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-md="10"] { + max-width: 10%; } + [layout="column"] > [flex-md="10"] { + max-height: 10%; } + [flex-md="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-md="15"] { + max-width: 15%; } + [layout="column"] > [flex-md="15"] { + max-height: 15%; } + [flex-md="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-md="20"] { + max-width: 20%; } + [layout="column"] > [flex-md="20"] { + max-height: 20%; } + [flex-md="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-md="25"] { + max-width: 25%; } + [layout="column"] > [flex-md="25"] { + max-height: 25%; } + [flex-md="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-md="30"] { + max-width: 30%; } + [layout="column"] > [flex-md="30"] { + max-height: 30%; } + [flex-md="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-md="35"] { + max-width: 35%; } + [layout="column"] > [flex-md="35"] { + max-height: 35%; } + [flex-md="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-md="40"] { + max-width: 40%; } + [layout="column"] > [flex-md="40"] { + max-height: 40%; } + [flex-md="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-md="45"] { + max-width: 45%; } + [layout="column"] > [flex-md="45"] { + max-height: 45%; } + [flex-md="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-md="50"] { + max-width: 50%; } + [layout="column"] > [flex-md="50"] { + max-height: 50%; } + [flex-md="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-md="55"] { + max-width: 55%; } + [layout="column"] > [flex-md="55"] { + max-height: 55%; } + [flex-md="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-md="60"] { + max-width: 60%; } + [layout="column"] > [flex-md="60"] { + max-height: 60%; } + [flex-md="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-md="65"] { + max-width: 65%; } + [layout="column"] > [flex-md="65"] { + max-height: 65%; } + [flex-md="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-md="70"] { + max-width: 70%; } + [layout="column"] > [flex-md="70"] { + max-height: 70%; } + [flex-md="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-md="75"] { + max-width: 75%; } + [layout="column"] > [flex-md="75"] { + max-height: 75%; } + [flex-md="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-md="80"] { + max-width: 80%; } + [layout="column"] > [flex-md="80"] { + max-height: 80%; } + [flex-md="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-md="85"] { + max-width: 85%; } + [layout="column"] > [flex-md="85"] { + max-height: 85%; } + [flex-md="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-md="90"] { + max-width: 90%; } + [layout="column"] > [flex-md="90"] { + max-height: 90%; } + [flex-md="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-md="95"] { + max-width: 95%; } + [layout="column"] > [flex-md="95"] { + max-height: 95%; } + [flex-md="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-md="100"] { + max-width: 100%; } + [layout="column"] > [flex-md="100"] { + max-height: 100%; } + [flex-md="33"], [flex-md="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-md="66"], [flex-md="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-md="33"], [layout="row"] > [flex-md="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-md="66"], [layout="row"] > [flex-md="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-md="33"], [layout="column"] > [flex-md="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-md="66"], [layout="column"] > [flex-md="67"] { + max-height: 66.66%; } } + +@media (min-width: 1025px) { + [flex-order-gt-md="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-md="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-md="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-md="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-md="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-md="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-md="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-md="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-md="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-md="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-md="center"], [layout-align-gt-md="center center"], + [layout-align-gt-md="center start"], + [layout-align-gt-md="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-md="end"], [layout-align-gt-md="end center"], + [layout-align-gt-md="end start"], + [layout-align-gt-md="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-md="space-around"], [layout-align-gt-md="space-around center"], + [layout-align-gt-md="space-around start"], + [layout-align-gt-md="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-md="space-between"], [layout-align-gt-md="space-between center"], + [layout-align-gt-md="space-between start"], + [layout-align-gt-md="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-md="center center"], + [layout-align-gt-md="start center"], + [layout-align-gt-md="end center"], + [layout-align-gt-md="space-between center"], + [layout-align-gt-md="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-md="center start"], + [layout-align-gt-md="start start"], + [layout-align-gt-md="end start"], + [layout-align-gt-md="space-between start"], + [layout-align-gt-md="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-md="center end"], + [layout-align-gt-md="start end"], + [layout-align-gt-md="end end"], + [layout-align-gt-md="space-between end"], + [layout-align-gt-md="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-md] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-md=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-md=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-gt-md] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-md="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-md="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-md="0"] { + max-height: 0%; } + [flex-gt-md="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-md="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-md="5"] { + max-height: 5%; } + [flex-gt-md="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-md="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-md="10"] { + max-height: 10%; } + [flex-gt-md="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-md="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-md="15"] { + max-height: 15%; } + [flex-gt-md="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-md="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-md="20"] { + max-height: 20%; } + [flex-gt-md="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-md="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-md="25"] { + max-height: 25%; } + [flex-gt-md="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-md="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-md="30"] { + max-height: 30%; } + [flex-gt-md="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-md="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-md="35"] { + max-height: 35%; } + [flex-gt-md="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-md="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-md="40"] { + max-height: 40%; } + [flex-gt-md="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-md="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-md="45"] { + max-height: 45%; } + [flex-gt-md="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-md="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-md="50"] { + max-height: 50%; } + [flex-gt-md="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-md="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-md="55"] { + max-height: 55%; } + [flex-gt-md="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-md="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-md="60"] { + max-height: 60%; } + [flex-gt-md="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-md="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-md="65"] { + max-height: 65%; } + [flex-gt-md="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-md="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-md="70"] { + max-height: 70%; } + [flex-gt-md="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-md="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-md="75"] { + max-height: 75%; } + [flex-gt-md="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-md="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-md="80"] { + max-height: 80%; } + [flex-gt-md="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-md="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-md="85"] { + max-height: 85%; } + [flex-gt-md="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-md="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-md="90"] { + max-height: 90%; } + [flex-gt-md="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-md="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-md="95"] { + max-height: 95%; } + [flex-gt-md="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-md="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-md="100"] { + max-height: 100%; } + [flex-gt-md="33"], [flex-gt-md="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-md="66"], [flex-gt-md="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-md="33"], [layout="row"] > [flex-gt-md="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-md="66"], [layout="row"] > [flex-gt-md="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-md="33"], [layout="column"] > [flex-gt-md="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-md="66"], [layout="column"] > [flex-gt-md="67"] { + max-height: 66.66%; } + [flex-order-lg="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-lg="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-lg="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-lg="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-lg="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-lg="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-lg="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-lg="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-lg="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-lg="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-lg="center"], [layout-align-lg="center center"], + [layout-align-lg="center start"], + [layout-align-lg="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-lg="end"], [layout-align-lg="end center"], + [layout-align-lg="end start"], + [layout-align-lg="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-lg="space-around"], [layout-align-lg="space-around center"], + [layout-align-lg="space-around start"], + [layout-align-lg="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-lg="space-between"], [layout-align-lg="space-between center"], + [layout-align-lg="space-between start"], + [layout-align-lg="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-lg="center center"], + [layout-align-lg="start center"], + [layout-align-lg="end center"], + [layout-align-lg="space-between center"], + [layout-align-lg="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-lg="center start"], + [layout-align-lg="start start"], + [layout-align-lg="end start"], + [layout-align-lg="space-between start"], + [layout-align-lg="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-lg="center end"], + [layout-align-lg="start end"], + [layout-align-lg="end end"], + [layout-align-lg="space-between end"], + [layout-align-lg="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-lg] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-lg=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-lg=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-lg] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-lg="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-lg="0"] { + max-width: 0%; } + [layout="column"] > [flex-lg="0"] { + max-height: 0%; } + [flex-lg="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-lg="5"] { + max-width: 5%; } + [layout="column"] > [flex-lg="5"] { + max-height: 5%; } + [flex-lg="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-lg="10"] { + max-width: 10%; } + [layout="column"] > [flex-lg="10"] { + max-height: 10%; } + [flex-lg="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-lg="15"] { + max-width: 15%; } + [layout="column"] > [flex-lg="15"] { + max-height: 15%; } + [flex-lg="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-lg="20"] { + max-width: 20%; } + [layout="column"] > [flex-lg="20"] { + max-height: 20%; } + [flex-lg="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-lg="25"] { + max-width: 25%; } + [layout="column"] > [flex-lg="25"] { + max-height: 25%; } + [flex-lg="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-lg="30"] { + max-width: 30%; } + [layout="column"] > [flex-lg="30"] { + max-height: 30%; } + [flex-lg="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-lg="35"] { + max-width: 35%; } + [layout="column"] > [flex-lg="35"] { + max-height: 35%; } + [flex-lg="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-lg="40"] { + max-width: 40%; } + [layout="column"] > [flex-lg="40"] { + max-height: 40%; } + [flex-lg="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-lg="45"] { + max-width: 45%; } + [layout="column"] > [flex-lg="45"] { + max-height: 45%; } + [flex-lg="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-lg="50"] { + max-width: 50%; } + [layout="column"] > [flex-lg="50"] { + max-height: 50%; } + [flex-lg="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-lg="55"] { + max-width: 55%; } + [layout="column"] > [flex-lg="55"] { + max-height: 55%; } + [flex-lg="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-lg="60"] { + max-width: 60%; } + [layout="column"] > [flex-lg="60"] { + max-height: 60%; } + [flex-lg="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-lg="65"] { + max-width: 65%; } + [layout="column"] > [flex-lg="65"] { + max-height: 65%; } + [flex-lg="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-lg="70"] { + max-width: 70%; } + [layout="column"] > [flex-lg="70"] { + max-height: 70%; } + [flex-lg="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-lg="75"] { + max-width: 75%; } + [layout="column"] > [flex-lg="75"] { + max-height: 75%; } + [flex-lg="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-lg="80"] { + max-width: 80%; } + [layout="column"] > [flex-lg="80"] { + max-height: 80%; } + [flex-lg="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-lg="85"] { + max-width: 85%; } + [layout="column"] > [flex-lg="85"] { + max-height: 85%; } + [flex-lg="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-lg="90"] { + max-width: 90%; } + [layout="column"] > [flex-lg="90"] { + max-height: 90%; } + [flex-lg="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-lg="95"] { + max-width: 95%; } + [layout="column"] > [flex-lg="95"] { + max-height: 95%; } + [flex-lg="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-lg="100"] { + max-width: 100%; } + [layout="column"] > [flex-lg="100"] { + max-height: 100%; } + [flex-lg="33"], [flex-lg="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-lg="66"], [flex-lg="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-lg="33"], [layout="row"] > [flex-lg="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-lg="66"], [layout="row"] > [flex-lg="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-lg="33"], [layout="column"] > [flex-lg="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-lg="66"], [layout="column"] > [flex-lg="67"] { + max-height: 66.66%; } } + +@media (min-width: 1025px) { + .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show) { + display: none; } + .hide-lg:not(.show-lg):not(.show) { + display: none; } } + +@media (min-width: 1281px) { + .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-lg:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show) { + display: none; } + [flex-order-gt-lg="0"] { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + [flex-order-gt-lg="1"] { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + [flex-order-gt-lg="2"] { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + [flex-order-gt-lg="3"] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + [flex-order-gt-lg="4"] { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + [flex-order-gt-lg="5"] { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + [flex-order-gt-lg="6"] { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + [flex-order-gt-lg="7"] { + -webkit-box-ordinal-group: 8; + -webkit-order: 7; + -ms-flex-order: 7; + order: 7; } + [flex-order-gt-lg="8"] { + -webkit-box-ordinal-group: 9; + -webkit-order: 8; + -ms-flex-order: 8; + order: 8; } + [flex-order-gt-lg="9"] { + -webkit-box-ordinal-group: 10; + -webkit-order: 9; + -ms-flex-order: 9; + order: 9; } + [layout-align-gt-lg="center"], [layout-align-gt-lg="center center"], + [layout-align-gt-lg="center start"], + [layout-align-gt-lg="center end"] { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + [layout-align-gt-lg="end"], [layout-align-gt-lg="end center"], + [layout-align-gt-lg="end start"], + [layout-align-gt-lg="end end"] { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + [layout-align-gt-lg="space-around"], [layout-align-gt-lg="space-around center"], + [layout-align-gt-lg="space-around start"], + [layout-align-gt-lg="space-around end"] { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + [layout-align-gt-lg="space-between"], [layout-align-gt-lg="space-between center"], + [layout-align-gt-lg="space-between start"], + [layout-align-gt-lg="space-between end"] { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + [layout-align-gt-lg="center center"], + [layout-align-gt-lg="start center"], + [layout-align-gt-lg="end center"], + [layout-align-gt-lg="space-between center"], + [layout-align-gt-lg="space-around center"] { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + [layout-align-gt-lg="center start"], + [layout-align-gt-lg="start start"], + [layout-align-gt-lg="end start"], + [layout-align-gt-lg="space-between start"], + [layout-align-gt-lg="space-around start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + [layout-align-gt-lg="center end"], + [layout-align-gt-lg="start end"], + [layout-align-gt-lg="end end"], + [layout-align-gt-lg="space-between end"], + [layout-align-gt-lg="space-around end"] { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + [layout-gt-lg] { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; } + [layout-gt-lg=column] { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + [layout-gt-lg=row] { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + [flex-gt-lg] { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + [flex-gt-lg="0"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 0%; + -ms-flex: 0 0 0%; + flex: 0 0 0%; } + [layout="row"] > [flex-gt-lg="0"] { + max-width: 0%; } + [layout="column"] > [flex-gt-lg="0"] { + max-height: 0%; } + [flex-gt-lg="5"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 5%; + -ms-flex: 0 0 5%; + flex: 0 0 5%; } + [layout="row"] > [flex-gt-lg="5"] { + max-width: 5%; } + [layout="column"] > [flex-gt-lg="5"] { + max-height: 5%; } + [flex-gt-lg="10"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 10%; + -ms-flex: 0 0 10%; + flex: 0 0 10%; } + [layout="row"] > [flex-gt-lg="10"] { + max-width: 10%; } + [layout="column"] > [flex-gt-lg="10"] { + max-height: 10%; } + [flex-gt-lg="15"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 15%; + -ms-flex: 0 0 15%; + flex: 0 0 15%; } + [layout="row"] > [flex-gt-lg="15"] { + max-width: 15%; } + [layout="column"] > [flex-gt-lg="15"] { + max-height: 15%; } + [flex-gt-lg="20"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 20%; + -ms-flex: 0 0 20%; + flex: 0 0 20%; } + [layout="row"] > [flex-gt-lg="20"] { + max-width: 20%; } + [layout="column"] > [flex-gt-lg="20"] { + max-height: 20%; } + [flex-gt-lg="25"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; } + [layout="row"] > [flex-gt-lg="25"] { + max-width: 25%; } + [layout="column"] > [flex-gt-lg="25"] { + max-height: 25%; } + [flex-gt-lg="30"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 30%; + -ms-flex: 0 0 30%; + flex: 0 0 30%; } + [layout="row"] > [flex-gt-lg="30"] { + max-width: 30%; } + [layout="column"] > [flex-gt-lg="30"] { + max-height: 30%; } + [flex-gt-lg="35"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -ms-flex: 0 0 35%; + flex: 0 0 35%; } + [layout="row"] > [flex-gt-lg="35"] { + max-width: 35%; } + [layout="column"] > [flex-gt-lg="35"] { + max-height: 35%; } + [flex-gt-lg="40"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 40%; + -ms-flex: 0 0 40%; + flex: 0 0 40%; } + [layout="row"] > [flex-gt-lg="40"] { + max-width: 40%; } + [layout="column"] > [flex-gt-lg="40"] { + max-height: 40%; } + [flex-gt-lg="45"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 45%; + -ms-flex: 0 0 45%; + flex: 0 0 45%; } + [layout="row"] > [flex-gt-lg="45"] { + max-width: 45%; } + [layout="column"] > [flex-gt-lg="45"] { + max-height: 45%; } + [flex-gt-lg="50"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; } + [layout="row"] > [flex-gt-lg="50"] { + max-width: 50%; } + [layout="column"] > [flex-gt-lg="50"] { + max-height: 50%; } + [flex-gt-lg="55"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 55%; + -ms-flex: 0 0 55%; + flex: 0 0 55%; } + [layout="row"] > [flex-gt-lg="55"] { + max-width: 55%; } + [layout="column"] > [flex-gt-lg="55"] { + max-height: 55%; } + [flex-gt-lg="60"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 60%; + -ms-flex: 0 0 60%; + flex: 0 0 60%; } + [layout="row"] > [flex-gt-lg="60"] { + max-width: 60%; } + [layout="column"] > [flex-gt-lg="60"] { + max-height: 60%; } + [flex-gt-lg="65"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -ms-flex: 0 0 65%; + flex: 0 0 65%; } + [layout="row"] > [flex-gt-lg="65"] { + max-width: 65%; } + [layout="column"] > [flex-gt-lg="65"] { + max-height: 65%; } + [flex-gt-lg="70"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 70%; + -ms-flex: 0 0 70%; + flex: 0 0 70%; } + [layout="row"] > [flex-gt-lg="70"] { + max-width: 70%; } + [layout="column"] > [flex-gt-lg="70"] { + max-height: 70%; } + [flex-gt-lg="75"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; } + [layout="row"] > [flex-gt-lg="75"] { + max-width: 75%; } + [layout="column"] > [flex-gt-lg="75"] { + max-height: 75%; } + [flex-gt-lg="80"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 80%; + -ms-flex: 0 0 80%; + flex: 0 0 80%; } + [layout="row"] > [flex-gt-lg="80"] { + max-width: 80%; } + [layout="column"] > [flex-gt-lg="80"] { + max-height: 80%; } + [flex-gt-lg="85"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 85%; + -ms-flex: 0 0 85%; + flex: 0 0 85%; } + [layout="row"] > [flex-gt-lg="85"] { + max-width: 85%; } + [layout="column"] > [flex-gt-lg="85"] { + max-height: 85%; } + [flex-gt-lg="90"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 90%; + -ms-flex: 0 0 90%; + flex: 0 0 90%; } + [layout="row"] > [flex-gt-lg="90"] { + max-width: 90%; } + [layout="column"] > [flex-gt-lg="90"] { + max-height: 90%; } + [flex-gt-lg="95"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 95%; + -ms-flex: 0 0 95%; + flex: 0 0 95%; } + [layout="row"] > [flex-gt-lg="95"] { + max-width: 95%; } + [layout="column"] > [flex-gt-lg="95"] { + max-height: 95%; } + [flex-gt-lg="100"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + [layout="row"] > [flex-gt-lg="100"] { + max-width: 100%; } + [layout="column"] > [flex-gt-lg="100"] { + max-height: 100%; } + [flex-gt-lg="33"], [flex-gt-lg="34"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; } + [flex-gt-lg="66"], [flex-gt-lg="67"] { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; } + [layout="row"] > [flex-gt-lg="33"], [layout="row"] > [flex-gt-lg="34"] { + max-width: 33.33%; } + [layout="row"] > [flex-gt-lg="66"], [layout="row"] > [flex-gt-lg="67"] { + max-width: 66.66%; } + [layout="column"] > [flex-gt-lg="33"], [layout="column"] > [flex-gt-lg="34"] { + max-height: 33.33%; } + [layout="column"] > [flex-gt-lg="66"], [layout="column"] > [flex-gt-lg="67"] { + max-height: 66.66%; } } + +.md-flex { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + +.md-flex-fix { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0; + -ms-flex: 1 1 0; + flex: 1 1 0; } + +@media (min-width: 601px) and (max-width: 1024px) { + .cols-1 { + max-width: 6.25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 6.25vw; + -ms-flex: 1 1 6.25vw; + flex: 1 1 6.25vw; } + .cols-2 { + max-width: 12.5vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 12.5vw; + -ms-flex: 1 1 12.5vw; + flex: 1 1 12.5vw; } + .cols-3 { + max-width: 18.75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 18.75vw; + -ms-flex: 1 1 18.75vw; + flex: 1 1 18.75vw; } + .cols-4 { + max-width: 25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 25vw; + -ms-flex: 1 1 25vw; + flex: 1 1 25vw; } + .cols-5 { + max-width: 31.25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 31.25vw; + -ms-flex: 1 1 31.25vw; + flex: 1 1 31.25vw; } + .cols-6 { + max-width: 37.5vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 37.5vw; + -ms-flex: 1 1 37.5vw; + flex: 1 1 37.5vw; } + .cols-7 { + max-width: 43.75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 43.75vw; + -ms-flex: 1 1 43.75vw; + flex: 1 1 43.75vw; } + .cols-8 { + max-width: 50vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 50vw; + -ms-flex: 1 1 50vw; + flex: 1 1 50vw; } + .cols-9 { + max-width: 56.25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 56.25vw; + -ms-flex: 1 1 56.25vw; + flex: 1 1 56.25vw; } + .cols-10 { + max-width: 62.5vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 62.5vw; + -ms-flex: 1 1 62.5vw; + flex: 1 1 62.5vw; } + .cols-11 { + max-width: 68.75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 68.75vw; + -ms-flex: 1 1 68.75vw; + flex: 1 1 68.75vw; } + .cols-12 { + max-width: 75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 75vw; + -ms-flex: 1 1 75vw; + flex: 1 1 75vw; } + .cols-13 { + max-width: 81.25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 81.25vw; + -ms-flex: 1 1 81.25vw; + flex: 1 1 81.25vw; } + .cols-14 { + max-width: 87.5vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 87.5vw; + -ms-flex: 1 1 87.5vw; + flex: 1 1 87.5vw; } + .cols-15 { + max-width: 93.75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 93.75vw; + -ms-flex: 1 1 93.75vw; + flex: 1 1 93.75vw; } } + +@media (min-width: 1025px) { + .cols-1 { + max-width: 5vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 5vw; + -ms-flex: 1 1 5vw; + flex: 1 1 5vw; } + .cols-2 { + max-width: 10vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 10vw; + -ms-flex: 1 1 10vw; + flex: 1 1 10vw; } + .cols-3 { + max-width: 15vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 15vw; + -ms-flex: 1 1 15vw; + flex: 1 1 15vw; } + .cols-4 { + max-width: 20vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 20vw; + -ms-flex: 1 1 20vw; + flex: 1 1 20vw; } + .cols-5 { + max-width: 25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 25vw; + -ms-flex: 1 1 25vw; + flex: 1 1 25vw; } + .cols-6 { + max-width: 30vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 30vw; + -ms-flex: 1 1 30vw; + flex: 1 1 30vw; } + .cols-7 { + max-width: 35vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 35vw; + -ms-flex: 1 1 35vw; + flex: 1 1 35vw; } + .cols-8 { + max-width: 40vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 40vw; + -ms-flex: 1 1 40vw; + flex: 1 1 40vw; } + .cols-9 { + max-width: 45vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 45vw; + -ms-flex: 1 1 45vw; + flex: 1 1 45vw; } + .cols-10 { + max-width: 50vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 50vw; + -ms-flex: 1 1 50vw; + flex: 1 1 50vw; } + .cols-11 { + max-width: 55vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 55vw; + -ms-flex: 1 1 55vw; + flex: 1 1 55vw; } + .cols-12 { + max-width: 60vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 60vw; + -ms-flex: 1 1 60vw; + flex: 1 1 60vw; } + .cols-13 { + max-width: 65vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 65vw; + -ms-flex: 1 1 65vw; + flex: 1 1 65vw; } + .cols-14 { + max-width: 70vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 70vw; + -ms-flex: 1 1 70vw; + flex: 1 1 70vw; } + .cols-15 { + max-width: 75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 75vw; + -ms-flex: 1 1 75vw; + flex: 1 1 75vw; } + .cols-16 { + max-width: 80vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 80vw; + -ms-flex: 1 1 80vw; + flex: 1 1 80vw; } + .cols-17 { + max-width: 85vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 85vw; + -ms-flex: 1 1 85vw; + flex: 1 1 85vw; } + .cols-18 { + max-width: 90vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 90vw; + -ms-flex: 1 1 90vw; + flex: 1 1 90vw; } + .cols-19 { + max-width: 95vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 95vw; + -ms-flex: 1 1 95vw; + flex: 1 1 95vw; } } + +[layout="row"].md-layout-margin { + margin-right: 0; + margin-left: 0; } + +@media (max-width: 600px) { + .sg-app-content { + width: 100%; + overflow-x: hidden; } } + +html, body { + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + min-height: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +/************ + * Headings + ************/ +.md-display-4 { + font-size: 112px; + font-weight: 300; + letter-spacing: -0.010em; + line-height: 112px; } + +.md-display-3 { + font-size: 56px; + font-weight: 400; + letter-spacing: -0.005em; + line-height: 56px; } + +.md-display-2 { + font-size: 45px; + font-weight: 400; + line-height: 64px; } + +.md-display-1 { + font-size: 34px; + font-weight: 400; + line-height: 40px; } + +.md-headline { + font-size: 24px; + font-weight: 400; + line-height: 32px; } + +.md-title { + font-size: 20px; + font-weight: 500; + letter-spacing: 0.005em; } + +.md-subhead { + font-size: 16px; + font-weight: 400; + letter-spacing: 0.010em; + line-height: 24px; } + +/************ + * Body Copy + ************/ +.md-body-1 { + font-size: 14px; + font-weight: 400; + letter-spacing: 0.010em; + line-height: 20px; } + +.md-body-2 { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.010em; + line-height: 24px; } + +.md-caption { + font-size: 12px; + letter-spacing: 0.020em; } + +.md-button { + letter-spacing: 0.010em; } + +/************ + * Defaults + ************/ +button, +select, +html, +textarea, +input { + font-family: "Fira sans", "Helvetica Neue", sans-serif; } + +select, +button, +textarea, +input { + font-size: 100%; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Hair.eot"); + src: url("../fonts/FiraSans-Hair.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Hair.woff") format("woff"), url("../fonts/FiraSans-Hair.ttf") format("truetype"); + font-weight: 100; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Book.eot"); + src: url("../fonts/FiraSans-Book.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Book.woff") format("woff"), url("../fonts/FiraSans-Book.ttf") format("truetype"); + font-weight: 400; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Light.eot"); + src: url("../fonts/FiraSans-Light.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Light.woff") format("woff"), url("../fonts/FiraSans-Light.ttf") format("truetype"); + font-weight: 300; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Regular.eot"); + src: url("../fonts/FiraSans-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Regular.woff") format("woff"), url("../fonts/FiraSans-Regular.ttf") format("truetype"); + font-weight: 500; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Thin.eot"); + src: url("../fonts/FiraSans-Thin.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Thin.woff") format("woff"), url("../fonts/FiraSans-Thin.ttf") format("truetype"); + font-weight: 200; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-Medium.eot"); + src: url("../fonts/FiraSans-Medium.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-Medium.woff") format("woff"), url("../fonts/FiraSans-Medium.ttf") format("truetype"); + font-weight: 600; + font-style: normal; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-HairItalic.eot"); + src: url("../fonts/FiraSans-HairItalic.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-HairItalic.woff") format("woff"), url("../fonts/FiraSans-HairItalic.ttf") format("truetype"); + font-weight: 100; + font-style: italic; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-BookItalic.eot"); + src: url("../fonts/FiraSans-BookItalic.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-BookItalic.woff") format("woff"), url("../fonts/FiraSans-BookItalic.ttf") format("truetype"); + font-weight: 400; + font-style: italic; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-LightItalic.eot"); + src: url("../fonts/FiraSans-LightItalic.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-LightItalic.woff") format("woff"), url("../fonts/FiraSans-LightItalic.ttf") format("truetype"); + font-weight: 300; + font-style: italic; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-ThinItalic.eot"); + src: url("../fonts/FiraSans-ThinItalic.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-ThinItalic.woff") format("woff"), url("../fonts/FiraSans-ThinItalic.ttf") format("truetype"); + font-weight: 200; + font-style: italic; } + +@font-face { + font-family: 'Fira sans'; + src: url("../fonts/FiraSans-MediumItalic.eot"); + src: url("../fonts/FiraSans-MediumItalic.eot?#iefix") format("embedded-opentype"), url("../fonts/FiraSans-MediumItalic.woff") format("woff"), url("../fonts/FiraSans-MediumItalic.ttf") format("truetype"); + font-weight: 600; + font-style: italic; } + +h1 { + font-size: 112px; + margin: 0; } + +h2 { + font-size: 56px; + margin: 0; } + +h3 { + font-size: 45px; + margin: 0; } + +h4 { + font-size: 34px; + margin: 0; } + +h5 { + font-size: 24px; + margin: 0; } + +h6 { + font-size: 20px; + margin: 0; } + +html p { + font-size: inherit; + line-height: 1.3; + margin: 0; } + +.sg-md-caption, .sg-tile-content .sg-md-body-multi, .sg-tile-content .mailer_mailcontent { + font-size: 12px; + line-height: 16px; + font-weight: 400; + white-space: nowrap; } + +.sg-md-menu { + font-size: 14px; + line-height: 16px; + font-weight: 600; + white-space: nowrap; } + +.sg-md-button { + font-size: 14px; + line-height: 16px; + font-weight: 600; + white-space: nowrap; + text-transform: capitalize; } + +.sg-md-body-1, .sg-tile-content .sg-md-subhead-multi { + font-size: 14px; + line-height: 20px; + font-weight: 400; } + +.sg-md-body-2 { + font-size: 14px; + line-height: 24px; + font-weight: 600; + margin-top: -24px; + margin-bottom: 24px; } + +.sg-md-subhead-1 { + font-size: 16px; + line-height: 24px; + font-weight: 400; + margin-top: -24px; + margin-bottom: 24px; } + +.sg-md-subhead-2, .sg-md-subhead-solo { + font-size: 16px; + line-height: 28px; + font-weight: 400; + margin-top: -28px; + margin-bottom: 28px; } + +.sg-md-subhead-solo { + margin: 0; } + +.sg-md-title, .sg-md-display-2-subheader, .sg-md-title-msg { + font-size: 20px; + line-height: 24px; + font-weight: 600; + white-space: nowrap; } + +.sg-md-headline { + font-size: 24px; + line-height: 32px; + font-weight: 400; + margin-top: 0; + margin-bottom: 8px; } + +.sg-md-display-1 { + font-size: 34px; + line-height: 40px; + font-weight: 400; } + +.sg-md-display-2 { + font-size: 45px; + line-height: 49px; + font-weight: 400; + white-space: nowrap; } + +.sg-md-display-2--light { + font-size: 45px; + line-height: 49px; + font-weight: 300; } + +.sg-md-display-3 { + font-size: 56px; + line-height: 60px; + font-weight: 400; + white-space: nowrap; } + +.sg-md-display-4 { + font-size: 112px; + line-height: 116px; + font-weight: 300; + white-space: nowrap; } + +.sg-md-display-2-subheader { + margin-bottom: 16px; + font-weight: 200; + white-space: normal; } + +.sg-date-group { + font-size: 14px; + line-height: 1; + text-transform: uppercase; } + +.sg-date-today { + margin-left: 8px; + font-size: 72px; + line-height: 56px; + font-weight: 200; } + +@-webkit-keyframes md-autocomplete-list-out { + 0% { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 50% { + opacity: 0; + height: 40px; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 100% { + height: 0; + opacity: 0; } } + +@keyframes md-autocomplete-list-out { + 0% { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 50% { + opacity: 0; + height: 40px; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 100% { + height: 0; + opacity: 0; } } + +@-webkit-keyframes md-autocomplete-list-in { + 0% { + opacity: 0; + height: 0; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 50% { + opacity: 0; + height: 40px; } + 100% { + opacity: 1; + height: 40px; } } + +@keyframes md-autocomplete-list-in { + 0% { + opacity: 0; + height: 0; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 50% { + opacity: 0; + height: 40px; } + 100% { + opacity: 1; + height: 40px; } } + +md-autocomplete { + border-radius: 2px; + display: block; + height: 40px; + position: relative; + overflow: visible; + min-width: 190px; } + md-autocomplete[disabled] input { + cursor: not-allowed; } + md-autocomplete[md-floating-label] { + padding-bottom: 26px; + border-radius: 0; + background: transparent; + height: auto; } + md-autocomplete[md-floating-label] md-input-container { + padding-bottom: 0; } + md-autocomplete[md-floating-label] md-autocomplete-wrap { + height: auto; } + md-autocomplete[md-floating-label] button { + position: absolute; + top: auto; + bottom: 0; + right: 0; + width: 30px; + height: 30px; } + md-autocomplete md-autocomplete-wrap { + display: block; + position: relative; + overflow: visible; + height: 40px; } + md-autocomplete md-autocomplete-wrap.md-menu-showing { + z-index: 51; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 3px; + -webkit-transition: none; + transition: none; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] .md-container { + -webkit-transition: none; + transition: none; + top: auto; + height: 3px; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter { + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter.ng-enter-active { + opacity: 1; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave { + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } + md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave.ng-leave-active { + opacity: 0; } + md-autocomplete input:not(.md-input) { + width: 100%; + box-sizing: border-box; + border: none; + box-shadow: none; + padding: 0 15px; + font-size: 14px; + line-height: 40px; + height: 40px; + outline: none; + background: transparent; } + md-autocomplete input:not(.md-input)::-ms-clear { + display: none; } + md-autocomplete button { + position: relative; + line-height: 20px; + text-align: center; + width: 30px; + height: 30px; + cursor: pointer; + border: none; + border-radius: 50%; + padding: 0; + font-size: 12px; + background: transparent; + margin: auto 5px; } + md-autocomplete button:after { + content: ''; + position: absolute; + top: -6px; + right: -6px; + bottom: -6px; + left: -6px; + border-radius: 50%; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + opacity: 0; + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } + md-autocomplete button:focus { + outline: none; } + md-autocomplete button:focus:after { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + md-autocomplete button md-icon { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.9); + transform: translate3d(-50%, -50%, 0) scale(0.9); } + md-autocomplete button md-icon path { + stroke-width: 0; } + md-autocomplete button.ng-enter { + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: -webkit-transform 0.15s ease-out; + transition: transform 0.15s ease-out; } + md-autocomplete button.ng-enter.ng-enter-active { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); } + md-autocomplete button.ng-leave { + -webkit-transition: -webkit-transform 0.15s ease-out; + transition: transform 0.15s ease-out; } + md-autocomplete button.ng-leave.ng-leave-active { + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); } + @media screen and (-ms-high-contrast: active) { + md-autocomplete input { + border: 1px solid #fff; } + md-autocomplete li:focus { + color: #fff; } } + +.md-autocomplete-suggestions { + position: absolute; + margin: 0; + list-style: none; + padding: 0; + overflow: auto; + max-height: 225.5px; + z-index: 100; } + .md-autocomplete-suggestions li { + cursor: pointer; + font-size: 14px; + overflow: hidden; + padding: 0 15px; + line-height: 48px; + height: 48px; + -webkit-transition: background 0.15s linear; + transition: background 0.15s linear; + margin: 0; + white-space: nowrap; + text-overflow: ellipsis; } + .md-autocomplete-suggestions li.ng-enter, + .md-autocomplete-suggestions li.ng-hide-remove { + -webkit-transition: none; + transition: none; + -webkit-animation: md-autocomplete-list-in 0.2s; + animation: md-autocomplete-list-in 0.2s; } + .md-autocomplete-suggestions li.ng-leave, + .md-autocomplete-suggestions li.ng-hide-add { + -webkit-transition: none; + transition: none; + -webkit-animation: md-autocomplete-list-out 0.2s; + animation: md-autocomplete-list-out 0.2s; } + .md-autocomplete-suggestions li:focus { + outline: none; } + +@media screen and (-ms-high-contrast: active) { + md-autocomplete, + .md-autocomplete-suggestions { + border: 1px solid #fff; } } + +/*! _extends.scss - */ +md-list { + display: block; + padding: 8px 0px 8px 0px; } + md-list .md-subheader { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.010em; + line-height: 0.75em; } + +md-list-item.md-proxy-focus.md-focused .md-no-style { + -webkit-transition: background-color 0.15s linear; + transition: background-color 0.15s linear; } + +md-list-item.md-no-proxy, +md-list-item .md-no-style { + position: relative; + padding: 0px 16px; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + md-list-item.md-no-proxy.md-button, + md-list-item .md-no-style.md-button { + font-size: inherit; + height: inherit; + text-align: left; + text-transform: none; + width: 100%; + white-space: normal; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: inherit; + -ms-flex-direction: inherit; + flex-direction: inherit; + -webkit-box-align: inherit; + -webkit-align-items: inherit; + -ms-flex-align: inherit; + align-items: inherit; } + md-list-item.md-no-proxy:focus, + md-list-item .md-no-style:focus { + outline: none; } + +md-list-item.md-with-secondary { + position: relative; } + +md-list-item.md-clickable:hover { + cursor: pointer; } + +md-list-item md-divider { + position: absolute; + bottom: 0; + left: 0; + width: 100%; } + md-list-item md-divider[md-inset] { + left: 96px; + width: calc(100% - 96px); + margin: 0; } + +md-list-item, md-list-item .md-list-item-inner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-height: 64px; } + md-list-item > div.md-primary > md-icon, + md-list-item > div.md-secondary > md-icon, + md-list-item > md-icon:first-child, + md-list-item > md-icon.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-icon, + md-list-item .md-list-item-inner > div.md-secondary > md-icon, + md-list-item .md-list-item-inner > md-icon:first-child, + md-list-item .md-list-item-inner > md-icon.md-secondary { + width: 24px; + margin-top: 16px; + margin-bottom: 12px; + box-sizing: content-box; } + md-list-item > div.md-primary > md-checkbox, + md-list-item > div.md-secondary > md-checkbox, + md-list-item > md-checkbox:first-child, + md-list-item md-checkbox.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-checkbox, + md-list-item .md-list-item-inner > div.md-secondary > md-checkbox, + md-list-item .md-list-item-inner > md-checkbox:first-child, + md-list-item .md-list-item-inner md-checkbox.md-secondary { + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; } + md-list-item > div.md-primary > md-checkbox .md-label, + md-list-item > div.md-secondary > md-checkbox .md-label, + md-list-item > md-checkbox:first-child .md-label, + md-list-item md-checkbox.md-secondary .md-label, md-list-item .md-list-item-inner > div.md-primary > md-checkbox .md-label, + md-list-item .md-list-item-inner > div.md-secondary > md-checkbox .md-label, + md-list-item .md-list-item-inner > md-checkbox:first-child .md-label, + md-list-item .md-list-item-inner md-checkbox.md-secondary .md-label { + display: none; } + md-list-item > md-icon:first-child, md-list-item .md-list-item-inner > md-icon:first-child { + margin-right: 32px; } + md-list-item > md-checkbox:first-child, md-list-item .md-list-item-inner > md-checkbox:first-child { + width: 24px; + margin-left: 3px; + margin-right: 29px; } + md-list-item > .md-avatar:first-child, md-list-item .md-list-item-inner > .md-avatar:first-child { + width: 40px; + height: 40px; + margin-top: 8px; + margin-bottom: 8px; + margin-right: 16px; + border-radius: 50%; + box-sizing: content-box; } + md-list-item md-checkbox.md-secondary, + md-list-item md-switch.md-secondary, md-list-item .md-list-item-inner md-checkbox.md-secondary, + md-list-item .md-list-item-inner md-switch.md-secondary { + margin-right: 0; + margin-top: 0; + margin-bottom: 0; } + md-list-item button.md-button.md-secondary-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container { + background-color: transparent; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + border-radius: 50%; + margin: 0px; + min-width: 0px; } + md-list-item button.md-button.md-secondary-container .md-ripple, + md-list-item button.md-button.md-secondary-container .md-ripple-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple, + md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple-container { + border-radius: 50%; } + md-list-item .md-secondary-container, + md-list-item .md-secondary, md-list-item .md-list-item-inner .md-secondary-container, + md-list-item .md-list-item-inner .md-secondary { + margin-left: 16px; + position: absolute; + right: 16px; + top: 50%; + -webkit-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); } + md-list-item > .md-button.md-secondary-container > .md-secondary, md-list-item .md-list-item-inner > .md-button.md-secondary-container > .md-secondary { + margin-left: 0px; + position: static; } + md-list-item > p, md-list-item > .md-list-item-inner > p, md-list-item .md-list-item-inner > p, md-list-item .md-list-item-inner > .md-list-item-inner > p { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + margin: 0; } + +md-list-item.md-2-line, +md-list-item.md-2-line > .md-no-style, +md-list-item.md-3-line, +md-list-item.md-3-line > .md-no-style { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + md-list-item.md-2-line .md-list-item-text, + md-list-item.md-2-line > .md-no-style .md-list-item-text, + md-list-item.md-3-line .md-list-item-text, + md-list-item.md-3-line > .md-no-style .md-list-item-text { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 16px 0; + text-overflow: ellipsis; } + md-list-item.md-2-line .md-list-item-text.md-offset, + md-list-item.md-2-line > .md-no-style .md-list-item-text.md-offset, + md-list-item.md-3-line .md-list-item-text.md-offset, + md-list-item.md-3-line > .md-no-style .md-list-item-text.md-offset { + margin-left: 56px; } + md-list-item.md-2-line .md-list-item-text h3, + md-list-item.md-2-line > .md-no-style .md-list-item-text h3, + md-list-item.md-3-line .md-list-item-text h3, + md-list-item.md-3-line > .md-no-style .md-list-item-text h3 { + font-size: 16px; + font-weight: 400; + letter-spacing: 0.010em; + margin: 0 0 6px 0; + line-height: 0.75em; } + md-list-item.md-2-line .md-list-item-text h4, + md-list-item.md-2-line > .md-no-style .md-list-item-text h4, + md-list-item.md-3-line .md-list-item-text h4, + md-list-item.md-3-line > .md-no-style .md-list-item-text h4 { + font-size: 14px; + letter-spacing: 0.010em; + margin: 10px 0 5px 0; + font-weight: 400; + line-height: 0.75em; } + md-list-item.md-2-line .md-list-item-text p, + md-list-item.md-2-line > .md-no-style .md-list-item-text p, + md-list-item.md-3-line .md-list-item-text p, + md-list-item.md-3-line > .md-no-style .md-list-item-text p { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.010em; + margin: 0 0 0 0; + line-height: 1.6em; } + +md-list-item.md-2-line > .md-avatar:first-child, +md-list-item.md-2-line > .md-no-style > .md-avatar:first-child { + margin-top: 12px; } + +md-list-item.md-2-line > md-icon:first-child, +md-list-item.md-2-line > .md-no-style > md-icon:first-child { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; } + +md-list-item.md-2-line .md-list-item-text, +md-list-item.md-2-line > .md-no-style .md-list-item-text { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-top: 19px; } + +md-list-item.md-3-line > md-icon:first-child, +md-list-item.md-3-line > .md-avatar:first-child, +md-list-item.md-3-line > .md-no-style > md-icon:first-child, +md-list-item.md-3-line > .md-no-style > .md-avatar:first-child { + margin-top: 16px; } + +[id='messagesList'], +[id='contactsList'] { + border-top: 44px solid transparent; + border-bottom: 2px solid transparent; } + [id='messagesList'] md-list-item, + [id='contactsList'] md-list-item { + -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; + transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; } + [id='messagesList'] md-list-item:hover, + [id='contactsList'] md-list-item:hover { + background-color: #e6d8ba; + color: #639997; + cursor: pointer; } + [id='messagesList'] md-list-item:active, + [id='contactsList'] md-list-item:active { + color: #639997; } + [id='messagesList'] md-list-item:focus, + [id='messagesList'] md-list-item.sg-active, + [id='contactsList'] md-list-item:focus, + [id='contactsList'] md-list-item.sg-active { + background-color: #e1f5f3; } + +.sg-tile-content { + -webkit-box-align: baseline; + -webkit-align-items: baseline; + -ms-flex-align: baseline; + align-items: baseline; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .sg-tile-content p { + margin: 0 0 0 0; + font-size: 14px; } + .sg-tile-content .msg-date { + float: right; + font-size: 14px; + font-weight: 300; + line-height: 20px; + margin-left: 1em; } + .sg-tile-content .sg-md-subhead-multi, + .sg-tile-content .sg-md-subhead-solo, + .sg-tile-content .sg-md-body-multi, .sg-tile-content .mailer_mailcontent { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .sg-tile-content .sg-md-subhead-multi { + font-size: initial; } + +.sg-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-list-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-selected-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-accepted { + margin-right: 0; + margin-left: 0; } + +.sg-declined { + margin-right: 0; + margin-left: 0; } + +.sg-delegated { + margin-right: 0; + margin-left: 0; } + +.sg-needs-action { + margin-right: 0; + margin-left: 0; } + +.sg-tentative { + margin-right: 0; + margin-left: 0; } + +/*! _extends.scss - */ +md-backdrop { + z-index: 50; + opacity: 1; + -webkit-transition: background-color 450ms cubic-bezier(0.55, 0, 0.55, 0.2); + transition: background-color 450ms cubic-bezier(0.55, 0, 0.55, 0.2); + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } + md-backdrop.md-menu-backdrop { + z-index: 98; } + md-backdrop.md-select-backdrop { + z-index: 81; + -webkit-transition-duration: 0; + transition-duration: 0; } + md-backdrop.md-dialog-backdrop { + z-index: 79; } + md-backdrop.md-bottom-sheet-backdrop { + z-index: 69; } + md-backdrop.md-sidenav-backdrop { + z-index: 59; } + md-backdrop.md-click-catcher { + position: absolute; } + md-backdrop.md-opaque.ng-leave { + -webkit-transition: background-color 400ms linear; + transition: background-color 400ms linear; } + +md-backdrop { + z-index: 50; + background-color: transparent; + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; } + md-backdrop.md-dialog-backdrop { + z-index: 79; } + md-backdrop.md-bottom-sheet-backdrop { + z-index: 69; } + md-backdrop.md-sidenav-backdrop { + z-index: 59; } + md-backdrop.ng-enter { + -webkit-animation: cubic-bezier(0.25, 0.8, 0.25, 1) mdBackdropFadeIn 0.5s both; + animation: cubic-bezier(0.25, 0.8, 0.25, 1) mdBackdropFadeIn 0.5s both; } + md-backdrop.ng-leave { + -webkit-animation: cubic-bezier(0.55, 0, 0.55, 0.2) mdBackdropFadeOut 0.2s both; + animation: cubic-bezier(0.55, 0, 0.55, 0.2) mdBackdropFadeOut 0.2s both; } + +@-webkit-keyframes mdBackdropFadeIn { + from { + opacity: 0; } + to { + opacity: 1; } } + +@keyframes mdBackdropFadeIn { + from { + opacity: 0; } + to { + opacity: 1; } } + +@-webkit-keyframes mdBackdropFadeOut { + from { + opacity: 1; } + to { + opacity: 0; } } + +@keyframes mdBackdropFadeOut { + from { + opacity: 1; } + to { + opacity: 0; } } + +/*! bottomSheet/_extends.scss - */ +md-bottom-sheet { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 8px 16px 88px 16px; + z-index: 70; + border-top-width: 1px; + border-top-style: solid; + -webkit-transform: translate3d(0, 80px, 0); + transform: translate3d(0, 80px, 0); + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transition-property: -webkit-transform; + transition-property: transform; } + md-bottom-sheet.md-has-header { + padding-top: 0; } + md-bottom-sheet.ng-enter { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } + md-bottom-sheet.ng-enter-active { + opacity: 1; + display: block; + -webkit-transform: translate3d(0, 80px, 0) !important; + transform: translate3d(0, 80px, 0) !important; } + md-bottom-sheet.ng-leave-active { + -webkit-transform: translate3d(0, 100%, 0) !important; + transform: translate3d(0, 100%, 0) !important; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-bottom-sheet .md-subheader { + background-color: transparent; + font-family: "Fira sans", "Helvetica Neue", sans-serif; + line-height: 56px; + padding: 0; + white-space: nowrap; } + md-bottom-sheet md-inline-icon { + display: inline-block; + height: 24px; + width: 24px; + fill: #444; } + md-bottom-sheet md-list-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + outline: none; } + md-bottom-sheet md-list-item:hover { + cursor: pointer; } + md-bottom-sheet.md-list md-list-item { + padding: 0; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 48px; } + md-bottom-sheet.md-list md-list-item div.md-icon-container { + display: inline-block; + height: 24px; + margin-right: 32px; } + md-bottom-sheet.md-grid { + padding-left: 24px; + padding-right: 24px; + padding-top: 0; } + md-bottom-sheet.md-grid md-list { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-transition: all 0.5s; + transition: all 0.5s; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + md-bottom-sheet.md-grid md-list-item { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-transition: all 0.5s; + transition: all 0.5s; + height: 96px; + margin-top: 8px; + margin-bottom: 8px; + /* Mixin for how many grid items to show per row */ } + @media screen and (max-width: 600px) { + md-bottom-sheet.md-grid md-list-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 33.3333333333%; + -ms-flex: 1 1 33.3333333333%; + flex: 1 1 33.3333333333%; + max-width: 33.3333333333%; } + md-bottom-sheet.md-grid md-list-item:nth-of-type(3n + 1) { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + md-bottom-sheet.md-grid md-list-item:nth-of-type(3n) { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } } + @media screen and (min-width: 600px) and (max-width: 1024px) { + md-bottom-sheet.md-grid md-list-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 25%; + -ms-flex: 1 1 25%; + flex: 1 1 25%; + max-width: 25%; } } + @media screen and (min-width: 1024px) and (max-width: 1280px) { + md-bottom-sheet.md-grid md-list-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 16.6666666667%; + -ms-flex: 1 1 16.6666666667%; + flex: 1 1 16.6666666667%; + max-width: 16.6666666667%; } } + @media screen and (min-width: 1280px) { + md-bottom-sheet.md-grid md-list-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 14.2857142857%; + -ms-flex: 1 1 14.2857142857%; + flex: 1 1 14.2857142857%; + max-width: 14.2857142857%; } } + md-bottom-sheet.md-grid md-list-item .md-list-item-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 48px; + padding-bottom: 16px; } + md-bottom-sheet.md-grid md-list-item .md-grid-item-content { + border: 1px solid transparent; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 80px; } + md-bottom-sheet.md-grid md-list-item .md-icon-container { + display: inline-block; + box-sizing: border-box; + height: 48px; + width: 48px; + margin: 0 0; } + md-bottom-sheet.md-grid md-list-item .md-grid-text { + font-weight: 400; + line-height: 16px; + font-size: 13px; + margin: 0; + white-space: nowrap; + width: 64px; + text-align: center; + text-transform: none; + padding-top: 8px; } + +@media screen and (-ms-high-contrast: active) { + md-bottom-sheet { + border: 1px solid #fff; } } + +md-bottom-sheet.md-default-theme { + border: none; + background-color: inherit; + background-image: url("../img/cardboard-transp.png"); + background-blend-mode: multiply; } + +md-bottom-sheet md-list-item md-icon { + margin-right: 32px; + vertical-align: text-bottom; } + +md-bottom-sheet.md-default-theme .md-button.md-default-theme:hover:not([disabled]), +md-bottom-sheet.md-default-theme .md-button.md-default-theme:hover:not([disabled]) md-icon { + background-color: inherit; + background-image: url("../img/cardboard-transp.png"); + background-blend-mode: multiply; + color: #639997; } + +md-bottom-sheet.md-default-theme .md-button.md-default-theme[disabled] { + padding: 6px; + text-transform: uppercase; } + +/*! button/_extends.scss - */ +/** + * Position a FAB button. + */ +.md-button { + box-sizing: border-box; + color: currentColor; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + outline: none; + border: 0; + display: inline-block; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0 6px; + margin: 6px 8px; + line-height: 36px; + min-height: 36px; + background: transparent; + white-space: nowrap; + min-width: 88px; + text-align: center; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + font-style: inherit; + font-variant: inherit; + font-family: inherit; + text-decoration: none; + cursor: pointer; + overflow: hidden; + -webkit-transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } + .md-button *, + .md-button *:before, + .md-button *:after { + box-sizing: border-box; } + .md-button:focus { + outline: none; } + .md-button:hover, .md-button:focus { + text-decoration: none; } + .md-button.ng-hide, .md-button.ng-leave { + -webkit-transition: none; + transition: none; } + .md-button.md-cornered { + border-radius: 0; } + .md-button.md-icon { + padding: 0; + background: none; } + .md-button.md-raised:not([disabled]) { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + .md-button.md-icon-button { + margin: 0 6px; + height: 48px; + min-width: 0; + line-height: 48px; + padding-left: 0; + padding-right: 0; + width: 48px; + border-radius: 50%; } + .md-button.md-icon-button .md-ripple-container { + border-radius: 50%; + background-clip: padding-box; + overflow: hidden; + -webkit-mask-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC"); } + .md-button.md-fab { + z-index: 20; + line-height: 56px; + min-width: 0; + width: 56px; + height: 56px; + vertical-align: middle; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); + border-radius: 50%; + background-clip: padding-box; + overflow: hidden; + -webkit-transition: 0.2s linear; + transition: 0.2s linear; + -webkit-transition-property: background-color, box-shadow; + transition-property: background-color, box-shadow; } + .md-button.md-fab.md-fab-bottom-right { + top: auto; + right: 20px; + bottom: 20px; + left: auto; + position: absolute; } + .md-button.md-fab.md-fab-bottom-left { + top: auto; + right: auto; + bottom: 20px; + left: 20px; + position: absolute; } + .md-button.md-fab.md-fab-top-right { + top: 20px; + right: 20px; + bottom: auto; + left: auto; + position: absolute; } + .md-button.md-fab.md-fab-top-left { + top: 20px; + right: auto; + bottom: auto; + left: 20px; + position: absolute; } + .md-button.md-fab .md-ripple-container { + border-radius: 50%; + background-clip: padding-box; + overflow: hidden; + -webkit-mask-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC"); } + .md-button.md-fab.md-mini { + line-height: 40px; + width: 40px; + height: 40px; } + .md-button:not([disabled]).md-raised.md-focused, + .md-button:not([disabled]).md-fab.md-focused { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); } + .md-button:not([disabled]).md-raised:active, + .md-button:not([disabled]).md-fab:active { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); } + +.md-toast-open-top .md-button.md-fab-top-left, +.md-toast-open-top .md-button.md-fab-top-right { + -webkit-transform: translate3d(0, 42px, 0); + transform: translate3d(0, 42px, 0); } + .md-toast-open-top .md-button.md-fab-top-left:not([disabled]).md-focused, + .md-toast-open-top .md-button.md-fab-top-left:not([disabled]):hover, + .md-toast-open-top .md-button.md-fab-top-right:not([disabled]).md-focused, + .md-toast-open-top .md-button.md-fab-top-right:not([disabled]):hover { + -webkit-transform: translate3d(0, 41px, 0); + transform: translate3d(0, 41px, 0); } + +.md-toast-open-bottom .md-button.md-fab-bottom-left, +.md-toast-open-bottom .md-button.md-fab-bottom-right { + -webkit-transform: translate3d(0, -42px, 0); + transform: translate3d(0, -42px, 0); } + .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]).md-focused, + .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):hover, + .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]).md-focused, + .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):hover { + -webkit-transform: translate3d(0, -43px, 0); + transform: translate3d(0, -43px, 0); } + +.md-button-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; } + +.md-button-group > .md-button { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + display: block; + overflow: hidden; + width: 0; + border-width: 1px 0px 1px 1px; + border-radius: 0; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; } + .md-button-group > .md-button:first-child { + border-radius: 2px 0px 0px 2px; } + .md-button-group > .md-button:last-child { + border-right-width: 1px; + border-radius: 0px 2px 2px 0px; } + +@media screen and (-ms-high-contrast: active) { + .md-button.md-raised, + .md-button.md-fab { + border: 1px solid #fff; } } + +.md-button.md-fab { + min-width: 56px; } + +md-sidenav md-list .md-button, +.view-list md-list .md-button { + background-color: transparent !important; } + +.view-list md-list .md-button { + padding: 0; } + +.sg-expandable { + width: 100%; } + +a.md-button.sg-icon-button, +.md-button.sg-icon-button, +md-list md-list-item button.md-button.sg-icon-button { + z-index: 1; + border-radius: 50%; + min-width: 36px; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + a.md-button.sg-icon-button:hover, + a.md-button.sg-icon-button:active, + .md-button.sg-icon-button:hover, + .md-button.sg-icon-button:active, + md-list md-list-item button.md-button.sg-icon-button:hover, + md-list md-list-item button.md-button.sg-icon-button:active { + background-color: transparent; + -webkit-transform: scale(1.25); + -ms-transform: scale(1.25); + transform: scale(1.25); } + a.md-button.sg-icon-button .md-ripple-container, + .md-button.sg-icon-button .md-ripple-container, + md-list md-list-item button.md-button.sg-icon-button .md-ripple-container { + border-radius: 50%; } + +.md-avatar .sg-icon-button { + margin-top: 1px; + margin-left: 2px; } + +.sg-icon-bar--vertical { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 0 -16px 0 16px; + font-size: 16px; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + @media (min-width: 1) and (max-width: 600px) { + .sg-icon-bar--vertical { + margin-left: 6px; } } + +.sg-icon-bar *.button { + display: block; } + +.sg-button-navicon { + width: 36px; + height: 36px; + line-height: 36px; } + +.sg-button-navicon.sg-icon-button md-icon, +.sg-button-navicon.sg-icon-button { + padding: 0; + font-size: 24px; } + +/*! card/_extends.scss - */ +md-card { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 8px; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); } + md-card > img, + md-card > :not(md-card-content) img { + width: 100%; } + md-card md-card-content { + padding: 16px; } + md-card .md-actions { + margin: 0; } + md-card .md-actions .md-button { + margin-bottom: 8px; + margin-top: 8px; + margin-right: 4px; + margin-left: 4px; } + md-card md-card-footer { + padding: 16px; } + +@media screen and (-ms-high-contrast: active) { + md-card { + border: 1px solid #fff; } } + +md-card md-card-content { + overflow-y: auto; + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + +md-card.md-default-theme { + background-color: #fcfbf8; } + +md-card.sg-collapsed, md-card.sg-expanded { + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transition-delay: 0s; + transition-delay: 0s; } + md-card.sg-collapsed > .md-button, md-card.sg-expanded > .md-button { + margin: 0; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + md-card.sg-collapsed md-card-content, md-card.sg-expanded md-card-content { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + max-height: 500px; } + md-card.sg-collapsed md-card-content.ng-hide, md-card.sg-expanded md-card-content.ng-hide { + max-height: 0; + padding-bottom: 0; + padding-top: 0; } + +md-card.sg-collapsed { + background-color: transparent; + border-radius: 0; + box-shadow: none; + margin-top: 0; + margin-bottom: 0; } + +md-card.sg-expanded { + margin: 0 0 1px 0; } + +md-card .md-button .sg-tile-content { + text-align: left; + text-transform: none; } + +/*! checkbox/_extends.scss - */ +md-checkbox { + box-sizing: border-box; + display: block; + margin: 8px; + white-space: nowrap; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding-left: 18px; + padding-right: 0; + position: relative; + line-height: 26px; + min-width: 18px; + min-height: 18px; } + html[dir=rtl] md-checkbox { + padding-left: 0; } + html[dir=rtl] md-checkbox { + padding-right: 18px; } + md-checkbox *, + md-checkbox *:before, + md-checkbox *:after { + box-sizing: border-box; } + md-checkbox.md-focused:not([disabled]) .md-container:before { + left: -8px; + top: -8px; + right: -8px; + bottom: -8px; } + md-checkbox.md-focused:not([disabled]):not(.md-checked) .md-container:before { + background-color: rgba(0, 0, 0, 0.12); } + md-checkbox .md-container { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + display: inline-block; + width: 18px; + height: 18px; + left: 0; + right: auto; } + html[dir=rtl] md-checkbox .md-container { + left: auto; } + html[dir=rtl] md-checkbox .md-container { + right: 0; } + md-checkbox .md-container:before { + background-color: transparent; + border-radius: 50%; + content: ''; + position: absolute; + display: block; + height: auto; + left: 0; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: all 0.5s; + transition: all 0.5s; + width: auto; } + md-checkbox .md-container:after { + content: ''; + position: absolute; + top: -10px; + right: -10px; + bottom: -10px; + left: -10px; } + md-checkbox .md-container .md-ripple-container { + position: absolute; + display: block; + width: auto; + height: auto; + left: -15px; + top: -15px; + right: -15px; + bottom: -15px; } + md-checkbox.md-align-top-left > div.md-container { + top: 12px; } + md-checkbox .md-icon { + -webkit-transition: 240ms; + transition: 240ms; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + border-width: 2px; + border-style: solid; + border-radius: 2px; } + md-checkbox.md-checked .md-icon { + border: none; } + md-checkbox[disabled] { + cursor: no-drop; } + md-checkbox.md-checked .md-icon:after { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + left: 6px; + top: 2px; + display: table; + width: 6px; + height: 12px; + border-width: 2px; + border-style: solid; + border-top: 0; + border-left: 0; + content: ''; } + md-checkbox .md-label { + position: relative; + display: inline-block; + vertical-align: middle; + white-space: normal; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + margin-left: 10px; + margin-right: 0; } + html[dir=rtl] md-checkbox .md-label { + margin-left: 0; } + html[dir=rtl] md-checkbox .md-label { + margin-right: 10px; } + +md-sidenav md-checkbox { + margin: 0; } + +/*! chips/_extends.scss - */ +.md-contact-chips .md-chips .md-chip { + padding: 0 8px 0 0; } + .md-contact-chips .md-chips .md-chip .md-contact-avatar { + float: left; } + .md-contact-chips .md-chips .md-chip .md-contact-avatar img { + height: 32px; + border-radius: 16px; } + .md-contact-chips .md-chips .md-chip .md-contact-name { + display: inline-block; + height: 32px; + margin-left: 8px; } + +.md-contact-suggestion { + height: 56px; } + .md-contact-suggestion img { + height: 40px; + border-radius: 20px; + margin-top: 8px; } + .md-contact-suggestion .md-contact-name { + margin-left: 8px; + width: 120px; } + .md-contact-suggestion .md-contact-name, .md-contact-suggestion .md-contact-email { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; } + +.md-contact-chips-suggestions li { + height: 100%; } + +.md-chips { + display: block; + font-family: "Fira sans", "Helvetica Neue", sans-serif; + font-size: 13px; + padding: 0 0 8px 0; + vertical-align: middle; + cursor: text; } + .md-chips:after { + content: ''; + display: table; + clear: both; } + .md-chips .md-chip { + cursor: default; + border-radius: 16px; + display: block; + height: 32px; + line-height: 32px; + margin: 8px 8px 0 0; + padding: 0 8px 0 12px; + float: left; + box-sizing: border-box; + max-width: 100%; } + .md-chips .md-chip .md-chip-content { + display: block; + padding-right: 4px; + float: left; + white-space: nowrap; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; } + .md-chips .md-chip .md-chip-content:focus { + outline: none; } + .md-chips .md-chip .md-chip-remove-container { + display: inline-block; + margin-right: -5px; } + .md-chips .md-chip .md-chip-remove { + text-align: center; + width: 32px; + height: 32px; + min-width: 0; + padding: 0; + background: transparent; + border: none; + box-shadow: none; + margin: 0; + position: relative; } + .md-chips .md-chip .md-chip-remove md-icon { + height: 18px; + width: 18px; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + .md-chips .md-chip-input-container { + display: block; + line-height: 32px; + margin: 8px 8px 0 0; + padding: 0 8px 0 12px; + float: left; } + .md-chips .md-chip-input-container input:not([type]), .md-chips .md-chip-input-container input[type="email"], .md-chips .md-chip-input-container input[type="number"], .md-chips .md-chip-input-container input[type="tel"], .md-chips .md-chip-input-container input[type="url"], .md-chips .md-chip-input-container input[type="text"] { + border: 0; + height: 32px; + line-height: 32px; + padding: 0; } + .md-chips .md-chip-input-container input:not([type]):focus, .md-chips .md-chip-input-container input[type="email"]:focus, .md-chips .md-chip-input-container input[type="number"]:focus, .md-chips .md-chip-input-container input[type="tel"]:focus, .md-chips .md-chip-input-container input[type="url"]:focus, .md-chips .md-chip-input-container input[type="text"]:focus { + outline: none; } + .md-chips .md-chip-input-container md-autocomplete, .md-chips .md-chip-input-container md-autocomplete-wrap { + background: transparent; + height: 32px; } + .md-chips .md-chip-input-container md-autocomplete md-autocomplete-wrap { + box-shadow: none; } + .md-chips .md-chip-input-container md-autocomplete input { + position: relative; } + .md-chips .md-chip-input-container input { + border: 0; + height: 32px; + line-height: 32px; + padding: 0; } + .md-chips .md-chip-input-container input:focus { + outline: none; } + .md-chips .md-chip-input-container md-autocomplete, .md-chips .md-chip-input-container md-autocomplete-wrap { + height: 32px; } + .md-chips .md-chip-input-container md-autocomplete { + box-shadow: none; } + .md-chips .md-chip-input-container md-autocomplete input { + position: relative; } + .md-chips .md-chip-input-container:not(:first-child) { + margin: 8px 8px 0 0; } + .md-chips .md-chip-input-container input { + background: transparent; + border-width: 0; } + .md-chips md-autocomplete button { + display: none; } + +@media screen and (-ms-high-contrast: active) { + .md-chip-input-container, + md-chip { + border: 1px solid #fff; } + .md-chip-input-container md-autocomplete { + border: none; } } + +md-chips.sg-readonly .md-chips { + box-shadow: none; } + md-chips.sg-readonly .md-chips.md-focused { + box-shadow: none; } + md-chips.sg-readonly .md-chips .md-chip-content { + max-width: initial; } + +/*! content/_extends.scss - */ +md-content { + display: block; + position: relative; + overflow: auto; + -webkit-overflow-scrolling: touch; } + md-content[md-scroll-y] { + overflow-y: auto; + overflow-x: hidden; } + md-content[md-scroll-x] { + overflow-x: auto; + overflow-y: hidden; } + md-content.autoScroll { + -webkit-overflow-scrolling: auto; } + +md-content.md-padding { + padding: 16px; } + +@media (min-width: 1) and (max-width: 600px) { + md-content.md-padding { + padding: 16px; } } + +.sg-subcontent { + border-left: 8px solid #cbe5c8; + margin-left: 4px; + padding-left: 8px; } + +.sg-inset { + margin-left: 80px; } + +/*! dialog/_extends.scss - */ +.md-dialog-is-showing { + max-height: 100%; } + +.md-dialog-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 80; + overflow: hidden; } + +md-dialog { + opacity: 0; + min-width: 240px; + max-width: 80%; + max-height: 80%; + position: relative; + overflow: auto; + box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.14), 0px 16px 24px 2px rgba(0, 0, 0, 0.098), 0px 6px 30px 5px rgba(0, 0, 0, 0.084); + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + md-dialog.md-transition-in { + opacity: 1; + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transform: translate3d(0, 0, 0) scale(1); + transform: translate3d(0, 0, 0) scale(1); } + md-dialog.md-transition-out { + opacity: 0; + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transform: translate3d(0, 100%, 0) scale(0.2); + transform: translate3d(0, 100%, 0) scale(0.2); } + md-dialog > form { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow: auto; } + md-dialog md-dialog-content { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 24px; + overflow: auto; + -webkit-overflow-scrolling: touch; } + md-dialog md-dialog-content:not([layout=row]) > *:first-child:not(.md-subheader) { + margin-top: 0; } + md-dialog md-dialog-content:focus { + outline: none; } + md-dialog md-dialog-content .md-subheader { + margin: 0; } + md-dialog md-dialog-content .md-subheader.sticky-clone { + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.16); } + md-dialog md-dialog-content.sticky-container { + padding: 0; } + md-dialog md-dialog-content.sticky-container > div { + padding: 24px; + padding-top: 0; } + md-dialog .md-actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + box-sizing: border-box; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + margin-bottom: 0; + padding-right: 8px; + padding-left: 16px; + min-height: 52px; + overflow: hidden; } + md-dialog .md-actions .md-button { + margin-bottom: 8px; + margin-left: 8px; + margin-right: 0; + margin-top: 8px; } + md-dialog.md-content-overflow .md-actions { + border-top-width: 1px; + border-top-style: solid; } + +@media screen and (-ms-high-contrast: active) { + md-dialog { + border: 1px solid #fff; } } + +@media (max-width: 600px) { + [flex-sm="100"] { + max-width: 100%; + max-height: 100%; + width: 100%; + height: 100%; + border-radius: 0; } } + +/*! divider/_extends.scss - */ +md-divider { + display: block; + border-top-width: 1px; + border-top-style: solid; + margin: 0; } + md-divider[md-inset] { + margin-left: 80px; } + +/*! fabSpeedDial/_extends.scss - */ +md-fab-speed-dial { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + /* + * Handle the animations + */ } + md-fab-speed-dial .md-css-variables { + z-index: 20; } + md-fab-speed-dial.md-is-open .md-fab-action-item { + visibility: visible; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + md-fab-speed-dial md-fab-actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: auto; } + md-fab-speed-dial md-fab-actions .md-fab-action-item { + visibility: hidden; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-fab-speed-dial.md-down { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + md-fab-speed-dial.md-down md-fab-trigger { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + md-fab-speed-dial.md-down md-fab-actions { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + md-fab-speed-dial.md-up { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + md-fab-speed-dial.md-up md-fab-trigger { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + md-fab-speed-dial.md-up md-fab-actions { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + md-fab-speed-dial.md-left { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + md-fab-speed-dial.md-left md-fab-trigger { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + md-fab-speed-dial.md-left md-fab-actions { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + md-fab-speed-dial.md-left md-fab-actions .md-fab-action-item { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-fab-speed-dial.md-right { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + md-fab-speed-dial.md-right md-fab-trigger { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + md-fab-speed-dial.md-right md-fab-actions { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + md-fab-speed-dial.md-right md-fab-actions .md-fab-action-item { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-fab-speed-dial.md-scale .md-fab-action-item { + opacity: 0; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transition-duration: 0.1428571429s; + transition-duration: 0.1428571429s; } + +md-grid-list { + box-sizing: border-box; + display: block; + position: relative; } + md-grid-list *, + md-grid-list *:before, + md-grid-list *:after { + box-sizing: border-box; } + md-grid-list md-grid-tile { + display: block; + position: absolute; } + md-grid-list md-grid-tile figure { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 0; + margin: 0; } + md-grid-list md-grid-tile md-grid-tile-header, + md-grid-list md-grid-tile md-grid-tile-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + color: #fff; + background: rgba(0, 0, 0, 0.18); + overflow: hidden; + position: absolute; + left: 0; + right: 0; } + md-grid-list md-grid-tile md-grid-tile-header h3, + md-grid-list md-grid-tile md-grid-tile-header h4, + md-grid-list md-grid-tile md-grid-tile-footer h3, + md-grid-list md-grid-tile md-grid-tile-footer h4 { + font-weight: 400; + margin: 0 0 0 16px; } + md-grid-list md-grid-tile md-grid-tile-header h3, + md-grid-list md-grid-tile md-grid-tile-footer h3 { + font-size: 14px; } + md-grid-list md-grid-tile md-grid-tile-header h4, + md-grid-list md-grid-tile md-grid-tile-footer h4 { + font-size: 12px; } + md-grid-list md-grid-tile md-grid-tile-header { + top: 0; } + md-grid-list md-grid-tile md-grid-tile-footer { + bottom: 0; } + +@media screen and (-ms-high-contrast: active) { + md-grid-tile { + border: 1px solid #fff; } + md-grid-tile-footer { + border-top: 1px solid #fff; } } + +.sg-color-picker md-grid-tile { + border-radius: 25%; } + .sg-color-picker md-grid-tile:hover, + .sg-color-picker md-grid-tile:active { + cursor: pointer; + -webkit-transform: scale(1.5); + -ms-transform: scale(1.5); + transform: scale(1.5); } + +[sg-toggle-grid] md-grid-tile { + border-radius: 5%; } + [sg-toggle-grid] md-grid-tile.iconButton:hover { + background-color: #8ebfbb; + color: #fff; + cursor: pointer; } + [sg-toggle-grid] md-grid-tile.sg-active, [sg-toggle-grid] md-grid-tile.sg-active:hover { + background-color: #bfe0dd; + color: #fff; } + +/*! icon/_extends.scss - */ +md-icon { + margin: auto; + background-repeat: no-repeat no-repeat; + display: inline-block; + vertical-align: middle; + fill: currentColor; + height: 24px; + width: 24px; } + md-icon svg { + pointer-events: none; } + md-icon[md-font-icon] { + line-height: 1; + width: auto; } + +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url("../fonts/MaterialIcons-Regular.eot"); + /* For IE6-8 */ + src: local("Material Icons"), local("MaterialIcons-Regular"), url("../fonts/MaterialIcons-Regular.woff2") format("woff2"), url("../fonts/MaterialIcons-Regular.woff") format("woff"), url("../fonts/MaterialIcons-Regular.ttf") format("truetype"); } + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + /* Preferred icon size */ + display: inline-block; + width: 1em; + height: 1em; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + /* Support for IE. */ + -webkit-font-feature-settings: 'liga'; + font-feature-settings: 'liga'; } + +md-icon { + -webkit-transition: 240ms; + transition: 240ms; } + md-icon.sg-icon-toolbar-bg { + font-size: 84px; + opacity: 0.2; + position: absolute; + right: 48px; + -webkit-transform: rotate(-15deg); + -ms-transform: rotate(-15deg); + transform: rotate(-15deg); } + md-icon.md-rotate-45 { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-icon.md-rotate-90 { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); } + md-icon.md-rotate-180 { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); } + md-icon.icon-alarm:before { + content: "\e855"; } + md-icon.icon-delegated:before, + md-icon.icon-arrow-forward:before { + content: "\e5c8"; } + md-icon.icon-accepted:before, + md-icon.icon-check:before { + content: "\e5ca"; } + md-icon.icon-clear:before { + content: "\e14c"; } + md-icon.icon-contacts:before { + content: "\e0ba"; } + md-icon.icon-event:before { + content: "\e878"; } + md-icon.icon-expand-less:before { + content: "\e5ce"; } + md-icon.icon-expand-more:before { + content: "\e5cf"; } + md-icon.icon-needs-action:before, + md-icon.icon-help:before { + content: "\e887"; } + md-icon.icon-more-horiz:before { + content: "\e5d3"; } + md-icon.icon-tentative:before, + md-icon.icon-person:before { + content: "\e7fd"; } + md-icon.icon-declined:before, + md-icon.icon-remove-circle:before { + content: "\e15c"; } + md-icon.icon-visibility-off:before { + content: "\e8f5"; } + md-icon.icon-vpn-key:before { + content: "\e0da"; } + +.sg-msg-flag md-icon { + color: #eaf5e9 !important; } + .sg-msg-flag md-icon.flagged { + color: #8ebfbb !important; } + +/*! input/_extends.scss - */ +md-input-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 2px; + padding-bottom: 26px; + /* + * The .md-input class is added to the input/textarea + */ } + md-input-container > md-icon { + position: absolute; + top: 5px; + left: 2px; } + md-input-container > md-icon + input { + margin-left: 36px; } + md-input-container textarea, + md-input-container input[type="text"], + md-input-container input[type="password"], + md-input-container input[type="datetime"], + md-input-container input[type="datetime-local"], + md-input-container input[type="date"], + md-input-container input[type="month"], + md-input-container input[type="time"], + md-input-container input[type="week"], + md-input-container input[type="number"], + md-input-container input[type="email"], + md-input-container input[type="url"], + md-input-container input[type="search"], + md-input-container input[type="tel"], + md-input-container input[type="color"] { + /* remove default appearance from all input/textarea */ + -moz-appearance: none; + -webkit-appearance: none; } + md-input-container input[type="date"], + md-input-container input[type="datetime-local"], + md-input-container input[type="month"], + md-input-container input[type="time"], + md-input-container input[type="week"] { + min-height: 26px; } + md-input-container textarea { + resize: none; + overflow: hidden; } + md-input-container textarea.md-input { + min-height: 26px; + -ms-flex-preferred-size: auto; } + md-input-container label { + position: relative; + top: -2px; } + md-input-container label:not(.md-no-float), + md-input-container .md-placeholder { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + pointer-events: none; + -webkit-font-smoothing: antialiased; + padding-left: 2px; + z-index: 1; + -webkit-transform: translate3d(0, 28px, 0) scale(1); + transform: translate3d(0, 28px, 0) scale(1); + -webkit-transition: -webkit-transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s; + transition: transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s; + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; } + html[dir=rtl] md-input-container label:not(.md-no-float), + html[dir=rtl] md-input-container .md-placeholder { + -webkit-transform-origin: right top; + -ms-transform-origin: right top; + transform-origin: right top; } + md-input-container .md-placeholder { + position: absolute; + top: 0; + opacity: 0; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, transform; + -webkit-transform: translate3d(0, 30px, 0); + transform: translate3d(0, 30px, 0); } + md-input-container .md-placeholder.md-static { + position: static; } + md-input-container.md-input-focused .md-placeholder { + opacity: 1; + -webkit-transform: translate3d(0, 24px, 0); + transform: translate3d(0, 24px, 0); } + md-input-container.md-input-has-value .md-placeholder { + -webkit-transition: none; + transition: none; + opacity: 0; } + md-input-container:not(.md-input-has-value) input:not(:focus), + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-ampm-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-day-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-hour-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-millisecond-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-minute-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-month-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-second-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-week-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-year-field, + md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-text { + color: transparent; } + md-input-container .md-input { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + display: block; + margin-top: auto; + background: none; + padding-top: 2px; + padding-bottom: 1px; + padding-left: 2px; + padding-right: 2px; + border-width: 0 0 1px 0; + line-height: 26px; + -ms-flex-preferred-size: 26px; + border-radius: 0; } + md-input-container .md-input:focus { + outline: none; } + md-input-container .md-input:invalid { + outline: none; + box-shadow: none; } + md-input-container .md-input.md-no-flex { + -webkit-box-flex: 0 !important; + -webkit-flex: none !important; + -ms-flex: none !important; + flex: none !important; } + md-input-container ng-messages, md-input-container data-ng-messages, md-input-container x-ng-messages, + md-input-container [ng-messages], md-input-container [data-ng-messages], md-input-container [x-ng-messages] { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; + position: relative; } + md-input-container ng-message, md-input-container data-ng-message, md-input-container x-ng-message, + md-input-container [ng-message], md-input-container [data-ng-message], md-input-container [x-ng-message], + md-input-container .md-char-counter { + position: absolute; + font-size: 12px; + line-height: 24px; } + md-input-container ng-message:not(.md-char-counter), md-input-container data-ng-message:not(.md-char-counter), md-input-container x-ng-message:not(.md-char-counter), + md-input-container [ng-message]:not(.md-char-counter), md-input-container [data-ng-message]:not(.md-char-counter), md-input-container [x-ng-message]:not(.md-char-counter), + md-input-container .md-char-counter:not(.md-char-counter) { + padding-right: 30px; } + md-input-container ng-message.ng-enter, md-input-container data-ng-message.ng-enter, md-input-container x-ng-message.ng-enter, + md-input-container [ng-message].ng-enter, md-input-container [data-ng-message].ng-enter, md-input-container [x-ng-message].ng-enter, + md-input-container .md-char-counter.ng-enter { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transition-delay: 0.2s; + transition-delay: 0.2s; } + md-input-container ng-message.ng-leave, md-input-container data-ng-message.ng-leave, md-input-container x-ng-message.ng-leave, + md-input-container [ng-message].ng-leave, md-input-container [data-ng-message].ng-leave, md-input-container [x-ng-message].ng-leave, + md-input-container .md-char-counter.ng-leave { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-input-container ng-message.ng-enter, + md-input-container ng-message.ng-leave.ng-leave-active, md-input-container data-ng-message.ng-enter, + md-input-container data-ng-message.ng-leave.ng-leave-active, md-input-container x-ng-message.ng-enter, + md-input-container x-ng-message.ng-leave.ng-leave-active, + md-input-container [ng-message].ng-enter, + md-input-container [ng-message].ng-leave.ng-leave-active, md-input-container [data-ng-message].ng-enter, + md-input-container [data-ng-message].ng-leave.ng-leave-active, md-input-container [x-ng-message].ng-enter, + md-input-container [x-ng-message].ng-leave.ng-leave-active, + md-input-container .md-char-counter.ng-enter, + md-input-container .md-char-counter.ng-leave.ng-leave-active { + opacity: 0; + -webkit-transform: translate3d(0, -20%, 0); + transform: translate3d(0, -20%, 0); } + md-input-container ng-message.ng-leave, + md-input-container ng-message.ng-enter.ng-enter-active, md-input-container data-ng-message.ng-leave, + md-input-container data-ng-message.ng-enter.ng-enter-active, md-input-container x-ng-message.ng-leave, + md-input-container x-ng-message.ng-enter.ng-enter-active, + md-input-container [ng-message].ng-leave, + md-input-container [ng-message].ng-enter.ng-enter-active, md-input-container [data-ng-message].ng-leave, + md-input-container [data-ng-message].ng-enter.ng-enter-active, md-input-container [x-ng-message].ng-leave, + md-input-container [x-ng-message].ng-enter.ng-enter-active, + md-input-container .md-char-counter.ng-leave, + md-input-container .md-char-counter.ng-enter.ng-enter-active { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + md-input-container .md-char-counter { + bottom: 2px; + right: 2px; } + md-input-container.md-input-focused label:not(.md-no-float), + md-input-container.md-input-has-value label:not(.md-no-float) { + -webkit-transform: translate3d(0, 6px, 0) scale(0.75); + transform: translate3d(0, 6px, 0) scale(0.75); } + md-input-container.md-input-focused .md-input, + md-input-container .md-input.ng-invalid.ng-dirty { + padding-bottom: 0; + border-width: 0 0 2px 0; } + md-input-container .md-input[disabled], + [disabled] md-input-container .md-input { + background-position: 0 bottom; + background-size: 4px 1px; + background-repeat: repeat-x; + margin-bottom: -1px; } + +md-input-container.md-icon-float { + margin-top: -16px; + -webkit-transition: margin-top 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: margin-top 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); } + md-input-container.md-icon-float > label { + pointer-events: none; + position: absolute; + margin-left: 36px; } + md-input-container.md-icon-float > md-icon { + top: 26px; + left: 2px; } + md-input-container.md-icon-float > md-icon + input, + md-input-container.md-icon-float > md-icon + textarea { + margin-left: 36px; } + md-input-container.md-icon-float > input, + md-input-container.md-icon-float > textarea { + padding-top: 24px; } + md-input-container.md-icon-float.md-input-focused, + md-input-container.md-icon-float.md-input-has-value { + margin-top: -8px; } + md-input-container.md-icon-float.md-input-focused label, + md-input-container.md-icon-float.md-input-has-value label { + -webkit-transform: translate3d(0, 6px, 0) scale(0.75); + transform: translate3d(0, 6px, 0) scale(0.75); + -webkit-transition: -webkit-transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.5s; + transition: transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.5s; } + +@media screen and (-ms-high-contrast: active) { + md-input-container.md-default-theme > md-icon { + fill: #fff; } } + +md-input-container.md-input-number { + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 4em; } + md-input-container.md-input-number input { + text-align: center; } + +md-input-container.md-no-flex { + -webkit-box-flex: 0 !important; + -webkit-flex: none !important; + -ms-flex: none !important; + flex: none !important; } + +md-input-container .bgroup { + display: block; } + +.bgroup b { + left-margin: -1.25em; } + +.PseudoField input { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + display: block; + background: none; + padding-top: 2px; + padding-bottom: 0; + border-width: 0 0 1px 0; + line-height: 26px; + -ms-flex-preferred-size: 26px; } + .PseudoField input:focus { + outline: none; } + +/*! _extends.scss - */ +md-list { + display: block; + padding: 8px 0px 8px 0px; } + md-list .md-subheader { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.010em; + line-height: 0.75em; } + +md-list-item.md-proxy-focus.md-focused .md-no-style { + -webkit-transition: background-color 0.15s linear; + transition: background-color 0.15s linear; } + +md-list-item.md-no-proxy, +md-list-item .md-no-style { + position: relative; + padding: 0px 16px; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; } + md-list-item.md-no-proxy.md-button, + md-list-item .md-no-style.md-button { + font-size: inherit; + height: inherit; + text-align: left; + text-transform: none; + width: 100%; + white-space: normal; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: inherit; + -ms-flex-direction: inherit; + flex-direction: inherit; + -webkit-box-align: inherit; + -webkit-align-items: inherit; + -ms-flex-align: inherit; + align-items: inherit; } + md-list-item.md-no-proxy:focus, + md-list-item .md-no-style:focus { + outline: none; } + +md-list-item.md-with-secondary { + position: relative; } + +md-list-item.md-clickable:hover { + cursor: pointer; } + +md-list-item md-divider { + position: absolute; + bottom: 0; + left: 0; + width: 100%; } + md-list-item md-divider[md-inset] { + left: 96px; + width: calc(100% - 96px); + margin: 0; } + +md-list-item, md-list-item .md-list-item-inner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-height: 64px; } + md-list-item > div.md-primary > md-icon, + md-list-item > div.md-secondary > md-icon, + md-list-item > md-icon:first-child, + md-list-item > md-icon.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-icon, + md-list-item .md-list-item-inner > div.md-secondary > md-icon, + md-list-item .md-list-item-inner > md-icon:first-child, + md-list-item .md-list-item-inner > md-icon.md-secondary { + width: 24px; + margin-top: 16px; + margin-bottom: 12px; + box-sizing: content-box; } + md-list-item > div.md-primary > md-checkbox, + md-list-item > div.md-secondary > md-checkbox, + md-list-item > md-checkbox:first-child, + md-list-item md-checkbox.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-checkbox, + md-list-item .md-list-item-inner > div.md-secondary > md-checkbox, + md-list-item .md-list-item-inner > md-checkbox:first-child, + md-list-item .md-list-item-inner md-checkbox.md-secondary { + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; } + md-list-item > div.md-primary > md-checkbox .md-label, + md-list-item > div.md-secondary > md-checkbox .md-label, + md-list-item > md-checkbox:first-child .md-label, + md-list-item md-checkbox.md-secondary .md-label, md-list-item .md-list-item-inner > div.md-primary > md-checkbox .md-label, + md-list-item .md-list-item-inner > div.md-secondary > md-checkbox .md-label, + md-list-item .md-list-item-inner > md-checkbox:first-child .md-label, + md-list-item .md-list-item-inner md-checkbox.md-secondary .md-label { + display: none; } + md-list-item > md-icon:first-child, md-list-item .md-list-item-inner > md-icon:first-child { + margin-right: 32px; } + md-list-item > md-checkbox:first-child, md-list-item .md-list-item-inner > md-checkbox:first-child { + width: 24px; + margin-left: 3px; + margin-right: 29px; } + md-list-item > .md-avatar:first-child, md-list-item .md-list-item-inner > .md-avatar:first-child { + width: 40px; + height: 40px; + margin-top: 8px; + margin-bottom: 8px; + margin-right: 16px; + border-radius: 50%; + box-sizing: content-box; } + md-list-item md-checkbox.md-secondary, + md-list-item md-switch.md-secondary, md-list-item .md-list-item-inner md-checkbox.md-secondary, + md-list-item .md-list-item-inner md-switch.md-secondary { + margin-right: 0; + margin-top: 0; + margin-bottom: 0; } + md-list-item button.md-button.md-secondary-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container { + background-color: transparent; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + border-radius: 50%; + margin: 0px; + min-width: 0px; } + md-list-item button.md-button.md-secondary-container .md-ripple, + md-list-item button.md-button.md-secondary-container .md-ripple-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple, + md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple-container { + border-radius: 50%; } + md-list-item .md-secondary-container, + md-list-item .md-secondary, md-list-item .md-list-item-inner .md-secondary-container, + md-list-item .md-list-item-inner .md-secondary { + margin-left: 16px; + position: absolute; + right: 16px; + top: 50%; + -webkit-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); } + md-list-item > .md-button.md-secondary-container > .md-secondary, md-list-item .md-list-item-inner > .md-button.md-secondary-container > .md-secondary { + margin-left: 0px; + position: static; } + md-list-item > p, md-list-item > .md-list-item-inner > p, md-list-item .md-list-item-inner > p, md-list-item .md-list-item-inner > .md-list-item-inner > p { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + margin: 0; } + +md-list-item.md-2-line, +md-list-item.md-2-line > .md-no-style, +md-list-item.md-3-line, +md-list-item.md-3-line > .md-no-style { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + md-list-item.md-2-line .md-list-item-text, + md-list-item.md-2-line > .md-no-style .md-list-item-text, + md-list-item.md-3-line .md-list-item-text, + md-list-item.md-3-line > .md-no-style .md-list-item-text { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 16px 0; + text-overflow: ellipsis; } + md-list-item.md-2-line .md-list-item-text.md-offset, + md-list-item.md-2-line > .md-no-style .md-list-item-text.md-offset, + md-list-item.md-3-line .md-list-item-text.md-offset, + md-list-item.md-3-line > .md-no-style .md-list-item-text.md-offset { + margin-left: 56px; } + md-list-item.md-2-line .md-list-item-text h3, + md-list-item.md-2-line > .md-no-style .md-list-item-text h3, + md-list-item.md-3-line .md-list-item-text h3, + md-list-item.md-3-line > .md-no-style .md-list-item-text h3 { + font-size: 16px; + font-weight: 400; + letter-spacing: 0.010em; + margin: 0 0 6px 0; + line-height: 0.75em; } + md-list-item.md-2-line .md-list-item-text h4, + md-list-item.md-2-line > .md-no-style .md-list-item-text h4, + md-list-item.md-3-line .md-list-item-text h4, + md-list-item.md-3-line > .md-no-style .md-list-item-text h4 { + font-size: 14px; + letter-spacing: 0.010em; + margin: 10px 0 5px 0; + font-weight: 400; + line-height: 0.75em; } + md-list-item.md-2-line .md-list-item-text p, + md-list-item.md-2-line > .md-no-style .md-list-item-text p, + md-list-item.md-3-line .md-list-item-text p, + md-list-item.md-3-line > .md-no-style .md-list-item-text p { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.010em; + margin: 0 0 0 0; + line-height: 1.6em; } + +md-list-item.md-2-line > .md-avatar:first-child, +md-list-item.md-2-line > .md-no-style > .md-avatar:first-child { + margin-top: 12px; } + +md-list-item.md-2-line > md-icon:first-child, +md-list-item.md-2-line > .md-no-style > md-icon:first-child { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; } + +md-list-item.md-2-line .md-list-item-text, +md-list-item.md-2-line > .md-no-style .md-list-item-text { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-top: 19px; } + +md-list-item.md-3-line > md-icon:first-child, +md-list-item.md-3-line > .md-avatar:first-child, +md-list-item.md-3-line > .md-no-style > md-icon:first-child, +md-list-item.md-3-line > .md-no-style > .md-avatar:first-child { + margin-top: 16px; } + +md-list-item .md-list-item-inner { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +md-list-item md-icon, +md-list-item .md-button md-icon { + margin-left: 0; } + +md-list-item .sg-item-name { + font-size: 14px; + max-width: 75%; + text-transform: initial; + overflow: hidden; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + text-overflow: ellipsis; + white-space: nowrap; } + +md-list-item .sg-inline-list-icon-label { + text-transform: uppercase; } + +.md-list-item-inner > i:first-child { + margin-left: 16px; } + +.md-tile-right { + padding-right: 0px; } + +.md-tile-left, +.md-tile-left-card:before, +.sg-avatar:before, .md-tile-left-list:before, +.sg-list-avatar:before, .md-tile-left-selected:before, +.sg-selected-avatar:before, .md-tile-left-accepted:before, +.sg-accepted:before, .md-tile-left-declined:before, +.sg-declined:before, .md-tile-left-delegated:before, +.sg-delegated:before, .md-tile-left-needs-action:before, +.sg-needs-action:before, .md-tile-left-tentative:before, +.sg-tentative:before, .md-tile-right { + border-radius: 100%; + padding: 16px; + width: 72px; + height: 72px; + line-height: 72px; + background-clip: content-box; } + +.md-tile-right { + margin-right: -16px; } + +div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-tile-left-list:before, div.sg-list-avatar:before, div.md-tile-left-selected:before, div.sg-selected-avatar:before, div.md-tile-left-accepted:before, div.sg-accepted:before, div.md-tile-left-declined:before, div.sg-declined:before, div.md-tile-left-delegated:before, div.sg-delegated:before, div.md-tile-left-needs-action:before, div.sg-needs-action:before, div.md-tile-left-tentative:before, div.sg-tentative:before { + min-width: 72px; } + +.sg-tile-icons { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: start; + -webkit-justify-content: start; + -ms-flex-pack: start; + justify-content: start; + width: 32px; + height: 56px; } + .sg-tile-icons md-icon { + font-size: 12px; + color: rgba(0, 0, 0, 0.54); + margin: 2px; } + +.sg-avatars { + margin: 8px 0 0 8px; } + .sg-avatars img { + border-radius: 100%; + margin-right: 8px; } + +.md-tile-left:before, .md-tile-left-card:before, .sg-avatar:before, .md-tile-left-list:before, .sg-list-avatar:before, .md-tile-left-selected:before, .sg-selected-avatar:before, .md-tile-left-accepted:before, .sg-accepted:before, .md-tile-left-declined:before, .sg-declined:before, .md-tile-left-delegated:before, .sg-delegated:before, .md-tile-left-needs-action:before, .sg-needs-action:before, .md-tile-left-tentative:before, .sg-tentative:before { + font-family: 'Material Icons'; + font-size: 40px; + color: rgba(0, 0, 0, 0.26); } + +.md-tile-left-card:before, .sg-avatar:before { + content: "\e7fd"; } + +.md-tile-left-list:before, .sg-list-avatar:before { + content: "\e7ef"; } + +.md-tile-left-selected:before, .sg-selected-avatar:before { + content: "\e5ca"; } + +.md-tile-left-accepted:before, .sg-accepted:before { + background-color: rgba(0, 255, 0, 0.3) !important; + content: "\e5ca"; + color: rgba(0, 0, 0, 0.5); } + +.md-tile-left-declined:before, .sg-declined:before { + background-color: rgba(255, 0, 0, 0.3) !important; + content: "\e15b"; + color: rgba(0, 0, 0, 0.5); } + +.md-tile-left-delegated:before, .sg-delegated:before { + background-color: rgba(192, 192, 192, 0.3) !important; + content: "\e5c8"; + color: rgba(0, 0, 0, 0.5); } + +.md-tile-left-needs-action:before, .sg-needs-action:before { + background-color: rgba(255, 255, 0, 0.3) !important; + content: "?"; } + +.md-tile-left-tentative:before, .sg-tentative:before { + background-color: rgba(255, 255, 0, 0.3) !important; + content: "\e7fd"; } + +/*! menu/_extends.scss - */ +.md-open-menu-container { + position: fixed; + left: 0; + top: 0; + z-index: 99; + opacity: 0; + border-radius: 2px; + overflow: hidden; } + .md-open-menu-container md-menu-divider { + margin-top: 4px; + margin-bottom: 4px; + height: 1px; + width: 100%; } + .md-open-menu-container md-menu-content > * { + opacity: 0; } + .md-open-menu-container:not(.md-clickable) { + pointer-events: none; } + .md-open-menu-container.md-active { + opacity: 1; + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transition-duration: 200ms; + transition-duration: 200ms; } + .md-open-menu-container.md-active > md-menu-content > * { + opacity: 1; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transition-duration: 200ms; + transition-duration: 200ms; + -webkit-transition-delay: 100ms; + transition-delay: 100ms; } + .md-open-menu-container.md-leave { + opacity: 0; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transition-duration: 250ms; + transition-duration: 250ms; } + +md-menu-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 8px 0; + max-height: 304px; + overflow-y: auto; } + md-menu-content.md-dense { + max-height: 208px; } + md-menu-content.md-dense md-menu-item { + height: 32px; } + +md-menu-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + min-height: 48px; + height: 48px; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + md-menu-item > * { + width: 100%; + margin: auto 0; + padding-left: 16px; + padding-right: 16px; } + md-menu-item > .md-button { + border-radius: 0; + margin: auto 0; + font-size: 15px; + text-transform: none; + font-weight: 400; + text-align: start; + height: 100%; + padding-left: 16px; + padding-right: 16px; + display: inline-block; + -webkit-box-align: baseline; + -webkit-align-items: baseline; + -ms-flex-align: baseline; + align-items: baseline; + -webkit-align-content: left; + -ms-flex-line-pack: left; + align-content: left; + width: 100%; } + md-menu-item > .md-button md-icon { + margin: auto 16px auto 0; } + md-menu-item > .md-button p { + display: inline-block; + margin: auto; } + md-menu-item > .md-button span { + margin-top: auto; + margin-bottom: auto; } + +.md-menu { + padding: 8px 0; } + +md-toolbar .md-menu { + height: auto; + margin: auto; } + +@media (max-width: 599px) { + md-menu-content { + min-width: 112px; } + md-menu-content[width="3"] { + min-width: 168px; } + md-menu-content[width="4"] { + min-width: 224px; } + md-menu-content[width="5"] { + min-width: 280px; } + md-menu-content[width="6"] { + min-width: 336px; } + md-menu-content[width="7"] { + min-width: 392px; } } + +@media (min-width: 600px) { + md-menu-content { + min-width: 96px; } + md-menu-content[width="3"] { + min-width: 192px; } + md-menu-content[width="4"] { + min-width: 256px; } + md-menu-content[width="5"] { + min-width: 320px; } + md-menu-content[width="6"] { + min-width: 384px; } + md-menu-content[width="7"] { + min-width: 448px; } } + +/*! progressLinear/_extends.scss - */ +md-progress-linear:not([md-mode="indeterminate"]) { + display: block; + width: 100%; + height: 5px; } + md-progress-linear:not([md-mode="indeterminate"]) .md-container { + overflow: hidden; + position: relative; + height: 5px; + top: 5px; + -webkit-transform: translate(0, 5px) scale(1, 0); + -ms-transform: translate(0, 5px) scale(1, 0); + transform: translate(0, 5px) scale(1, 0); + -webkit-transition: all 0.3s linear; + transition: all 0.3s linear; } + md-progress-linear:not([md-mode="indeterminate"]) .md-container.md-ready { + -webkit-transform: translate(0, 0) scale(1, 1); + -ms-transform: translate(0, 0) scale(1, 1); + transform: translate(0, 0) scale(1, 1); } + md-progress-linear:not([md-mode="indeterminate"]) .md-bar { + height: 5px; + position: absolute; + width: 100%; } + md-progress-linear:not([md-mode="indeterminate"]) .md-bar1, md-progress-linear:not([md-mode="indeterminate"]) .md-bar2 { + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; } + md-progress-linear:not([md-mode="indeterminate"])[md-mode=determinate] .md-bar1 { + display: none; } + md-progress-linear:not([md-mode="indeterminate"])[md-mode=buffer] .md-container { + background-color: transparent !important; } + md-progress-linear:not([md-mode="indeterminate"])[md-mode=buffer] .md-dashed:before { + content: ""; + display: block; + height: 5px; + width: 100%; + margin-top: 0; + position: absolute; + background-color: transparent; + background-size: 10px 10px !important; + background-position: 0px -23px; + -webkit-animation: buffer 3s infinite linear; + animation: buffer 3s infinite linear; } + md-progress-linear:not([md-mode="indeterminate"])[md-mode=query] .md-bar2 { + -webkit-animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); + animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); } + +md-progress-linear[md-mode="indeterminate"] { + display: block; + width: 100%; + height: 5px; + position: relative; } + md-progress-linear[md-mode="indeterminate"] .md-container { + width: 100%; + overflow: hidden; + position: relative; + height: 5px; + top: 5px; + -webkit-transition: all 0.3s linear; + transition: all 0.3s linear; } + md-progress-linear[md-mode="indeterminate"] .md-container .md-bar { + height: 5px; + left: 0; + width: 80%; + position: absolute; + top: 0; + bottom: 0; } + md-progress-linear[md-mode="indeterminate"] .md-container .md-bar1 { + -webkit-animation: md-progress-linear-indeterminate-scale-1 4s infinite, md-progress-linear-indeterminate-1 4s infinite; + animation: md-progress-linear-indeterminate-scale-1 4s infinite, md-progress-linear-indeterminate-1 4s infinite; } + md-progress-linear[md-mode="indeterminate"] .md-container .md-bar2 { + -webkit-animation: md-progress-linear-indeterminate-scale-2 4s infinite, md-progress-linear-indeterminate-2 4s infinite; + animation: md-progress-linear-indeterminate-scale-2 4s infinite, md-progress-linear-indeterminate-2 4s infinite; } + +@-webkit-keyframes query { + 0% { + opacity: 1; + -webkit-transform: translateX(35%) scale(0.3, 1); + transform: translateX(35%) scale(0.3, 1); } + 100% { + opacity: 0; + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } } + +@keyframes query { + 0% { + opacity: 1; + -webkit-transform: translateX(35%) scale(0.3, 1); + transform: translateX(35%) scale(0.3, 1); } + 100% { + opacity: 0; + -webkit-transform: translateX(-50%) scale(0, 1); + transform: translateX(-50%) scale(0, 1); } } + +@-webkit-keyframes buffer { + 0% { + opacity: 1; + background-position: 0px -23px; } + 50% { + opacity: 0; } + 100% { + opacity: 1; + background-position: -200px -23px; } } + +@keyframes buffer { + 0% { + opacity: 1; + background-position: 0px -23px; } + 50% { + opacity: 0; } + 100% { + opacity: 1; + background-position: -200px -23px; } } + +@-webkit-keyframes md-progress-linear-indeterminate-scale-1 { + 0% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 36.6% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: cubic-bezier(0.334731432, 0.124819821, 0.785843996, 1); + animation-timing-function: cubic-bezier(0.334731432, 0.124819821, 0.785843996, 1); } + 69.15% { + -webkit-transform: scaleX(0.83); + transform: scaleX(0.83); + -webkit-animation-timing-function: cubic-bezier(0.225732004, 0, 0.233648906, 1.3709798); + animation-timing-function: cubic-bezier(0.225732004, 0, 0.233648906, 1.3709798); } + 100% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); } } + +@keyframes md-progress-linear-indeterminate-scale-1 { + 0% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 36.6% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: cubic-bezier(0.334731432, 0.124819821, 0.785843996, 1); + animation-timing-function: cubic-bezier(0.334731432, 0.124819821, 0.785843996, 1); } + 69.15% { + -webkit-transform: scaleX(0.83); + transform: scaleX(0.83); + -webkit-animation-timing-function: cubic-bezier(0.225732004, 0, 0.233648906, 1.3709798); + animation-timing-function: cubic-bezier(0.225732004, 0, 0.233648906, 1.3709798); } + 100% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); } } + +@-webkit-keyframes md-progress-linear-indeterminate-1 { + 0% { + left: -105.166666667%; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 20% { + left: -105.166666667%; + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495818703); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495818703); } + 69.15% { + left: 21.5%; + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.38135197, 0.55, 0.956352125); + animation-timing-function: cubic-bezier(0.302435, 0.38135197, 0.55, 0.956352125); } + 100% { + left: 95.4444444444%; } } + +@keyframes md-progress-linear-indeterminate-1 { + 0% { + left: -105.166666667%; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + 20% { + left: -105.166666667%; + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495818703); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495818703); } + 69.15% { + left: 21.5%; + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.38135197, 0.55, 0.956352125); + animation-timing-function: cubic-bezier(0.302435, 0.38135197, 0.55, 0.956352125); } + 100% { + left: 95.4444444444%; } } + +@-webkit-keyframes md-progress-linear-indeterminate-scale-2 { + 0% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: cubic-bezier(0.205028172, 0.057050836, 0.57660995, 0.453970841); + animation-timing-function: cubic-bezier(0.205028172, 0.057050836, 0.57660995, 0.453970841); } + 19.15% { + -webkit-transform: scaleX(0.57); + transform: scaleX(0.57); + -webkit-animation-timing-function: cubic-bezier(0.152312994, 0.196431957, 0.648373778, 1.00431535); + animation-timing-function: cubic-bezier(0.152312994, 0.196431957, 0.648373778, 1.00431535); } + 44.15% { + -webkit-transform: scaleX(0.91); + transform: scaleX(0.91); + -webkit-animation-timing-function: cubic-bezier(0.25775882, -0.003163357, 0.211761916, 1.38178961); + animation-timing-function: cubic-bezier(0.25775882, -0.003163357, 0.211761916, 1.38178961); } + 100% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); } } + +@keyframes md-progress-linear-indeterminate-scale-2 { + 0% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); + -webkit-animation-timing-function: cubic-bezier(0.205028172, 0.057050836, 0.57660995, 0.453970841); + animation-timing-function: cubic-bezier(0.205028172, 0.057050836, 0.57660995, 0.453970841); } + 19.15% { + -webkit-transform: scaleX(0.57); + transform: scaleX(0.57); + -webkit-animation-timing-function: cubic-bezier(0.152312994, 0.196431957, 0.648373778, 1.00431535); + animation-timing-function: cubic-bezier(0.152312994, 0.196431957, 0.648373778, 1.00431535); } + 44.15% { + -webkit-transform: scaleX(0.91); + transform: scaleX(0.91); + -webkit-animation-timing-function: cubic-bezier(0.25775882, -0.003163357, 0.211761916, 1.38178961); + animation-timing-function: cubic-bezier(0.25775882, -0.003163357, 0.211761916, 1.38178961); } + 100% { + -webkit-transform: scaleX(0.1); + transform: scaleX(0.1); } } + +@-webkit-keyframes md-progress-linear-indeterminate-2 { + 0% { + left: -54.8888888889%; + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.5150584, 0.409684966); + animation-timing-function: cubic-bezier(0.15, 0, 0.5150584, 0.409684966); } + 25% { + left: -17.25%; + -webkit-animation-timing-function: cubic-bezier(0.3103299, 0.284057684, 0.8, 0.733718979); + animation-timing-function: cubic-bezier(0.3103299, 0.284057684, 0.8, 0.733718979); } + 48.35% { + left: 29.5%; + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627034903, 0.6, 0.902025796); + animation-timing-function: cubic-bezier(0.4, 0.627034903, 0.6, 0.902025796); } + 100% { + left: 117.388888889%; } } + +@keyframes md-progress-linear-indeterminate-2 { + 0% { + left: -54.8888888889%; + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.5150584, 0.409684966); + animation-timing-function: cubic-bezier(0.15, 0, 0.5150584, 0.409684966); } + 25% { + left: -17.25%; + -webkit-animation-timing-function: cubic-bezier(0.3103299, 0.284057684, 0.8, 0.733718979); + animation-timing-function: cubic-bezier(0.3103299, 0.284057684, 0.8, 0.733718979); } + 48.35% { + left: 29.5%; + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627034903, 0.6, 0.902025796); + animation-timing-function: cubic-bezier(0.4, 0.627034903, 0.6, 0.902025796); } + 100% { + left: 117.388888889%; } } + +/*! radioButton/_extends.scss - */ +md-radio-button, +.md-switch-thumb { + box-sizing: border-box; + display: block; + margin: 15px; + white-space: nowrap; + cursor: pointer; } + md-radio-button *, + md-radio-button *:before, + md-radio-button *:after, + .md-switch-thumb *, + .md-switch-thumb *:before, + .md-switch-thumb *:after { + box-sizing: border-box; } + md-radio-button input, + .md-switch-thumb input { + display: none; } + md-radio-button .md-container, + .md-switch-thumb .md-container { + position: relative; + top: 4px; + display: inline-block; + width: 16px; + height: 16px; + cursor: pointer; } + md-radio-button .md-container .md-ripple-container, + .md-switch-thumb .md-container .md-ripple-container { + position: absolute; + display: block; + width: 48px; + height: 48px; + left: -16px; + top: -16px; } + md-radio-button .md-container:before, + .md-switch-thumb .md-container:before { + background-color: transparent; + border-radius: 50%; + content: ''; + position: absolute; + display: block; + height: auto; + left: 0; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: all 0.5s; + transition: all 0.5s; + width: auto; } + md-radio-button.md-align-top-left > div.md-container, + .md-switch-thumb.md-align-top-left > div.md-container { + top: -15px; } + md-radio-button .md-off, + .md-switch-thumb .md-off { + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; + border-style: solid; + border-width: 2px; + border-radius: 50%; + -webkit-transition: border-color ease 0.28s; + transition: border-color ease 0.28s; } + md-radio-button .md-on, + .md-switch-thumb .md-on { + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; + border-radius: 50%; + -webkit-transition: -webkit-transform ease 0.28s; + transition: transform ease 0.28s; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); } + md-radio-button.md-checked .md-on, + .md-switch-thumb.md-checked .md-on { + -webkit-transform: scale(0.5); + -ms-transform: scale(0.5); + transform: scale(0.5); } + md-radio-button .md-label, + .md-switch-thumb .md-label { + position: relative; + display: inline-block; + margin-left: 10px; + margin-right: 0; + vertical-align: middle; + white-space: normal; + pointer-events: none; + width: auto; } + html[dir=rtl] md-radio-button .md-label, + html[dir=rtl] .md-switch-thumb .md-label { + margin-left: 0; } + html[dir=rtl] md-radio-button .md-label, + html[dir=rtl] .md-switch-thumb .md-label { + margin-right: 10px; } + md-radio-button .circle, + .md-switch-thumb .circle { + border-radius: 50%; } + +md-radio-group:focus { + outline: none; } + +md-radio-group.md-focused .md-checked .md-container:before { + left: -8px; + top: -8px; + right: -8px; + bottom: -8px; } + +@media screen and (-ms-high-contrast: active) { + md-radio-button.md-default-theme .md-on { + background-color: #fff; } } + +/*! sticky/_extends.scss - */ +.md-select-menu-container { + position: fixed; + left: 0; + top: 0; + z-index: 99; + opacity: 0; } + .md-select-menu-container:not(.md-clickable) { + pointer-events: none; } + .md-select-menu-container md-progress-circular { + display: table; + margin: 24px auto !important; } + .md-select-menu-container.md-active { + opacity: 1; } + .md-select-menu-container.md-active md-select-menu { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transition-duration: 150ms; + transition-duration: 150ms; } + .md-select-menu-container.md-active md-select-menu > * { + opacity: 1; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transition-duration: 150ms; + transition-duration: 150ms; + -webkit-transition-delay: 100ms; + transition-delay: 100ms; } + .md-select-menu-container.md-leave { + opacity: 0; + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transition-duration: 250ms; + transition-duration: 250ms; } + +md-input-container > md-select { + margin: auto 0 0 0; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + +md-select { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin: 20px 0 26px 0; } + md-select:focus { + outline: none; } + md-select[disabled]:hover { + cursor: default; } + md-select:not([disabled]):hover { + cursor: pointer; } + md-select:not([disabled]).ng-invalid.ng-dirty .md-select-value { + border-bottom: 2px solid; + padding-bottom: 0; } + md-select:not([disabled]):focus .md-select-value { + border-bottom-width: 2px; + border-bottom-style: solid; + padding-bottom: 0; } + +.md-select-value { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 2px 2px 1px; + border-bottom-width: 1px; + border-bottom-style: solid; + background-color: transparent; + position: relative; + box-sizing: content-box; + min-width: 64px; + min-height: 26px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .md-select-value *:first-child { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + max-width: calc(100% - 2*8px); + -webkit-transform: translate3d(0, 2px, 0); + transform: translate3d(0, 2px, 0); } + .md-select-value .md-select-icon { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; + text-align: end; + width: 24px; + margin: 0 4px; + -webkit-transform: translate3d(0, 1px, 0); + transform: translate3d(0, 1px, 0); } + .md-select-value .md-select-icon:after { + display: block; + content: '\25BC'; + position: relative; + top: 2px; + speak: none; + -webkit-transform: scaleY(0.6) scaleX(1); + -ms-transform: scaleY(0.6) scaleX(1); + transform: scaleY(0.6) scaleX(1); } + .md-select-value.md-select-placeholder { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + pointer-events: none; + -webkit-font-smoothing: antialiased; + padding-left: 2px; + z-index: 1; } + +md-select-menu { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); + max-height: 256px; + min-height: 48px; + overflow-y: hidden; + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); } + md-select-menu.md-reverse { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } + md-select-menu:not(.md-overflow) md-content { + padding-top: 8px; + padding-bottom: 8px; } + html[dir=rtl] md-select-menu { + -webkit-transform-origin: right top; + -ms-transform-origin: right top; + transform-origin: right top; } + md-select-menu md-content { + min-width: 136px; + min-height: 48px; + max-height: 256px; + overflow-y: auto; } + md-select-menu > * { + opacity: 0; } + +md-option { + cursor: pointer; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: auto; + padding: 0 16px 0 16px; + height: 48px; } + md-option:focus { + outline: none; } + md-option .md-text { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: auto; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 16px; } + +md-optgroup { + display: block; } + md-optgroup label { + display: block; + font-size: 14px; + text-transform: uppercase; + padding: 16px; + font-weight: 500; } + md-optgroup md-option { + padding-left: 32px; + padding-right: 32px; } + +@media screen and (-ms-high-contrast: active) { + .md-select-backdrop { + background-color: transparent; } + md-select-menu { + border: 1px solid #fff; } } + +[layout="row"] .md-select-label { + padding-top: 4px; } + +md-select.md-default-theme.sg-toolbar-sort { + margin: 0 8px 4px 0; + color: #fff; } + md-select.md-default-theme.sg-toolbar-sort md-select-label.md-select-label { + border: none; + color: inherit; } + +md-select.md-default-theme.sg-logout { + margin-top: 8px; + color: #fff; } + md-select.md-default-theme.sg-logout md-select-label.md-select-label, + md-select.md-default-theme.sg-logout md-select-label.md-select-label.md-placeholder, + md-select.md-default-theme.sg-logout md-select-label.md-select-label * { + border: none; + color: #fff; } + +/*! sidenav/_extends.scss - */ +md-sidenav { + box-sizing: border-box; + position: absolute; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + z-index: 60; + width: 304px; + min-width: 304px; + max-width: 304px; + bottom: 0; + background-color: white; + overflow: auto; } + md-sidenav *, + md-sidenav *:before, + md-sidenav *:after { + box-sizing: border-box; } + md-sidenav ul { + list-style: none; } + md-sidenav.md-closed { + display: none; } + md-sidenav.md-closed-add, + md-sidenav.md-closed-remove { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + /* this is required as of 1.3x to properly + apply all styling in a show/hide animation */ + -webkit-transition: 0s all; + transition: 0s all; } + md-sidenav.md-closed-add.md-closed-add-active, + md-sidenav.md-closed-remove.md-closed-remove-active { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } + md-sidenav.md-locked-open-add, + md-sidenav.md-locked-open-remove { + position: static; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + md-sidenav.md-locked-open { + width: 304px; + min-width: 304px; + max-width: 304px; } + md-sidenav.md-locked-open, + md-sidenav.md-locked-open.md-closed, + md-sidenav.md-locked-open.md-closed.md-sidenav-left, + md-sidenav.md-locked-open.md-closed, + md-sidenav.md-locked-open.md-closed.md-sidenav-right, + md-sidenav.md-locked-open-remove.md-closed { + position: static; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + md-sidenav.md-locked-open-remove-active { + -webkit-transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + width: 0; + min-width: 0; } + md-sidenav.md-closed.md-locked-open-add { + width: 0; + min-width: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + md-sidenav.md-closed.md-locked-open-add-active { + -webkit-transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + width: 304px; + min-width: 304px; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + +.md-sidenav-backdrop.md-locked-open { + display: none; } + +.md-sidenav-left, md-sidenav { + left: 0; + top: 0; + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + .md-sidenav-left.md-closed, md-sidenav.md-closed { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } + +.md-sidenav-right { + left: 100%; + top: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } + .md-sidenav-right.md-closed { + -webkit-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + +@media (max-width: 360px) { + md-sidenav { + width: 85%; } } + +@media screen and (-ms-high-contrast: active) { + .md-sidenav-left, md-sidenav { + border-right: 1px solid #fff; } + .md-sidenav-right { + border-left: 1px solid #fff; } } + +md-sidenav { + background-color: #e2d2a3; } + @media (min-width: 1025px) { + md-sidenav.md-locked-open { + max-width: 20vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 20vw; + -ms-flex: 1 1 20vw; + flex: 1 1 20vw; } } + +.md-sidenav-left.md-whiteframe-z2, md-card.md-sidenav-left.sg-expanded, md-sidenav.md-whiteframe-z2 { + box-shadow: 8px 0px 17px 0 rgba(0, 0, 0, 0.2); } + +.md-sidenav-left md-content, +md-sidenav md-content, +.md-sidenav-left md-toolbar, md-sidenav md-toolbar { + background-color: inherit; + background-image: url("../img/cardboard-transp.png"); + background-blend-mode: multiply; } + +.md-sidenav-left md-toolbar, md-sidenav md-toolbar { + box-shadow: none; } + +.md-sidenav-right { + width: 512px; + max-width: 512px; } + .md-sidenav-right md-content, + .md-sidenav-right md-toolbar { + background-color: inherit; + background-image: none; } + +.sg-child-level-1 { + padding-left: 16px; } + +.sg-child-level-2 { + padding-left: 32px; } + +.sg-child-level-3 { + padding-left: 48px; } + +.sg-child-level-4 { + padding-left: 64px; } + +.sg-child-level-5 { + padding-left: 80px; } + +.sg-child-level-6 { + padding-left: 96px; } + +.sg-child-level-7 { + padding-left: 112px; } + +.sg-child-level-8 { + padding-left: 128px; } + +.sg-child-level-9 { + padding-left: 144px; } + +.sg-child-level-10 { + padding-left: 160px; } + +.sg-child-level-11 { + padding-left: 176px; } + +.md-sidenav-left.md-whiteframe-z1, md-sidenav.md-whiteframe-z1 { + box-shadow: 2px 0px 5px 0 rgba(0, 0, 0, 0.26); } + +.md-sidenav-left md-list-item, md-sidenav md-list-item { + -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; + transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; } + .md-sidenav-left md-list-item:hover, md-sidenav md-list-item:hover { + background-color: #a1ccc8; } + .md-sidenav-left md-list-item.sg-active, md-sidenav md-list-item.sg-active { + background-color: #b2d6d3; } + .md-sidenav-left md-list-item.sg-loading, md-sidenav md-list-item.sg-loading { + color: #ceebe8; } + +.md-sidenav-left md-bottom-sheet md-list-item:hover, md-sidenav md-bottom-sheet md-list-item:hover { + background-color: transparent; } + +/*! slider/_extends.scss - */ +@-webkit-keyframes sliderFocusThumb { + 0% { + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + opacity: 0; } } +@keyframes sliderFocusThumb { + 0% { + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + opacity: 0; } } + +md-slider { + height: 48px; + position: relative; + display: block; + margin-left: 4px; + margin-right: 4px; + padding: 0; + /** + * Track + */ + /** + * Slider thumb + */ + /* The sign that's focused in discrete mode */ + /** + * The border/background that comes in when focused in non-discrete mode + */ + /* Don't animate left/right while panning */ } + md-slider *, md-slider *:after { + box-sizing: border-box; } + md-slider .md-slider-wrapper { + position: relative; } + md-slider .md-track-container { + width: 100%; + position: absolute; + top: 23px; + height: 2px; } + md-slider .md-track { + position: absolute; + left: 0; + right: 0; + height: 100%; } + md-slider .md-track-fill { + -webkit-transition: width 0.05s linear; + transition: width 0.05s linear; } + md-slider .md-track-ticks { + position: absolute; + left: 0; + right: 0; + height: 100%; } + md-slider .md-track-ticks canvas { + width: 100%; } + md-slider .md-thumb-container { + position: absolute; + left: 0; + top: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + -webkit-transition: left 0.1s linear; + transition: left 0.1s linear; } + md-slider .md-thumb { + z-index: 1; + position: absolute; + left: -19px; + top: 5px; + width: 38px; + height: 38px; + border-radius: 38px; + -webkit-transform: scale(0.5); + -ms-transform: scale(0.5); + transform: scale(0.5); + -webkit-transition: all 0.1s linear; + transition: all 0.1s linear; } + md-slider .md-thumb:after { + content: ''; + position: absolute; + left: 3px; + top: 3px; + width: 32px; + height: 32px; + border-radius: 32px; + border-width: 3px; + border-style: solid; } + md-slider .md-sign { + /* Center the children (slider-thumb-text) */ + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + position: absolute; + left: -14px; + top: -20px; + width: 28px; + height: 28px; + border-radius: 28px; + -webkit-transform: scale(0.4) translate3d(0, 70px, 0); + transform: scale(0.4) translate3d(0, 70px, 0); + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + /* The arrow pointing down under the sign */ } + md-slider .md-sign:after { + position: absolute; + content: ''; + left: 0px; + border-radius: 16px; + top: 19px; + border-left: 14px solid transparent; + border-right: 14px solid transparent; + border-top-width: 16px; + border-top-style: solid; + opacity: 0; + -webkit-transform: translate3d(0, -8px, 0); + transform: translate3d(0, -8px, 0); + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + md-slider .md-sign .md-thumb-text { + z-index: 1; + font-size: 12px; + font-weight: bold; } + md-slider .md-focus-thumb { + position: absolute; + left: -24px; + top: 0px; + width: 48px; + height: 48px; + border-radius: 48px; + display: none; + opacity: 0; + background-color: #C0C0C0; + -webkit-animation: sliderFocusThumb 0.4s linear; + animation: sliderFocusThumb 0.4s linear; } + md-slider .md-focus-ring { + position: absolute; + left: -24px; + top: 0px; + width: 48px; + height: 48px; + border-radius: 48px; + border: 2px solid #D6D6D6; + background-color: transparent; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; } + md-slider .md-disabled-thumb { + position: absolute; + left: -22px; + top: 2px; + width: 44px; + height: 44px; + border-radius: 44px; + -webkit-transform: scale(0.35); + -ms-transform: scale(0.35); + transform: scale(0.35); + border-width: 6px; + border-style: solid; + display: none; } + md-slider.md-min .md-thumb:after { + background-color: white; } + md-slider.md-min .md-sign { + opacity: 0; } + md-slider:focus { + outline: none; } + md-slider.dragging .md-thumb-container, + md-slider.dragging .md-track-fill { + -webkit-transition: none; + transition: none; } + md-slider:not([md-discrete]) { + /* Hide the sign and ticks in non-discrete mode */ } + md-slider:not([md-discrete]) .md-track-ticks, + md-slider:not([md-discrete]) .md-sign { + display: none; } + md-slider:not([md-discrete]):not([disabled]):hover .md-thumb { + -webkit-transform: scale(0.6); + -ms-transform: scale(0.6); + transform: scale(0.6); } + md-slider:not([md-discrete]):not([disabled]):focus .md-focus-thumb, + md-slider:not([md-discrete]):not([disabled]).active .md-focus-thumb { + display: block; } + md-slider:not([md-discrete]):not([disabled]):focus .md-focus-ring, + md-slider:not([md-discrete]):not([disabled]).active .md-focus-ring { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); } + md-slider:not([md-discrete]):not([disabled]):focus .md-thumb, + md-slider:not([md-discrete]):not([disabled]).active .md-thumb { + -webkit-transform: scale(0.85); + -ms-transform: scale(0.85); + transform: scale(0.85); } + md-slider[md-discrete] { + /* Hide the focus thumb in discrete mode */ } + md-slider[md-discrete] .md-focus-thumb, + md-slider[md-discrete] .md-focus-ring { + display: none; } + md-slider[md-discrete]:not([disabled]):focus .md-sign, + md-slider[md-discrete]:not([disabled]):focus .md-sign:after, + md-slider[md-discrete]:not([disabled]).active .md-sign, + md-slider[md-discrete]:not([disabled]).active .md-sign:after { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0) scale(1); + transform: translate3d(0, 0, 0) scale(1); } + md-slider[disabled] .md-track-fill { + display: none; } + md-slider[disabled] .md-sign { + display: none; } + md-slider[disabled] .md-thumb { + -webkit-transform: scale(0.35); + -ms-transform: scale(0.35); + transform: scale(0.35); } + md-slider[disabled] .md-disabled-thumb { + display: block; } + +@media screen and (-ms-high-contrast: active) { + md-slider.md-default-theme .md-track { + border-bottom: 1px solid #fff; } } + +/*! sticky/_extends.scss - */ +.md-sticky-clone { + z-index: 2; + top: 0; + left: 0; + right: 0; + position: absolute !important; + -webkit-transform: translate3d(-9999px, -9999px, 0); + transform: translate3d(-9999px, -9999px, 0); } + .md-sticky-clone[sticky-state="active"] { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + .md-sticky-clone[sticky-state="active"]:not(.md-sticky-no-effect) .md-subheader-inner { + -webkit-animation: subheaderStickyHoverIn 0.3s ease-out both; + animation: subheaderStickyHoverIn 0.3s ease-out both; } + +/*! subheader/_extends.scss - */ +@-webkit-keyframes subheaderStickyHoverIn { + 0% { + box-shadow: 0 0 0 0 transparent; } + 100% { + box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } } +@keyframes subheaderStickyHoverIn { + 0% { + box-shadow: 0 0 0 0 transparent; } + 100% { + box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } } + +@-webkit-keyframes subheaderStickyHoverOut { + 0% { + box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } + 100% { + box-shadow: 0 0 0 0 transparent; } } + +@keyframes subheaderStickyHoverOut { + 0% { + box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } + 100% { + box-shadow: 0 0 0 0 transparent; } } + +.md-subheader { + display: block; + font-size: 14px; + font-weight: 500; + line-height: 1em; + margin: 0 0 0 0; + margin-right: 16px; + position: relative; } + .md-subheader .md-subheader-inner { + padding: 16px 0px 16px 16px; } + .md-subheader:not(.md-sticky-no-effect) { + -webkit-transition: 0.2s ease-out margin; + transition: 0.2s ease-out margin; } + .md-subheader:not(.md-sticky-no-effect):after { + position: absolute; + left: 0; + bottom: 0; + top: 0; + right: -16px; + content: ''; } + .md-subheader:not(.md-sticky-no-effect).md-sticky-clone { + z-index: 2; } + .md-subheader:not(.md-sticky-no-effect)[sticky-state="active"] { + margin-top: -2px; } + .md-subheader:not(.md-sticky-no-effect):not(.md-sticky-clone)[sticky-prev-state="active"] .md-subheader-inner:after { + -webkit-animation: subheaderStickyHoverOut 0.3s ease-out both; + animation: subheaderStickyHoverOut 0.3s ease-out both; } + .md-subheader .md-subheader-content { + z-index: 1; + position: relative; } + +.md-subheader .md-subheader-inner { + padding: 0 0 0 16px; } + +.sg-md-subheader--fixed { + position: fixed; + z-index: auto; + padding: 8px 8px 8px 16px; + background-color: transparent; } + +.sg-md-subheader--static { + position: static; + z-index: auto; + padding: 8px 8px 8px 16px; + background-color: transparent; + font-size: 14px; + font-weight: 600; } + +.sg-md-subheader { + font-weight: 600; + font-size: 14px; } + +.sg-md-subheader > * { + font-weight: inherit; + font-size: inherit; } + +/*! switch/_extends.scss - */ +md-switch { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + margin: 15px; + white-space: nowrap; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + md-switch .md-container { + cursor: -webkit-grab; + cursor: grab; + width: 36px; + height: 24px; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 8px; } + md-switch:not([disabled]) .md-dragging, + md-switch:not([disabled]).md-dragging .md-container { + cursor: -webkit-grabbing; + cursor: grabbing; } + md-switch.md-focused:not([disabled]) .md-thumb:before { + left: -8px; + top: -8px; + right: -8px; + bottom: -8px; } + md-switch.md-focused:not([disabled]):not(.md-checked) .md-thumb:before { + background-color: rgba(0, 0, 0, 0.12); } + md-switch .md-label { + border-color: transparent; + border-width: 0; } + md-switch .md-bar { + left: 1px; + width: 34px; + top: 5px; + height: 14px; + border-radius: 8px; + position: absolute; } + md-switch .md-thumb-container { + top: 2px; + left: 0; + width: 16px; + position: absolute; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 1; } + md-switch.md-checked .md-thumb-container { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } + md-switch .md-thumb { + position: absolute; + margin: 0; + left: 0; + top: 0; + outline: none; + height: 20px; + width: 20px; + border-radius: 50%; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); } + md-switch .md-thumb:before { + background-color: transparent; + border-radius: 50%; + content: ''; + position: absolute; + display: block; + height: auto; + left: 0; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: all 0.5s; + transition: all 0.5s; + width: auto; } + md-switch .md-thumb .md-ripple-container { + position: absolute; + display: block; + width: auto; + height: auto; + left: -20px; + top: -20px; + right: -20px; + bottom: -20px; } + md-switch:not(.md-dragging) .md-bar, + md-switch:not(.md-dragging) .md-thumb-container, + md-switch:not(.md-dragging) .md-thumb { + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transition-property: -webkit-transform, background-color; + transition-property: transform, background-color; } + md-switch:not(.md-dragging) .md-bar, + md-switch:not(.md-dragging) .md-thumb { + -webkit-transition-delay: 0.05s; + transition-delay: 0.05s; } + +@media screen and (-ms-high-contrast: active) { + md-switch.md-default-theme .md-bar { + background-color: #666; } + md-switch.md-default-theme.md-checked .md-bar { + background-color: #9E9E9E; } + md-switch.md-default-theme .md-thumb { + background-color: #fff; } } + +/*! tabs/_extends.scss - */ +@-webkit-keyframes md-tab-content-hide { + 0% { + opacity: 1; } + 50% { + opacity: 1; } + 100% { + opacity: 0; } } +@keyframes md-tab-content-hide { + 0% { + opacity: 1; } + 50% { + opacity: 1; } + 100% { + opacity: 0; } } + +md-tab-data { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + opacity: 0; } + +md-tabs { + display: block; + margin: 0; + border-radius: 2px; + overflow: hidden; + position: relative; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + md-tabs.ng-animate { + -webkit-transition: height 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: height 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + md-tabs:not(.md-no-tab-content):not(.md-dynamic-height) { + min-height: 248px; } + md-tabs[md-align-tabs="bottom"] md-tabs-wrapper { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 48px; } + md-tabs[md-align-tabs="bottom"] md-tabs-content-wrapper { + top: 0; + bottom: 48px; } + md-tabs.md-dynamic-height md-tabs-content-wrapper { + min-height: 0; + position: relative; + top: auto; + left: auto; + right: auto; + bottom: auto; + overflow: visible; } + md-tabs.md-dynamic-height md-tab-content.md-active { + position: relative; } + md-tabs[md-border-bottom] md-tabs-wrapper { + border-width: 0 0 1px; + border-style: solid; } + md-tabs[md-border-bottom]:not(.md-dynamic-height) md-tabs-content-wrapper { + top: 49px; } + +md-tabs-wrapper { + display: block; + position: relative; } + md-tabs-wrapper md-prev-button, md-tabs-wrapper md-next-button { + height: 100%; + width: 32px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + line-height: 1em; + z-index: 2; + cursor: pointer; + font-size: 16px; + background: transparent no-repeat center center; + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + md-tabs-wrapper md-prev-button:focus, md-tabs-wrapper md-next-button:focus { + outline: none; } + md-tabs-wrapper md-prev-button.md-disabled, md-tabs-wrapper md-next-button.md-disabled { + opacity: 0.25; + cursor: default; } + md-tabs-wrapper md-prev-button.ng-leave, md-tabs-wrapper md-next-button.ng-leave { + -webkit-transition: none; + transition: none; } + md-tabs-wrapper md-prev-button md-icon, md-tabs-wrapper md-next-button md-icon { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + md-tabs-wrapper md-prev-button { + left: 0; + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMjA4IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTUuNCw3LjQgMTQsNiA4LDEyIDE0LDE4IDE1LjQsMTYuNiAxMC44LDEyIAkJIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4gPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+IDwvZz4gPC9nPiA8ZyBpZD0iR3JpZCIgZGlzcGxheT0ibm9uZSI+IDxnIGRpc3BsYXk9ImlubGluZSI+IDwvZz4gPC9nPiA8L3N2Zz4NCg=="); } + md-tabs-wrapper md-next-button { + right: 0; + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMzM2IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTAsNiA4LjYsNy40IDEzLjIsMTIgOC42LDE2LjYgMTAsMTggMTYsMTIgCQkiIHN0eWxlPSJmaWxsOndoaXRlOyIvPiA8cmVjdCBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz4gPC9nPiA8L2c+IDxnIGlkPSJHcmlkIiBkaXNwbGF5PSJub25lIj4gPGcgZGlzcGxheT0iaW5saW5lIj4gPC9nPiA8L2c+IDwvc3ZnPg0K"); } + md-tabs-wrapper md-next-button md-icon { + -webkit-transform: translate3d(-50%, -50%, 0) rotate(180deg); + transform: translate3d(-50%, -50%, 0) rotate(180deg); } + md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper { + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper md-tab-item { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +md-tabs-canvas { + position: relative; + overflow: hidden; + display: block; + height: 48px; } + md-tabs-canvas:after { + content: ''; + display: table; + clear: both; } + md-tabs-canvas .md-dummy-wrapper { + position: absolute; + top: 0; + left: 0; } + md-tabs-canvas.md-paginated { + margin: 0 32px; } + md-tabs-canvas.md-center-tabs { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + text-align: center; } + md-tabs-canvas.md-center-tabs .md-tab { + float: none; + display: inline-block; } + +md-pagination-wrapper { + height: 48px; + display: block; + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1); + position: absolute; + width: 999999px; + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + md-pagination-wrapper:after { + content: ''; + display: table; + clear: both; } + md-pagination-wrapper.md-center-tabs { + position: relative; + width: initial; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + margin: 0 auto; } + +md-tabs-content-wrapper { + display: block; + position: absolute; + top: 48px; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; } + +md-tab-content { + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1); + overflow: auto; } + md-tab-content.md-no-scroll { + bottom: auto; + overflow: hidden; } + md-tab-content.ng-leave, md-tab-content.md-no-transition { + -webkit-transition: none; + transition: none; } + md-tab-content.md-left { + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); + -webkit-animation: 1s md-tab-content-hide; + animation: 1s md-tab-content-hide; + opacity: 0; } + md-tab-content.md-left * { + -webkit-transition: visibility 0s linear; + transition: visibility 0s linear; + -webkit-transition-delay: 0.5s; + transition-delay: 0.5s; + visibility: hidden; } + md-tab-content.md-right { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); + -webkit-animation: 1s md-tab-content-hide; + animation: 1s md-tab-content-hide; + opacity: 0; } + md-tab-content.md-right * { + -webkit-transition: visibility 0s linear; + transition: visibility 0s linear; + -webkit-transition-delay: 0.5s; + transition-delay: 0.5s; + visibility: hidden; } + md-tab-content > div.ng-leave { + -webkit-animation: 1s md-tab-content-hide; + animation: 1s md-tab-content-hide; } + +md-ink-bar { + position: absolute; + left: auto; + right: auto; + bottom: 0; + height: 2px; } + md-ink-bar.md-left { + -webkit-transition: left 0.225s cubic-bezier(0.35, 0, 0.25, 1), right 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: left 0.225s cubic-bezier(0.35, 0, 0.25, 1), right 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + md-ink-bar.md-right { + -webkit-transition: left 0.5s cubic-bezier(0.35, 0, 0.25, 1), right 0.225s cubic-bezier(0.35, 0, 0.25, 1); + transition: left 0.5s cubic-bezier(0.35, 0, 0.25, 1), right 0.225s cubic-bezier(0.35, 0, 0.25, 1); } + +md-tab { + position: absolute; + z-index: -1; + left: -9999px; } + +.md-tab { + font-size: 14px; + text-align: center; + line-height: 24px; + padding: 12px 24px; + -webkit-transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1); + transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1); + cursor: pointer; + white-space: nowrap; + position: relative; + text-transform: uppercase; + float: left; + font-weight: 500; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; } + .md-tab.md-focused { + box-shadow: none; + outline: none; } + .md-tab.md-active { + cursor: default; } + .md-tab.md-disabled { + pointer-events: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-drag: none; + opacity: 0.5; + cursor: default; } + .md-tab.ng-leave { + -webkit-transition: none; + transition: none; } + +md-toolbar + md-tabs { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +/*! toast/_extends.scss - */ +md-toast { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: absolute; + z-index: 90; + box-sizing: border-box; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-height: 48px; + padding-left: 24px; + padding-right: 24px; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); + border-radius: 2px; + font-size: 14px; + cursor: default; + height: auto; + max-height: 168px; + max-width: 100%; + overflow: hidden; + opacity: 1; + -webkit-transform: translate3d(0, 0, 0) rotateZ(0deg); + transform: translate3d(0, 0, 0) rotateZ(0deg); + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + /* Transition differently when swiping */ } + md-toast.md-capsule { + border-radius: 24px; } + md-toast.ng-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-toast.md-swipeleft, + md-toast.md-swiperight, + md-toast.md-swipeup, + md-toast.md-swipedown { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } + md-toast.ng-enter { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + opacity: 0; } + md-toast.ng-enter.md-top { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } + md-toast.ng-enter.ng-enter-active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + md-toast.ng-leave.ng-leave-active { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } + md-toast.ng-leave.ng-leave-active.md-top { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } + md-toast.ng-leave.ng-leave-active.md-swipeleft { + -webkit-transform: translate3d(-100%, 0%, 0); + transform: translate3d(-100%, 0%, 0); } + md-toast.ng-leave.ng-leave-active.md-swiperight { + -webkit-transform: translate3d(100%, 0%, 0); + transform: translate3d(100%, 0%, 0); } + md-toast .md-action { + line-height: 19px; + margin-left: 24px; + cursor: pointer; + text-transform: uppercase; + float: right; } + md-toast .md-action.md-button { + min-width: 0; } + +@media (max-width: 600px) { + md-toast { + left: 0; + right: 0; + width: 100%; + max-width: 100%; + min-width: 0; + border-radius: 0; + bottom: 0; } + md-toast.md-top { + bottom: auto; + top: 0; } } + +@media (min-width: 600px) { + md-toast { + min-width: 288px; + /* + * When the toast doesn't take up the whole screen, + * make it rotate when the user swipes it away + */ } + md-toast.md-bottom { + bottom: 8px; } + md-toast.md-left { + left: 8px; } + md-toast.md-right { + right: 8px; } + md-toast.md-top { + top: 8px; } + md-toast.ng-leave.ng-leave-active.md-swipeleft { + -webkit-transform: translate3d(-100%, 25%, 0) rotateZ(-15deg); + transform: translate3d(-100%, 25%, 0) rotateZ(-15deg); } + md-toast.ng-leave.ng-leave-active.md-swiperight { + -webkit-transform: translate3d(100%, 25%, 0) rotateZ(15deg); + transform: translate3d(100%, 25%, 0) rotateZ(15deg); } + md-toast.ng-leave.ng-leave-active.md-top.md-swipeleft { + -webkit-transform: translate3d(-100%, 0, 0) rotateZ(-15deg); + transform: translate3d(-100%, 0, 0) rotateZ(-15deg); } + md-toast.ng-leave.ng-leave-active.md-top.md-swiperight { + -webkit-transform: translate3d(100%, 0, 0) rotateZ(15deg); + transform: translate3d(100%, 0, 0) rotateZ(15deg); } } + +@media (min-width: 1280px) { + md-toast { + max-width: 568px; } } + +@media screen and (-ms-high-contrast: active) { + md-toast { + border: 1px solid #fff; } } + +/*! toolbar/_extends.scss - */ +md-toolbar { + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + position: relative; + z-index: 2; + font-size: 20px; + min-height: 64px; + width: 100%; } + md-toolbar.md-whiteframe-z1-add, md-toolbar.md-whiteframe-z1-remove { + -webkit-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; } + md-toolbar *, + md-toolbar *:before, + md-toolbar *:after { + box-sizing: border-box; } + md-toolbar.md-tall { + height: 128px; + min-height: 128px; + max-height: 128px; } + md-toolbar.md-medium-tall { + height: 88px; + min-height: 88px; + max-height: 88px; } + md-toolbar.md-medium-tall .md-toolbar-tools { + height: 48px; + min-height: 48px; + max-height: 48px; } + md-toolbar .md-indent { + margin-left: 64px; } + md-toolbar ~ md-content > md-list { + padding: 0; } + md-toolbar ~ md-content > md-list md-list-item:last-child md-divider { + display: none; } + +.md-toolbar-tools { + font-size: 20px; + letter-spacing: 0.005em; + font-weight: 400; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + width: 100%; + height: 100%; + max-height: 100%; + padding: 0 16px; + margin: 0; } + .md-toolbar-tools h1, .md-toolbar-tools h2, .md-toolbar-tools h3 { + font-size: inherit; + font-weight: inherit; + margin: inherit; } + .md-toolbar-tools a { + color: inherit; + text-decoration: none; } + .md-toolbar-tools .fill-height { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .md-toolbar-tools .md-button { + margin-top: 0; + margin-bottom: 0; } + .md-toolbar-tools > .md-button:first-child { + margin-left: -8px; } + .md-toolbar-tools > .md-button:last-child { + margin-right: -8px; } + .md-toolbar-tools > md-menu:last-child { + margin-right: -8px; } + .md-toolbar-tools > md-menu:last-child > .md-button { + margin-right: 0; } + @media screen and (-ms-high-contrast: active) { + .md-toolbar-tools { + border-bottom: 1px solid #fff; } } + +md-toolbar { + z-index: 10; + font-size: 1em !important; + background-image: url("../img/felt-transp.png"); + background-blend-mode: luminosity; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); } + +.md-toolbar-tools { + padding: 0; + font-size: 1em !important; } + +.md-toolbar-tools[layout-align="start start"] { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + +.md-toolbar-tools.md-toolbar-tools-top { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + +.md-toolbar-tools.md-toolbar-tools-bottom { + height: 40px; + max-height: 40px; } + +header { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +hgroup { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + hgrouph3 { + margin-bottom: 0; } + +.toolbar-main .md-button { + color: inherit; + font-size: 24px; } + +.sg-toolbar-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .sg-toolbar-group-1 { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + max-width: 384px; } + .sg-toolbar-group-2 { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + .sg-toolbar-group-3, + .sg-toolbar-group-last { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + +.sg-toolbar-search { + background-color: #f7f1dc; + color: rgba(0, 0, 0, 0.54); + padding: 16px 0; } + .sg-toolbar-search md-icon { + color: rgba(0, 0, 0, 0.54); } + +/*! tooltip/_extends.scss - */ +md-tooltip { + position: absolute; + z-index: 100; + overflow: hidden; + pointer-events: none; + border-radius: 4px; + font-weight: 500; + font-size: 14px; } + @media screen and (min-width: 600px) { + md-tooltip { + font-size: 10px; } } + md-tooltip .md-background { + position: absolute; + border-radius: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + -ms-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 1; } + md-tooltip .md-background.md-show-add { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transform: translate(-50%, -50%) scale(0); + -ms-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 0; } + md-tooltip .md-background.md-show, md-tooltip .md-background.md-show-add-active { + -webkit-transform: translate(-50%, -50%) scale(1); + -ms-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + opacity: 1; } + md-tooltip .md-background.md-show-remove { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-tooltip .md-background.md-show-remove.md-show-remove-active { + -webkit-transform: translate(-50%, -50%) scale(0); + -ms-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 0; } + md-tooltip .md-content { + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + background: transparent; + opacity: 0; + height: 32px; + line-height: 32px; + padding-left: 16px; + padding-right: 16px; } + @media screen and (min-width: 600px) { + md-tooltip .md-content { + height: 22px; + line-height: 22px; + padding-left: 8px; + padding-right: 8px; } } + md-tooltip .md-content.md-show-add { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + opacity: 0; } + md-tooltip .md-content.md-show, md-tooltip .md-content.md-show-add-active { + opacity: 1; } + md-tooltip .md-content.md-show-remove { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-tooltip .md-content.md-show-remove.md-show-remove-active { + opacity: 0; } + md-tooltip.md-hide { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } + md-tooltip.md-show { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + pointer-events: auto; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +/*! virtualRepeat/_extends.scss - */ +.md-virtual-repeat-container { + box-sizing: border-box; + display: block; + margin: 0; + overflow: hidden; + padding: 0; + position: relative; } + .md-virtual-repeat-container .md-virtual-repeat-scroller { + bottom: 0; + box-sizing: border-box; + left: 0; + margin: 0; + overflow-x: hidden; + overflow-y: auto; + padding: 0; + position: absolute; + right: 0; + top: 0; } + .md-virtual-repeat-container .md-virtual-repeat-sizer { + box-sizing: border-box; + height: 1px; + display: inline-block; + margin: 0; + padding: 0; + width: 1px; } + .md-virtual-repeat-container .md-virtual-repeat-offsetter { + box-sizing: border-box; + left: 0; + margin: 0; + padding: 0; + position: absolute; + right: 16px; + top: 0; } + +.md-virtual-repeat-container.md-orient-horizontal .md-virtual-repeat-scroller { + overflow-x: auto; + overflow-y: hidden; } + +.md-virtual-repeat-container.md-orient-horizontal .md-virtual-repeat-offsetter { + bottom: 16px; + right: auto; + white-space: nowrap; } + +.md-virtual-repeat-container .md-virtual-repeat-offsetter { + right: 0; } + +/*! whiteframe/_extends.scss - */ +.md-whiteframe-z1 { + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); } + +.md-whiteframe-z2, md-card.sg-expanded { + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.14), 0 4px 5px 0 rgba(0, 0, 0, 0.098), 0 1px 10px 0 rgba(0, 0, 0, 0.084); } + +.md-whiteframe-z3 { + box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.14), 0px 6px 10px 0px rgba(0, 0, 0, 0.098), 0px 1px 18px 0px rgba(0, 0, 0, 0.084); } + +.md-whiteframe-z4 { + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.14), 0px 8px 10px 1px rgba(0, 0, 0, 0.098), 0px 3px 14px 2px rgba(0, 0, 0, 0.084); } + +.md-whiteframe-z5 { + box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.14), 0px 16px 24px 2px rgba(0, 0, 0, 0.098), 0px 6px 30px 5px rgba(0, 0, 0, 0.084); } + +@media screen and (-ms-high-contrast: active) { + md-whiteframe { + border: 1px solid #fff; } } + +.pseudo-input-container { + display: block; + padding: 0 2px; } + +.sg-search-field-container { + margin-bottom: 12px; + color: white; } + .sg-search-field-container label { + color: inherit; } + .sg-search-field-container input { + color: inherit; + border: none; } + +.pseudo-input-label, +.button-label { + display: inline-block; + margin-top: 16px; + color: rgba(0, 0, 0, 0.54); + font-weight: 400; + font-size: 12px; + line-height: 16px; } + +.pseudo-input-label--no-margin, +.button-label { + margin-top: 0; } + +.md-input-focused label.pseudo-input-label, +.md-input-has-value label.pseudo-input-label { + -webkit-transform: translate3d(0, 4px, 0) scale(1); + transform: translate3d(0, 4px, 0) scale(1); + margin-top: 16px; } + +.pseudo-input-field, .pseudo-input-field--underline { + display: block; } + +.pseudo-input-field--underline { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); } + .pseudo-input-field--underline:focus, + .pseudo-input-field--underline:active, + .pseudo-input-field--underline:hover { + margin-bottom: 7px; + border-bottom: 2px solid #a1ccc8; } + +.pseudo-input-container--compact .pseudo-input-label { + margin-top: 0; } + +input #inner-editor { + color: rgba(0, 0, 0, 0.26); + line-height: inherit; } + +:root #placeholder, +:root [pseudo="-webkit-input-placeholder"] { + padding: 0; + height: 16px; + color: rgba(0, 0, 0, 0.26); + font: inherit; + line-height: inherit; } + +input::-webkit-datetime-edit, +:root div#date-time-edit { + opacity: 0; } + +.md-input-focused input::-webkit-datetime-edit, +.md-input-focused div#date-time-edit, +.md-input-has-value input::-webkit-datetime-edit { + opacity: 1; } + +md-input-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 2px; + /* + * The .md-input class is added to the input/textarea + */ } + md-input-container textarea, + md-input-container input[type="text"], + md-input-container input[type="password"], + md-input-container input[type="datetime"], + md-input-container input[type="datetime-local"], + md-input-container input[type="date"], + md-input-container input[type="month"], + md-input-container input[type="time"], + md-input-container input[type="week"], + md-input-container input[type="number"], + md-input-container input[type="email"], + md-input-container input[type="url"], + md-input-container input[type="search"], + md-input-container input[type="tel"], + md-input-container input[type="color"] { + /* remove default appearance from all input/textarea */ + -moz-appearance: none; + -webkit-appearance: none; } + md-input-container textarea { + resize: none; + overflow: hidden; } + md-input-container label { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + pointer-events: none; + -webkit-font-smoothing: antialiased; + z-index: 1; + -webkit-transform: translate3d(0, 24px, 0) scale(1); + transform: translate3d(0, 24px, 0) scale(1); + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; + -webkit-transition: all cubic-bezier(0.25, 0.8, 0.25, 1) 0.2s; + transition: all cubic-bezier(0.25, 0.8, 0.25, 1) 0.2s; } + md-input-container .md-input { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + display: block; + background: none; + padding-top: 2px; + padding-bottom: 1px; + border-width: 0 0 1px 0; + line-height: 26px; + -ms-flex-preferred-size: 26px; } + md-input-container .md-input:focus { + outline: none; } + md-input-container.md-input-focused label, + md-input-container.md-input-has-value label { + -webkit-transform: translate3d(0, 6px, 0) scale(0.75); + transform: translate3d(0, 6px, 0) scale(0.75); } + md-input-container.md-input-focused .md-input { + padding-bottom: 0px; + border-width: 0 0 2px 0; } + md-input-container .md-input[disabled] { + background-position: 0 bottom; + background-size: 3px 1px; + background-repeat: repeat-x; } + +md-input-container .bgroup { + display: block; } + +.bgroup b { + left-margin: -1.25em; } + +.PseudoField input { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; + display: block; + background: none; + padding-top: 2px; + padding-bottom: 0; + border-width: 0 0 1px 0; + line-height: 26px; + -ms-flex-preferred-size: 26px; } + .PseudoField input:focus { + outline: none; } + +[ui-view="login"] > md-content { + width: 320px; } + +[id=logo] img { + max-width: 100%; } + +label.login-lang { + margin: 0 8px 8px 0; } + +[id="messagesList"] .sg-md-subheader { + -webkit-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); } + +.unread .sg-md-subhead-multi, +.unread .sg-md-body-multi, .unread .mailer_mailcontent { + font-weight: 600; } + +.unread .msg-date { + color: #8ebfbb; } + +.msg-header-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + +.msg-body { + padding-top: 16px; } + +.msg-date { + text-align: right; } + +.sg-md-title-msg { + margin: 0; + margin-bottom: 8px; + white-space: normal; + font-weight: 400; } + +[id="contactsList"] .sg-md-subheader { + -webkit-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); } + +.buttonsToolbar { + padding: 16px 0; } + .buttonsToolbar button { + min-width: 5em; + margin: 1em 0 1em 1em; } + +#cke_content, +textarea.ck-editor { + margin-top: 16px; } + +textarea.plain-text { + width: 100%; + min-height: 192px; + margin-top: 16px; } + +.dayLabels { + color: #7db3b0; + height: 35px; + left: 0; + overflow: hidden; + position: relative; } + .dayLabels .day { + height: 100%; + position: absolute; + text-align: center; } + +.days { + left: 0; + right: 0; + top: 0; + margin-left: 50px; + position: relative; } + .days .day { + border-left: 1px solid #e6d8ba; + position: absolute; } + .days .day .clickableHourCell { + height: 40px; + border-bottom: 1px solid #e6d8ba; } + +.daysViewFor1Days .day { + width: 100%; } + +.daysViewFor1Days .days { + margin-left: 0; } + +.daysViewFor7Days .day { + width: 14.2857142857%; } + +.daysViewFor7Days .day0 { + left: 0%; } + +.daysViewFor7Days .day1 { + left: 14.2857142857%; } + +.daysViewFor7Days .day2 { + left: 28.5714285714%; } + +.daysViewFor7Days .day3 { + left: 42.8571428571%; } + +.daysViewFor7Days .day4 { + left: 57.1428571429%; } + +.daysViewFor7Days .day5 { + left: 71.4285714286%; } + +.daysViewFor7Days .day6 { + left: 85.7142857143%; } + +.sg-calendar-tile-header { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: #524517; + font-size: 14px; + font-weight: 300; + overflow: hidden; + padding: 2px; } + +.daysView { + bottom: 0; + overflow-x: hidden; + overflow: auto; + position: relative; + top: 0; } + .daysView .hours { + color: #7db3b0; + display: inline-block; + float: left; + font-weight: 300; + height: auto; + left: 0; + position: relative; + top: 0; + width: 50px; } + .daysView .hours .hour { + border-bottom: 1px solid #e6d8ba; + height: 40px; + left: 0; + padding: 2px; + position: relative; + right: 0; + top: 0; } + .daysView .event { + cursor: default; + margin-right: 1px; + position: absolute; + left: 0%; + right: 0%; } + .daysView .event.starts0 { + top: 0px; } + .daysView .event.lasts0 { + height: 0px; } + .daysView .event.starts1 { + top: 10px; } + .daysView .event.lasts1 { + height: 10px; } + .daysView .event.starts2 { + top: 20px; } + .daysView .event.lasts2 { + height: 20px; } + .daysView .event.starts3 { + top: 30px; } + .daysView .event.lasts3 { + height: 30px; } + .daysView .event.starts4 { + top: 40px; } + .daysView .event.lasts4 { + height: 40px; } + .daysView .event.starts5 { + top: 50px; } + .daysView .event.lasts5 { + height: 50px; } + .daysView .event.starts6 { + top: 60px; } + .daysView .event.lasts6 { + height: 60px; } + .daysView .event.starts7 { + top: 70px; } + .daysView .event.lasts7 { + height: 70px; } + .daysView .event.starts8 { + top: 80px; } + .daysView .event.lasts8 { + height: 80px; } + .daysView .event.starts9 { + top: 90px; } + .daysView .event.lasts9 { + height: 90px; } + .daysView .event.starts10 { + top: 100px; } + .daysView .event.lasts10 { + height: 100px; } + .daysView .event.starts11 { + top: 110px; } + .daysView .event.lasts11 { + height: 110px; } + .daysView .event.starts12 { + top: 120px; } + .daysView .event.lasts12 { + height: 120px; } + .daysView .event.starts13 { + top: 130px; } + .daysView .event.lasts13 { + height: 130px; } + .daysView .event.starts14 { + top: 140px; } + .daysView .event.lasts14 { + height: 140px; } + .daysView .event.starts15 { + top: 150px; } + .daysView .event.lasts15 { + height: 150px; } + .daysView .event.starts16 { + top: 160px; } + .daysView .event.lasts16 { + height: 160px; } + .daysView .event.starts17 { + top: 170px; } + .daysView .event.lasts17 { + height: 170px; } + .daysView .event.starts18 { + top: 180px; } + .daysView .event.lasts18 { + height: 180px; } + .daysView .event.starts19 { + top: 190px; } + .daysView .event.lasts19 { + height: 190px; } + .daysView .event.starts20 { + top: 200px; } + .daysView .event.lasts20 { + height: 200px; } + .daysView .event.starts21 { + top: 210px; } + .daysView .event.lasts21 { + height: 210px; } + .daysView .event.starts22 { + top: 220px; } + .daysView .event.lasts22 { + height: 220px; } + .daysView .event.starts23 { + top: 230px; } + .daysView .event.lasts23 { + height: 230px; } + .daysView .event.starts24 { + top: 240px; } + .daysView .event.lasts24 { + height: 240px; } + .daysView .event.starts25 { + top: 250px; } + .daysView .event.lasts25 { + height: 250px; } + .daysView .event.starts26 { + top: 260px; } + .daysView .event.lasts26 { + height: 260px; } + .daysView .event.starts27 { + top: 270px; } + .daysView .event.lasts27 { + height: 270px; } + .daysView .event.starts28 { + top: 280px; } + .daysView .event.lasts28 { + height: 280px; } + .daysView .event.starts29 { + top: 290px; } + .daysView .event.lasts29 { + height: 290px; } + .daysView .event.starts30 { + top: 300px; } + .daysView .event.lasts30 { + height: 300px; } + .daysView .event.starts31 { + top: 310px; } + .daysView .event.lasts31 { + height: 310px; } + .daysView .event.starts32 { + top: 320px; } + .daysView .event.lasts32 { + height: 320px; } + .daysView .event.starts33 { + top: 330px; } + .daysView .event.lasts33 { + height: 330px; } + .daysView .event.starts34 { + top: 340px; } + .daysView .event.lasts34 { + height: 340px; } + .daysView .event.starts35 { + top: 350px; } + .daysView .event.lasts35 { + height: 350px; } + .daysView .event.starts36 { + top: 360px; } + .daysView .event.lasts36 { + height: 360px; } + .daysView .event.starts37 { + top: 370px; } + .daysView .event.lasts37 { + height: 370px; } + .daysView .event.starts38 { + top: 380px; } + .daysView .event.lasts38 { + height: 380px; } + .daysView .event.starts39 { + top: 390px; } + .daysView .event.lasts39 { + height: 390px; } + .daysView .event.starts40 { + top: 400px; } + .daysView .event.lasts40 { + height: 400px; } + .daysView .event.starts41 { + top: 410px; } + .daysView .event.lasts41 { + height: 410px; } + .daysView .event.starts42 { + top: 420px; } + .daysView .event.lasts42 { + height: 420px; } + .daysView .event.starts43 { + top: 430px; } + .daysView .event.lasts43 { + height: 430px; } + .daysView .event.starts44 { + top: 440px; } + .daysView .event.lasts44 { + height: 440px; } + .daysView .event.starts45 { + top: 450px; } + .daysView .event.lasts45 { + height: 450px; } + .daysView .event.starts46 { + top: 460px; } + .daysView .event.lasts46 { + height: 460px; } + .daysView .event.starts47 { + top: 470px; } + .daysView .event.lasts47 { + height: 470px; } + .daysView .event.starts48 { + top: 480px; } + .daysView .event.lasts48 { + height: 480px; } + .daysView .event.starts49 { + top: 490px; } + .daysView .event.lasts49 { + height: 490px; } + .daysView .event.starts50 { + top: 500px; } + .daysView .event.lasts50 { + height: 500px; } + .daysView .event.starts51 { + top: 510px; } + .daysView .event.lasts51 { + height: 510px; } + .daysView .event.starts52 { + top: 520px; } + .daysView .event.lasts52 { + height: 520px; } + .daysView .event.starts53 { + top: 530px; } + .daysView .event.lasts53 { + height: 530px; } + .daysView .event.starts54 { + top: 540px; } + .daysView .event.lasts54 { + height: 540px; } + .daysView .event.starts55 { + top: 550px; } + .daysView .event.lasts55 { + height: 550px; } + .daysView .event.starts56 { + top: 560px; } + .daysView .event.lasts56 { + height: 560px; } + .daysView .event.starts57 { + top: 570px; } + .daysView .event.lasts57 { + height: 570px; } + .daysView .event.starts58 { + top: 580px; } + .daysView .event.lasts58 { + height: 580px; } + .daysView .event.starts59 { + top: 590px; } + .daysView .event.lasts59 { + height: 590px; } + .daysView .event.starts60 { + top: 600px; } + .daysView .event.lasts60 { + height: 600px; } + .daysView .event.starts61 { + top: 610px; } + .daysView .event.lasts61 { + height: 610px; } + .daysView .event.starts62 { + top: 620px; } + .daysView .event.lasts62 { + height: 620px; } + .daysView .event.starts63 { + top: 630px; } + .daysView .event.lasts63 { + height: 630px; } + .daysView .event.starts64 { + top: 640px; } + .daysView .event.lasts64 { + height: 640px; } + .daysView .event.starts65 { + top: 650px; } + .daysView .event.lasts65 { + height: 650px; } + .daysView .event.starts66 { + top: 660px; } + .daysView .event.lasts66 { + height: 660px; } + .daysView .event.starts67 { + top: 670px; } + .daysView .event.lasts67 { + height: 670px; } + .daysView .event.starts68 { + top: 680px; } + .daysView .event.lasts68 { + height: 680px; } + .daysView .event.starts69 { + top: 690px; } + .daysView .event.lasts69 { + height: 690px; } + .daysView .event.starts70 { + top: 700px; } + .daysView .event.lasts70 { + height: 700px; } + .daysView .event.starts71 { + top: 710px; } + .daysView .event.lasts71 { + height: 710px; } + .daysView .event.starts72 { + top: 720px; } + .daysView .event.lasts72 { + height: 720px; } + .daysView .event.starts73 { + top: 730px; } + .daysView .event.lasts73 { + height: 730px; } + .daysView .event.starts74 { + top: 740px; } + .daysView .event.lasts74 { + height: 740px; } + .daysView .event.starts75 { + top: 750px; } + .daysView .event.lasts75 { + height: 750px; } + .daysView .event.starts76 { + top: 760px; } + .daysView .event.lasts76 { + height: 760px; } + .daysView .event.starts77 { + top: 770px; } + .daysView .event.lasts77 { + height: 770px; } + .daysView .event.starts78 { + top: 780px; } + .daysView .event.lasts78 { + height: 780px; } + .daysView .event.starts79 { + top: 790px; } + .daysView .event.lasts79 { + height: 790px; } + .daysView .event.starts80 { + top: 800px; } + .daysView .event.lasts80 { + height: 800px; } + .daysView .event.starts81 { + top: 810px; } + .daysView .event.lasts81 { + height: 810px; } + .daysView .event.starts82 { + top: 820px; } + .daysView .event.lasts82 { + height: 820px; } + .daysView .event.starts83 { + top: 830px; } + .daysView .event.lasts83 { + height: 830px; } + .daysView .event.starts84 { + top: 840px; } + .daysView .event.lasts84 { + height: 840px; } + .daysView .event.starts85 { + top: 850px; } + .daysView .event.lasts85 { + height: 850px; } + .daysView .event.starts86 { + top: 860px; } + .daysView .event.lasts86 { + height: 860px; } + .daysView .event.starts87 { + top: 870px; } + .daysView .event.lasts87 { + height: 870px; } + .daysView .event.starts88 { + top: 880px; } + .daysView .event.lasts88 { + height: 880px; } + .daysView .event.starts89 { + top: 890px; } + .daysView .event.lasts89 { + height: 890px; } + .daysView .event.starts90 { + top: 900px; } + .daysView .event.lasts90 { + height: 900px; } + .daysView .event.starts91 { + top: 910px; } + .daysView .event.lasts91 { + height: 910px; } + .daysView .event.starts92 { + top: 920px; } + .daysView .event.lasts92 { + height: 920px; } + .daysView .event.starts93 { + top: 930px; } + .daysView .event.lasts93 { + height: 930px; } + .daysView .event.starts94 { + top: 940px; } + .daysView .event.lasts94 { + height: 940px; } + .daysView .event.starts95 { + top: 950px; } + .daysView .event.lasts95 { + height: 950px; } + .daysView .event .eventInside { + position: absolute; + overflow: hidden; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + border-radius: 2px; + cursor: move; } + +.monthView md-grid-tile { + border: 1px solid #e6d8ba; + overflow: auto; } + +.monthView .sg-event { + border-radius: 1px; + font-size: 14px; + overflow: hidden; + padding: 2px; + margin-bottom: 1px; + text-overflow: ellipsis; + white-space: nowrap; } + .monthView .sg-event span { + font-weight: 300; } + +.minutes15, .minutes30, .minutes45 { + display: block; + height: 25%; } + +.minutes30 { + border-bottom: 1px dotted #e6d8ba; } + +.gradient, .text { + position: absolute; + top: 1px; + left: 1px; + right: 1px; + bottom: 1px; + overflow: hidden; } + +.gradient > IMG { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; + min-height: 15px; + /* for 15-minute events */ + width: 100%; } + +/* Attendees Editor */ +.attendees { + overflow: hidden; + overflow-x: scroll; } + .attendees md-content { + display: table-row; } + .attendees md-list { + display: table-cell; } + .attendees md-list.day { + min-width: 408px; } + .attendees md-list.day md-list-item { + padding: 0; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .attendees md-list md-list-item:hover { + background-color: initial; } + .attendees md-list md-list-item img { + margin-right: 4px; } + .attendees md-list .hours { + font-size: 9px; } + .attendees md-list .hour { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + border-left: 1px solid #f7f1dc; + min-width: 16px; + min-height: 16px; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-flex-basis: 17px; + -ms-flex-preferred-size: 17px; + flex-basis: 17px; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .attendees md-list .quarter { + min-width: 4px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .attendees md-list .quarter .busy { + margin: 8px 0; + min-width: 4px; + background-color: #baa870; } + .attendees md-list .quarter.event { + background-color: #bfe0dd; } + +.view[layout=row] { + max-height: 100%; } + +[class|="view"] { + position: relative; } + +.view-list { + z-index: 8; + min-width: 256px; } + @media (min-width: 601px) and (max-width: 1024px) { + .view-list { + max-width: 43.75vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 43.75vw; + -ms-flex: 1 1 43.75vw; + flex: 1 1 43.75vw; + min-width: 192px; } } + @media (min-width: 1025px) { + .view-list { + max-width: 30vw; + -webkit-box-flex: 1; + -webkit-flex: 1 0 30vw; + -ms-flex: 1 0 30vw; + flex: 1 0 30vw; } } + @media (max-width: 600px) { + .view-list { + width: 100%; + min-width: 100%; } } + +.view-detail { + z-index: 9; + overflow-x: hidden; + background-color: transparent; } + @media (min-width: 601px) and (max-width: 1024px) { + .view-detail { + max-width: 56.25vw; + -webkit-box-flex: 1; + -webkit-flex: 1 1 56.25vw; + -ms-flex: 1 1 56.25vw; + flex: 1 1 56.25vw; + margin: 0; } } + @media (min-width: 1025px) { + .view-detail { + max-width: 50vw; + -webkit-box-flex: 2; + -webkit-flex: 2 1 50vw; + -ms-flex: 2 1 50vw; + flex: 2 1 50vw; + margin: 0; } } + @media (min-width: 601px) { + .view-detail .viewer { + position: absolute; + left: 0; + right: 0; + max-width: 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + .view-detail .viewer.ng-enter { + -webkit-transform: translate(-105%, 0); + -ms-transform: translate(-105%, 0); + transform: translate(-105%, 0); } + .view-detail .viewer.ng-enter.ng-enter-active { + -webkit-transform: translate(0%, 0%); + -ms-transform: translate(0%, 0%); + transform: translate(0%, 0%); + -webkit-transition-delay: 0.5s; + transition-delay: 0.5s; } + .view-detail .viewer.ng-leave { + -webkit-transition-delay: 0; + transition-delay: 0; + -webkit-transition-duration: 0.1s; + transition-duration: 0.1s; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .view-detail .viewer.ng-leave.ng-leave-active { + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + -webkit-transform: translate(-105%, 100%); + -ms-transform: translate(-105%, 100%); + transform: translate(-105%, 100%); } } + @media (max-width: 600px) { + .view-detail { + position: absolute; + width: 100%; + min-width: 100%; + height: calc(100vh - 128px); + -webkit-transform: translateX(-100%) scale(1); + -ms-transform: translateX(-100%) scale(1); + transform: translateX(-100%) scale(1); + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); } + .view-detail.sg-close { + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + -webkit-transform: translateX(-100%) scale(0); + -ms-transform: translateX(-100%) scale(0); + transform: translateX(-100%) scale(0); } + .view-detail.sg-close .viewer.ng-leave, + .view-detail.sg-close .viewer.ng-enter, + .view-detail.sg-close .viewer.ng-leave.ng-leave-active { + -webkit-transform: translateY(0) scale(0); + -ms-transform: translateY(0) scale(0); + transform: translateY(0) scale(0); } + .view-detail.sg-close .viewer.ng-enter.ng-enter-active { + -webkit-transform: translateY(0) scale(0); + -ms-transform: translateY(0) scale(0); + transform: translateY(0) scale(0); } + .view-detail .viewer.ng-leave, + .view-detail .viewer.ng-leave.ng-leave-active { + -webkit-transform: translateY(100%) scale(0); + -ms-transform: translateY(100%) scale(0); + transform: translateY(100%) scale(0); } + .view-detail .viewer.ng-enter { + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transform: translateY(100%) scale(0); + -ms-transform: translateY(100%) scale(0); + transform: translateY(100%) scale(0); } + .view-detail .viewer.ng-enter.ng-enter-active { + -webkit-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); } + .view-detail.ng-leave, + .view-detail.ng-leave.ng-leave-active { + -webkit-transform: translateX(-100%) scale(0); + -ms-transform: translateX(-100%) scale(0); + transform: translateX(-100%) scale(0); } + .view-detail.ng-enter { + -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); + -webkit-transform: translateX(-100%) scale(0); + -ms-transform: translateX(-100%) scale(0); + transform: translateX(-100%) scale(0); } + .view-detail.ng-enter.ng-enter-active { + -webkit-transform: translateX(-100%) scale(1); + -ms-transform: translateX(-100%) scale(1); + transform: translateX(-100%) scale(1); } } + +main { + background-color: #ede5ca; } + +.sg-padded { + padding-left: 16px; + padding-right: 16px; } + .sg-padded--left { + padding-left: 16px; } + .sg-padded--right { + padding-right: 16px; } + .sg-padded--top { + padding-top: 16px; } + +.sg-logo { + background-image: url("../img/sogo-full.svg"); + background-size: contain; + background-repeat: no-repeat; + height: 56px; + min-width: 144px; + -webkit-transform: translateY(-10%); + -ms-transform: translateY(-10%); + transform: translateY(-10%); } + +html.dev.guide::after { + display: block; + position: absolute; + top: 0; + left: 0; + background-image: -webkit-linear-gradient(0deg, rgba(0, 255, 255, 0.1) 0, rgba(0, 255, 255, 0.1) 80%, transparent 80%); + background-image: linear-gradient(90deg, rgba(0, 255, 255, 0.1) 0, rgba(0, 255, 255, 0.1) 80%, transparent 80%); + background-size: 64px 64px; + background-repeat-x: repeat; + width: 100%; + height: 100%; + content: " "; + z-index: 1000; } + +.md-tile-left, .md-tile-left-card:before, .sg-avatar:before, .md-tile-left-list:before, .sg-list-avatar:before, .md-tile-left-selected:before, .sg-selected-avatar:before, .md-tile-left-accepted:before, .sg-accepted:before, .md-tile-left-declined:before, .sg-declined:before, .md-tile-left-delegated:before, .sg-delegated:before, .md-tile-left-needs-action:before, .sg-needs-action:before, .md-tile-left-tentative:before, .sg-tentative:before { + background-color: rgba(224, 255, 255, 0.5); } +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/UI/WebServerResources/css/styles.css.map b/UI/WebServerResources/css/styles.css.map new file mode 100644 index 0000000000..189815f1a8 --- /dev/null +++ b/UI/WebServerResources/css/styles.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../scss/components/_palette.scss","../scss/core/reset.scss","styles.css","../scss/core/angular.scss","../scss/styles.scss","../angular-material/src/core/style/mixins.scss","../angular-material/src/core/style/structure.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/style/layout.scss","../scss/core/layout.scss","../bower_components/breakpoint-sass/stylesheets/_breakpoint.scss","../angular-material/src/core/style/typography.scss","../scss/core/typography.scss","../scss/core/_functions.scss","../angular-material/src/components/autocomplete/autocomplete.scss","../scss/components/autoScrollList/_extends.scss","../angular-material/src/components/list/list.scss","../scss/components/autoScrollList/autoScrollList.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.scss","../scss/components/bottomSheet/_extends.scss","../angular-material/src/components/bottomSheet/bottomSheet.scss","../scss/components/bottomSheet/bottomSheet.scss","../scss/components/button/_extends.scss","../angular-material/src/components/button/button.scss","../scss/components/button/button.scss","../scss/components/card/_extends.scss","../angular-material/src/components/card/card.scss","../scss/components/card/card.scss","../scss/components/checkbox/_extends.scss","../angular-material/src/components/checkbox/checkbox.scss","../scss/components/checkbox/checkbox.scss","../scss/components/chips/_extends.scss","../angular-material/src/components/chips/chips.scss","../scss/components/chips/chips.scss","../scss/components/content/_extends.scss","../angular-material/src/components/content/content.scss","../scss/components/content/content.scss","../scss/components/dialog/_extends.scss","../angular-material/src/components/dialog/dialog.scss","../scss/components/dialog/dialog.scss","../scss/components/divider/_extends.scss","../angular-material/src/components/divider/divider.scss","../scss/components/fabSpeedDial/_extends.scss","../angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","../angular-material/src/components/gridList/gridList.scss","../scss/components/gridList/gridList.scss","../scss/components/icon/_extends.scss","../angular-material/src/components/icon/icon.scss","../scss/components/icon/icon.scss","../scss/components/input/_extends.scss","../angular-material/src/components/input/input.scss","../scss/components/input/input.scss","../scss/components/list/_extends.scss","../scss/components/list/list.scss","../scss/components/menu/_extends.scss","../angular-material/src/components/menu/menu.scss","../scss/components/progressLinear/_extends.scss","../angular-material/src/components/progressLinear/progressLinear.scss","../scss/components/radioButton/_extends.scss","../angular-material/src/components/radioButton/radio-button.scss","../scss/components/select/_extends.scss","../angular-material/src/components/select/select.scss","../scss/components/select/select.scss","../scss/components/sidenav/_extends.scss","../angular-material/src/components/sidenav/sidenav.scss","../scss/components/sidenav/sidenav.scss","../scss/components/slider/_extends.scss","../angular-material/src/components/slider/slider.scss","../scss/components/sticky/_extends.scss","../angular-material/src/components/sticky/sticky.scss","../scss/components/subheader/_extends.scss","../angular-material/src/components/subheader/subheader.scss","../scss/components/subheader/subheader.scss","../scss/components/switch/_extends.scss","../angular-material/src/components/switch/switch.scss","../scss/components/tabs/_extends.scss","../angular-material/src/components/tabs/tabs.scss","../scss/components/toast/_extends.scss","../angular-material/src/components/toast/toast.scss","../scss/components/toolbar/_extends.scss","../angular-material/src/components/toolbar/toolbar.scss","../scss/components/toolbar/toolbar.scss","../scss/components/tooltip/_extends.scss","../angular-material/src/components/tooltip/tooltip.scss","../scss/components/virtualRepeat/_extends.scss","../angular-material/src/components/virtualRepeat/virtualRepeater.scss","../scss/components/virtualRepeat/virtualRepeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/pseudo-input/pseudo-input.scss","../scss/views/LoginUI.scss","../scss/views/MailerUI.scss","../scss/views/ContactsUI.scss","../scss/views/MessageEditorUI.scss","../scss/views/SchedulerUI.scss","../scss/views/_view.scss","../scss/core/base_styles/_base_style.scss","../scss/_devtools.scss"],"names":[],"mappings":"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,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IAGJ;MACE,mBAAmB;MACnB,iBAAiB;MACjB,SAAS;MACT,YAAY;MACZ,UAAU;MACV,WAAW;MAEX,mBAAmB;MACnB,aAAY,EATA;;AAehB;EACE,0BjG7CU;EiG8CV,eAAe,EAFH;;AAId;EACE,mBAAmB;EACnB,gBpFwCgB;EoFvChB,iBAAiB;EACjB,aAAa;EACb,mBAAmB;EACnB,wBAAwB;EACxB,oBAAoB,EAPX;EAQT;IACE,iBpFwEa,EoFzET;;AAMc;EACtB,eAAe;EACf,YAAY,EAFsB;;AAKpC;EACE,kCjGpEY,EiGmEF;;AAID;EACT,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,WAAW;EACX,YAAY;EACZ,iBAAiB,EAND;;AASN;EACV,mBAAmB;EACnB,OAAO;EACP,UAAU;EACV,QAAQ;EACR,SAAS;EACT,aAAa;EACb,iBAAiB;EAAE,0BAA0B;EAC7C,YAAY,EARG;;AAWjB,sBAAsB;AACtB;EACE,iBAAiB;EACjB,mBAAmB,EAFT;EAGV;IACE,mBAAmB,EADT;EAGZ;IACE,oBAAoB,EADb;IAEN;MACC,iBAAiB,EADZ;MAEL;QACE,WAAW;QACX,2BAAqB;QAArB,6BAAqB;YAArB,wBAAqB;gBAArB,qBAAqB,EAFT;IAMb;MACC,0BAA0B,EADnB;IAGT;MACE,kBAAiB,EADd;IAIP;MACE,eAAe,EADT;IAGR;MACE,qBAAc;MAAd,sBAAc;MAAd,qBAAc;MAAd,cAAc;MACd,+BjG1HQ;MiG2HR,gBAAgB;MAChB,iBAAiB;MACjB,0BAAkB;UAAlB,sBAAkB;cAAlB,kBAAkB;MAClB,oBAAa;MAAb,qBAAa;UAAb,qBAAa;cAAb,aAAa;MACb,yBAAiB;UAAjB,8BAAiB;cAAjB,iBAAiB;MACjB,2BAAqB;MAArB,6BAAqB;UAArB,wBAAqB;cAArB,qBAAqB,EARhB;IAUP;MACE,eAAe;MACf,qBAAc;MAAd,sBAAc;MAAd,qBAAc;MAAd,cAAc;MACd,2BAAqB;MAArB,6BAAqB;UAArB,wBAAqB;cAArB,qBAAqB,EAHb;MAIR;QACE,cAAc;QACd,eAAe;QACf,0BjGpIM,EiGiID;MAKN;QACC,0BjGzGK,EiGwGE;;ACxMC;EACd,iBAAiB,EADA;;AhG44QnB;EgGr3QE,mBAAmB,EADJ;;AAKjB;EACE,WAAuB;EACvB,iBAA2B,EAFjB;EvF6BR;IuF7BJ;MxFqIM,mBAAqB;MACrB,oBAA8B;MAA9B,0BAA8B;UAA9B,sBAA8B;cAA9B,kBAA8B;MwFjIhC,iBAAkB,EALV,EAAA;EvF6BR;IuF7BJ;MxFqIM,gBAAqB;MACrB,oBAA8B;MAA9B,uBAA8B;UAA9B,mBAA8B;cAA9B,eAA8B,EwFtIxB,EAAA;EvF6BR;IuF7BJ;MAWI,YAAY;MACZ,gBAAgB,EAZR,EAAA;;AAgBZ;EACE,W3FmGc;E2FlGd,mBAAmB;EACnB,8BAA8B,EAHlB;EvFaV;IuFbJ;MxFqHM,mBAAqB;MACrB,oBAA8B;MAA9B,0BAA8B;UAA9B,sBAA8B;cAA9B,kBAA8B;MwFhHhC,UAAU,EANA,EAAA;EvFaV;IuFbJ;MxFqHM,gBAAqB;MACrB,oBAA8B;MAA9B,uBAA8B;UAA9B,mBAA8B;cAA9B,eAA8B;MwF3GhC,UAAU,EAXA,EAAA;EvFaV;IuFEA;MACE,mBAAmB;MACnB,QAAQ;MACR,SAAS;MACT,gBAAgB;MAChB,wCAAsB;cAAtB,gCAAsB;MACtB,4D3F6F0C;c2F7F1C,oD3F6F0C,E2FnGnC;MAON;QACC,uCAAoB;YAApB,mCAAoB;gBAApB,+BAAoB,EADV;QAET;UACC,qCAAoB;cAApB,iCAAoB;kBAApB,6BAAoB;UACpB,+BAAuB;kBAAvB,uBAAuB,EAFN;MAMpB;QACC,4BAAoB;gBAApB,oBAAoB;QACpB,kCAA0B;gBAA1B,0BAA0B;QAC1B,mCAAoB;YAApB,+BAAoB;gBAApB,2BAAoB,EAHV;QAKT;UACC,+BAAuB;kBAAvB,uBAAuB;UACvB,kCAA0B;kBAA1B,0BAA0B;UAC1B,0CAAoB;cAApB,sCAAoB;kBAApB,kCAAoB,EAHH,EAAA;EvFtBvB;IuFbJ;MA8CI,mBAAmB;MACnB,YAAY;MACZ,gBAAgB;MAEhB,4BAAY;MACZ,8CAAkC;UAAlC,0CAAkC;cAAlC,sCAAkC;MAClC,kCAA0B;UAA1B,8BAA0B;cAA1B,0BAA0B;MAC1B,4D3F6D4C;c2F7D5C,oD3F6D4C,E2FlHlC;MAuDT;QACC,+BAAuB;gBAAvB,uBAAuB;QACvB,kCAA0B;gBAA1B,0BAA0B;QAC1B,8CAAkC;YAAlC,0CAAkC;gBAAlC,sCAAkC,EAHxB;QAQE;;;UACR,0CAA8B;cAA9B,sCAA8B;kBAA9B,kCAA8B,EADJ;QAIlB;UACR,0CAA8B;cAA9B,sCAA8B;kBAA9B,kCAA8B,EADJ;MAQpB;;QACR,6CAAiC;YAAjC,yCAAiC;gBAAjC,qCAAiC,EADP;MAI3B;QACC,4D3FkCwC;gB2FlCxC,oD3FkCwC;Q2FjCxC,6CAAiC;YAAjC,yCAAiC;gBAAjC,qCAAiC,EAFvB;MAIF;QACR,0CAA8B;YAA9B,sCAA8B;gBAA9B,kCAA8B,EADJ;MAMpB;;QACR,8CAAkC;YAAlC,0CAAkC;gBAAlC,sCAAkC,EADR;MAI3B;QACC,4D3FoB0C;gB2FpB1C,oD3FoB0C;Q2FnB1C,8CAAkC;YAAlC,0CAAkC;gBAAlC,sCAAkC,EAFxB;MAIF;QACR,8CAAkC;YAAlC,0CAAkC;gBAAlC,sCAAkC,EADR,EAAA;;ACjJhC;EACE,0BnGkEY,EmGnER;;AAON;EACE,mB5F6DwC;E4F5DxC,oB5F4DwC,E4F9D9B;EAGT;IACC,mB5F0DsC,E4F3D/B;EAGR;IACC,oB5FuDsC,E4FxD9B;EAGT;IACC,kB5FoDsC,E4FrDhC;;AAKV;EACE,8CAAqB;EACrB,yBAAyB;EACzB,6BAA6B;EAC7B,aAAS;EACT,iBAAa;EAEb,oCAAqB;MAArB,gCAAqB;UAArB,4BAAqB,EAPb;;ACdD;EACL,eAAe;EACf,mBAAmB;EACnB,OAAO;EACP,QAAQ;EACR,uHAAiC;EAAjC,gHAAiC;EACjC,2BAAwC;EACxC,4BAA4B;EAC5B,YAAY;EACZ,aAAa;EACb,aAAa;EACb,cAAc,EAXA;;AAgBlB;EACE,2CAAsB,EADT","file":"styles.css"} \ No newline at end of file diff --git a/UI/WebServerResources/js/Common.js b/UI/WebServerResources/js/Common.js new file mode 100644 index 0000000000..1b4c932f3d --- /dev/null +++ b/UI/WebServerResources/js/Common.js @@ -0,0 +1,3 @@ +function l(){var key=arguments[0],value=key;labels[key]?value=labels[key]:clabels[key]&&(value=clabels[key]);for(var i=1,j=0;i-1?deferred.resolve():Acl.$$resource.fetch(this.folderId,"addUserInAcls",param).then(function(){user.wasSubscribed=!1,user.userClass=user.isGroup?"group-user":"normal-user",user.$rights=angular.bind(user,user.$acl,_this.folderId),_this.users.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);i>=0&&_this.users.splice(i,1)})},Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})},Acl.prototype.$saveUsersRights=function(){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];return angular.forEach(this.users,function(user){user.$rightsAreDirty()&&users.push(user.$omit())}),users.length?Acl.$$resource.save(this.folderId,users,param).then(function(){angular.forEach(_this.users,function(user){user.$rightsAreDirty()&&(user.$shadowRights=angular.copy(user.rights))}),deferredSave.resolve()},deferredSave.reject):deferredSave.resolve(),users=[],angular.forEach(this.users,function(user){!user.wasSubscribed&&user.isSubscribed&&users.push(user.uid)}),users.length?(param={uids:users.join(",")},Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed}),deferredSubscribe.resolve()},deferredSubscribe.reject)):deferredSubscribe.resolve(),Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}}(),function(){"use strict";function Alarm(){this.currentAlarm=null}function AlarmService($timeout,Settings,Resource,$mdToast){return angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast}),Alarm}Alarm.getAlarms=function(){var _this=this,now=new Date,browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function(a,b){var x=parseInt(a[2]),y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop(),now=new Date,utc=Math.floor(now.getTime()/1e3),url=next[0]+"/"+next[1],alarmTime=parseInt(next[2]),delay=alarmTime;alarmTime>0&&(delay-=utc);var f=(new Date(1e3*alarmTime),angular.bind(_this,Alarm.showAlarm,url));_this.currentAlarm&&_this.$timeout.cancel(_this.currentAlarm),_this.currentAlarm=_this.$timeout(f,1e3*delay)}})},Alarm.showAlarm=function(url){function AlarmController(scope,$mdToast,url){scope.reminder="10",scope.cancel=function(){$mdToast.hide()},scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder),$mdToast.hide()}}var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes"),this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ",""].join(""),locals:{url:url},controller:AlarmController}),AlarmController.$inject=["scope","$mdToast","url"]},AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"],angular.module("SOGo.Common").factory("Alarm",AlarmService)}(),function(){"use strict";function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;for(foundCookie=null,prefix=name+"=",pairs=document.cookie.split(";"),i=0;!foundCookie&&i0&&(currentPair=currentPair.substr(start)),0===currentPair.indexOf(prefix)&&(foundCookie=currentPair.substr(prefix.length))}return foundCookie}function readLoginCookie(){var value,loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo");return cookie&&cookie.length>8&&(value=decodeURIComponent(cookie.substr(8)),loginValues=value.base64decode().split(":")),loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;return userName=username,domain&&(userName+="@"+domain.value),address=""+window.location.href,baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName),"/"==baseAddress[0]&&(parts=address.split("/"),hostpart=parts[2],protocol=parts[0],baseAddress=protocol+"//"+hostpart+baseAddress),parts=baseAddress.split("/"),parts.splice(0,3),altBaseAddress=parts.join("/"),newAddress=!address.startsWith(baseAddress)&&!address.startsWith(altBaseAddress)||address.endsWith("/logoff")?baseAddress:address}function getService($q,$http,passwordPolicyConfig){var service,_this=this;return service={login:function(data){var language,d=$q.defer(),username=data.username,password=data.password,domain=data.domain,rememberLogin=data.rememberLogin?1:0;return data.loginSuffix&&!username.endsWith(data.loginSuffix)&&(username+=loginSuffix,domain=!1),data.language&&"WONoSelectionString"!=data.language&&(language=data.language),$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();loginCookie?"undefined"!=typeof data.expire&&"undefined"!=typeof data.grace?data.expire<0&&data.grace>0?d.reject({grace:data.grace}):data.expire>0&&-1==data.grace?d.reject({expire:data.expire}):d.resolve(redirectUrl(username,domain)):d.resolve(redirectUrl(username,domain)):d.reject(l("cookiesNotEnabled"))}).error(function(data,status){var msg,perr;data&&data.LDAPPasswordPolicyError?(perr=data.LDAPPasswordPolicyError,msg=perr==passwordPolicyConfig.PolicyNoError?l("Wrong username or password."):perr==passwordPolicyConfig.PolicyAccountLocked?l("Your account was locked due to too many failed attempts."):l("Login failed due to unhandled error case: ")+perr):msg=l("Unhandled error response"),d.reject({error:msg})}),d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();return $http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;perr?perr==passwordPolicyConfig.PolicyNoError?error=l("Password change failed"):perr==passwordPolicyConfig.PolicyPasswordModNotAllowed?error=l("Password change failed - Permission denied"):perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality?error=l("Password change failed - Insufficient password quality"):perr==passwordPolicyConfig.PolicyPasswordTooShort?error=l("Password change failed - Password is too short"):perr==passwordPolicyConfig.PolicyPasswordTooYoung?error=l("Password change failed - Password is too young"):perr==passwordPolicyConfig.PolicyPasswordInHistory?error=l("Password change failed - Password is in history"):(error=l("Unhandled policy error: %{0}").formatted(perr),perr=passwordPolicyConfig.PolicyPasswordUnknown):(perr=passwordPolicyConfig.PolicyPasswordSystemUnknown,error=_("Unhandled error response")),d.reject(error)}),d.promise}}}this.$get=getService,getService.$inject=["$q","$http","passwordPolicyConfig"]}angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication)}(),function(){"use strict";function Dialog(){}function DialogService($q,$mdDialog){return angular.extend(Dialog,{$q:$q,$modal:$mdDialog}),Dialog}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).content(content).ok(l("OK"));this.$modal.show(alert)},Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).content(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)},Dialog.prompt=function(title,label,options){function PromptDialogController(scope,$mdDialog){scope.title=title,scope.name="",scope.cancel=function(){d.reject(),$mdDialog.hide()},scope.ok=function(){d.resolve(scope.name),$mdDialog.hide()}}var o=options||{},d=this.$q.defer();return this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','

'," "," ",' '," ","
",'
',' '," "+l("Cancel")," ",' '," "+l("OK")," ","
","
"].join(""),controller:PromptDialogController}),PromptDialogController.$inject=["scope","$mdDialog"],d.promise},DialogService.$inject=["$q","$mdDialog"],angular.module("SOGo.Common").factory("Dialog",DialogService)}(),function(){"use strict";function Gravatar(){return function(email,size){var x,y,hash,s=size;return email?(x=email.indexOf("<"),x>=0&&(y=email.indexOf(">",x),y>x&&(email=email.substring(x+1,y))),size||(s=48),hash=email.md5(),"https://www.gravatar.com/avatar/"+hash+"?s="+s+"&d=wavatar"):""}}angular.module("SOGo.Common").factory("Gravatar",Gravatar)}(),function(){"use strict";function Resource($http,$q,path,activeUser,options){angular.extend(this,{_http:$http,_q:$q,_path:path,_activeUser:activeUser}),angular.extend(this,options),this._path=this._path.replace(/\/$/,"")}Resource.$factory=["$http","$q",function($http,$q){return function(path,activeUser,options){return new Resource($http,$q,path,activeUser,options)}}],angular.module("SOGo.Common").factory("Resource",Resource.$factory),Resource.prototype.userResource=function(uid){var path=_.compact(this._activeUser.folderURL.split("/"));return path.splice(path.length-1,1,escape(uid)),new Resource(this._http,this._q,"/"+path.join("/"),this._activeUser)},Resource.prototype.fetch=function(folderId,action,params){var deferred=this._q.defer(),path=[this._path];return folderId&&path.push(folderId.split("/")),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http({method:"GET",url:path,params:params}).success(deferred.resolve).error(function(data,status){return 404==status?deferred.reject():void 0}),deferred.promise},Resource.prototype.newguid=function(folderId){var deferred=this._q.defer(),path=this._path+"/"+folderId+"/newguid";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.create=function(action,name){var deferred=this._q.defer(),path=this._path+"/"+action;return this._http.post(path,{name:name}).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.post=function(id,action,data){var deferred=this._q.defer(),path=[this._path];return id&&path.push(id),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http.post(path,data).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.save=function(id,newValue,options){var action=(this._q.defer(),options&&options.action?options.action:"save");return this.post(id,action,newValue)},Resource.prototype.remove=function(uid){var deferred=this._q.defer(),path=this._path+"/"+uid+"/delete";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise}}(),function(){"use strict";function User(userData){userData&&this.init(userData)}User.factory=["$q","$log","sgSettings","Resource","Gravatar",function($q,$log,Settings,Resource,Gravatar){return angular.extend(User,{$q:$q,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$gravatar:Gravatar,$query:"",$users:[]}),User}],angular.module("SOGo.Common").factory("User",User.factory),User.$filter=function(search,excludedUsers){var param={search:search};return search?User.$query==search?User.$q.when(User.$users):(User.$query=search,User.$$resource.fetch(null,"usersSearch",param).then(function(response){var results,index,user,compareUids=function(data){return this.uid==data.uid};for(results=excludedUsers?_.filter(response.users,function(data){return!_.find(excludedUsers,compareUids,user)}):response.users,index=User.$users.length-1;index>=0;index--)user=User.$users[index],_.find(results,compareUids,user)||User.$users.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(User.$users,compareUids,data))){var user=new User(data);User.$users.splice(index,0,user)}}),User.$log.debug(User.$users),User.$users})):(User.$users=[],User.$q.when(User.$users))},User.prototype.init=function(data){angular.extend(this,data),this.$$shortFormat||(this.$$shortFormat=this.$shortFormat()),this.$$image||(this.$$image=this.image||User.$gravatar(this.c_email)),this.empty=" "},User.prototype.$shortFormat=function(options){var fullname=this.cn||this.c_email,email=this.c_email,no_email=options&&options.email===!1;return!no_email&&email&&fullname!=email&&(fullname+=" <"+email+">"),fullname},User.prototype.$acl=function(folderId){var _this=this,deferred=User.$q.defer(),param={uid:this.uid};return this.$shadowRights?deferred.resolve(this.rights):User.$$resource.fetch(folderId,"userRights",param).then(function(data){return _this.rights=data,_this.$shadowRights=angular.copy(data),deferred.resolve(data),data}),deferred.promise},User.prototype.$isAnonymous=function(){return"anonymous"==this.uid},User.prototype.$isSpecial=function(){return this.userClass&&"public-user"==this.userClass},User.prototype.$confirmRights=function(){var confirmation=!1;return this.$confirmation?!1:(_.some(_.values(this.rights))&&("anonymous"==this.uid?confirmation=l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?"):""==this.uid&&(confirmation=l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?"))),this.$confirmation=confirmation,confirmation)},User.prototype.$rightsAreDirty=function(){return this.rights&&!_.isEqual(this.rights,this.$shadowRights)},User.prototype.$resetRights=function(zero){var _this=this;zero?_.map(_.keys(this.rights),function(key){angular.isString(_this.rights[key])?_this.rights[key]="None":_this.rights[key]=0}):this.rights=angular.copy(this.$shadowRights)},User.prototype.$folders=function(type){var _this=this,deferred=User.$q.defer(),param={type:type};return this.$$folders?deferred.resolve(this.$$folders):User.$$resource.userResource(this.uid).fetch(null,"foldersSearch",param).then(function(response){_this.$$folders=response.folders,deferred.resolve(response.folders)}),deferred.promise},User.prototype.$omit=function(){var user={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(user[key]=value)}),user},User.prototype.toString=function(){return"[User "+this.c_email+"]"}}(),function(){"use strict";function sgFocus($rootScope,$timeout){return function(name){$timeout(function(){$rootScope.$broadcast("sgFocusOn",name)})}}sgFocus.$inject=["$rootScope","$timeout"],angular.module("SOGo.Common").factory("sgFocus",sgFocus)}(),function(){"use strict";function sgAvatarImage(){return{restrict:"AE",replace:!0,scope:{size:"@",email:"=sgEmail",src:"=sgSrc"},template:'',bindToController:!0,controller:"sgAvatarImageController",controllerAs:"vm"}}function sgAvatarImageController($scope,$element,Gravatar){var vm=this;$scope.$watch("vm.email",function(email){email&&!vm.url&&(vm.url=Gravatar(email,vm.size))}),"sg-src"in $element[0].attributes&&$scope.$watch("vm.src",function(src){src&&(vm.url=src)})}sgAvatarImageController.$inject=["$scope","$element","Gravatar"],angular.module("SOGo.Common").directive("sgAvatarImage",sgAvatarImage).controller("sgAvatarImageController",sgAvatarImageController)}(),function(){"use strict";function sgColorPicker($parse){function link(scope,iElement,iAttr,controller){controller.doSelect=$parse(iElement.attr("sg-on-select"))}return{restrict:"E",template:["",' '," color_lens"," ",' ',' ',' '," "," ",""].join(""),replace:!0,bindToController:!0,controller:sgColorPickerController,controllerAs:"$sgColorPickerController",link:link}}function sgColorPickerController($scope,sgColors){var vm=this;vm.colors=sgColors.selection,vm.select=function(color){vm.doSelect($scope,{color:color})}}sgColorPicker.$inject=["$parse"],sgColorPickerController.$inject=["$scope","sgColors"],angular.module("SOGo.Common").directive("sgColorPicker",sgColorPicker)}(),function(){"use strict";function sgCompile($compile){function sgCompileLink(scope,element,attrs){var ensureCompileRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgCompile)},function(value){element.html(value),$compile(element.contents())(scope),ensureCompileRunsOnce()})}return{restrict:"A",link:sgCompileLink}}sgCompile.$inject=["$compile"],angular.module("SOGo.Common").directive("sgCompile",sgCompile)}(),function(){"use strict";function sgEnter(){var ENTER_KEY=13;return function(scope,element,attrs){element.bind("keydown keypress",function(event){event.which===ENTER_KEY&&(scope.$apply(function(){scope.$eval(attrs.sgEnter)}),event.preventDefault())})}}angular.module("SOGo.Common").directive("sgEnter",sgEnter)}(),function(){"use strict";function sgEscape(){var ESCAPE_KEY=27;return function(scope,elem,attrs){elem.bind("keydown",function(event){event.keyCode===ESCAPE_KEY&&scope.$apply(attrs.sgEscape)})}}angular.module("SOGo.Common").directive("sgEscape",sgEscape)}(),function(){"use strict";function sgFocusOn(){return function(scope,elem,attr){scope.$on("sgFocusOn",function(e,name){name===attr.sgFocusOn&&(elem[0].focus(),elem[0].select())})}}angular.module("SOGo.Common").directive("sgFocusOn",sgFocusOn)}(),function(){"use strict";function sgFolderStylesheet(){return{restrict:"A",require:"ngModel",scope:{ngModel:"="},template:['"].join("")}}angular.module("SOGo.Common").directive("sgFolderStylesheet",sgFolderStylesheet)}(),function(){"use strict";function sgSearchPreTransclude($parse){function compile(tElement,tAttr){var inputEl=(tElement.find("md-input-container"),tElement.find("input")),selectEl=tElement.find("md-select"),buttonEl=tElement.find("md-button");return inputEl.attr("ng-model","$sgSearchController.searchText"),inputEl.attr("ng-model-options","$sgSearchController.searchTextOptions"),inputEl.attr("ng-change","$sgSearchController.onChange()"),selectEl&&(selectEl.attr("ng-model","$sgSearchController.searchField"),selectEl.attr("ng-change","$sgSearchController.onChange()")),buttonEl&&buttonEl.attr("sg-search-cancel")?(buttonEl.attr("ng-click",buttonEl.attr("sg-search-cancel")),buttonEl.removeAttr("sg-search-cancel")):buttonEl=null,function(scope,iElement,iAttr,controller){var compiledButtonEl=iElement.find("button");controller.doSearch=$parse(iElement.attr("sg-search")),buttonEl&&compiledButtonEl&&compiledButtonEl.on("click",controller.cancelSearch)}}return{restrict:"A",controller:"sgSearchController",controllerAs:"$sgSearchController",priority:1001,compile:compile}}function sgSearch(){function compile(tElement,tAttr){return function(scope,iElement,iAttr,controller,transclude){transclude(function(clone){iElement.append(clone)})}}return{restrict:"A",priority:1e3,transclude:!0,compile:compile}}function sgSearchController($scope,$element){var vm=this;vm.previous={searchText:"",searchField:""},vm.searchText=null,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){null!==vm.searchText&&(vm.searchText!=vm.previous.searchText||vm.searchField!=vm.previous.searchField)&&((vm.searchText.length>2||0===vm.searchText.length)&&vm.doSearch($scope,{searchText:vm.searchText,searchField:vm.searchField}),vm.previous={searchText:vm.searchText,searchField:vm.searchField})},vm.cancelSearch=function(){vm.searchText=""}}sgSearchPreTransclude.$inject=["$parse"],sgSearchController.$inject=["$scope","$element"],angular.module("SOGo.Common").controller("sgSearchController",sgSearchController).directive("sgSearch",sgSearchPreTransclude).directive("sgSearch",sgSearch)}(),function(){"use strict";function sgSubscribe(User){return{restrict:"A",scope:{folderType:"@sgSubscribe",onFolderSelect:"&sgSubscribeOnSelect"},replace:!1,bindToController:!0,controller:sgSubscribeDialogController,controllerAs:"$sgSubscribeDialogController",link:link}}function link(scope,element,attrs,controller){element.find("input");element.on("click",controller.showDialog)}function sgSubscribeDialogController($mdDialog){var vm=this;vm.showDialog=function(){$mdDialog.show({templateUrl:"../Contacts/UIxContactsUserFolders",clickOutsideToClose:!0,locals:{folderType:vm.folderType,onFolderSelect:vm.onFolderSelect},controller:sgSubscribeController,controllerAs:"subscribe"})}}function sgSubscribeController(folderType,onFolderSelect,User){var vm=this;vm.selectedUser=null,vm.users=User.$users,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){User.$filter(vm.searchText).then(function(){vm.selectedUser&&_.isUndefined(_.find(User.$users,function(user){return user.uid==vm.selectedUser.uid}))&&(vm.selectedUser=null)})},vm.selectUser=function(i){vm.selectedUser==vm.users[i]?vm.selectedUser=null:vm.users[i].$folders(folderType).then(function(){vm.selectedUser=vm.users[i]})},vm.selectFolder=function(folder){onFolderSelect({folderData:folder})}}sgSubscribe.$inject=["User"],sgSubscribeDialogController.$inject=["$mdDialog"],sgSubscribeController.$inject=["folderType","onFolderSelect","User"],angular.module("SOGo.Common").directive("sgSubscribe",sgSubscribe)}(),function(){"use strict";function sgToggleGrid($parse){function link(scope,iElement,attrs,ctrl){function toggle(day){var i=_.findIndex(modelDays,function(o){return modelAttr?o[modelAttr]==day:o==day});if(0>i)if(modelAttr){var o={};o[modelAttr]=day,modelDays.push(o)}else modelDays.push(day);else modelDays.splice(i,1)}var tile,i,modelDays,modelAttr,ensureInitRunsOnce,toggleClass,tiles=iElement.find("md-grid-tile");for(ensureInitRunsOnce=scope.$watch(function(){return $parse(attrs.sgToggleGrid)(scope)},function(days){if(angular.isDefined(days)){var flattenedDays=days;modelDays=days,attrs.sgToggleGridAttr&&(modelAttr=attrs.sgToggleGridAttr,flattenedDays=_.pluck(days,attrs.sgToggleGridAttr)),_.each(tiles,function(o){var tile=angular.element(o);_.contains(flattenedDays,tile.attr("value"))&&tile.addClass("sg-active"); +}),ensureInitRunsOnce()}}),toggleClass=function(){var tile=angular.element(this),day=tile.attr("value");tile.toggleClass("sg-active"),toggle(day)},i=0;i>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+this._base64_keyStr.charAt(enc1)+this._base64_keyStr.charAt(enc2)+this._base64_keyStr.charAt(enc3)+this._base64_keyStr.charAt(enc4);return output},String.prototype.base64decode=function(){for(var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0,input=""+this;i>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));return output},String.prototype.md5=function(){if(this.length){var md5=function(s){function L(k,d){return k<>>32-d}function K(G,k){var I,d,F,H,x;return F=2147483648&G,H=2147483648&k,I=1073741824&G,d=1073741824&k,x=(1073741823&G)+(1073741823&k),I&d?2147483648^x^F^H:I|d?1073741824&x?3221225472^x^F^H:1073741824^x^F^H:x^F^H}function r(d,F,k){return d&F|~d&k}function q(d,F,k){return d&k|F&~k}function p(d,F,k){return d^F^k}function n(d,F,k){return F^(d|~k)}function u(G,F,aa,Z,k,H,I){return G=K(G,K(K(r(F,aa,Z),k),I)),K(L(G,H),F)}function f(G,F,aa,Z,k,H,I){return G=K(G,K(K(q(F,aa,Z),k),I)),K(L(G,H),F)}function D(G,F,aa,Z,k,H,I){return G=K(G,K(K(p(F,aa,Z),k),I)),K(L(G,H),F)}function t(G,F,aa,Z,k,H,I){return G=K(G,K(K(n(F,aa,Z),k),I)),K(L(G,H),F)}function e(G){for(var Z,F=G.length,x=F+8,k=(x-x%64)/64,I=16*(k+1),aa=Array(I-1),d=0,H=0;F>H;)Z=(H-H%4)/4,d=H%4*8,aa[Z]=aa[Z]|G.charCodeAt(H)<>>29,aa}function B(x){var G,d,k="",F="";for(d=0;3>=d;d++)G=x>>>8*d&255,F="0"+G.toString(16),k+=F.substr(F.length-2,2);return k}function J(k){k=k.replace(/rn/g,"n");for(var d="",F=0;Fx?d+=String.fromCharCode(x):x>127&&2048>x?(d+=String.fromCharCode(x>>6|192),d+=String.fromCharCode(63&x|128)):(d+=String.fromCharCode(x>>12|224),d+=String.fromCharCode(x>>6&63|128),d+=String.fromCharCode(63&x|128))}return d}var P,h,E,v,g,Y,X,W,V,C=Array(),S=7,Q=12,N=17,M=22,A=5,z=9,y=14,w=20,o=4,m=11,l=16,j=23,U=6,T=10,R=15,O=21;for(s=J(s),C=e(s),Y=1732584193,X=4023233417,W=2562383102,V=271733878,P=0;P12&&(p="pm",i=hours%12),10>minutes&&(m="0"+minutes),newString=newString.replace("%H",10>hours?"0"+hours:hours),newString=newString.replace("%I",10>i?"0"+i:i),newString=newString.replace("%M",m),newString=newString.replace("%p",p)},Date.prototype.daysUpTo=function(otherDate){var days=[],day1=this.getTime(),day2=otherDate.getTime();if(day1>day2){var tmp=day1;day1=day2,day2=tmp}for(var nbrDays=Math.round((day2-day1)/864e5)+1,i=0;nbrDays>i;i++){var newDate=new Date;newDate.setTime(day1+864e5*i),days.push(newDate)}return days},String.prototype.isValidEmail=function(){var emailRE=/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i;return emailRE.test(this)},String.prototype.asCSSIdentifier=function(){for(var characters=["_","\\.","#","@","\\*",":",","," ","'","&","\\+"],escapeds=["_U_","_D_","_H_","_A_","_S_","_C_","_CO_","_SP_","_SQ_","_AM_","_P_"],newString=this,i=0;iyear&&(year=""+(year+1900)),1==month.length&&(month="0"+month),1==day.length&&(day="0"+day),"-"==separator?str=year+"-"+month+"-"+day:str=day+"/"+month+"/"+year,str},Date.prototype.addDays=function(nbrDays){var milliSeconds=this.getTime();milliSeconds+=864e5*nbrDays,this.setTime(milliSeconds)},Date.prototype.addHours=function(nbrHours){var milliSeconds=this.getTime();milliSeconds+=36e5*nbrHours,this.setTime(milliSeconds)},Date.prototype.addMinutes=function(nbrMinutes){var milliSeconds=this.getTime();milliSeconds+=6e4*nbrMinutes,this.setTime(milliSeconds)},Date.prototype.beginOfDay=function(){var beginOfDay=new Date(this.getTime());return beginOfDay.setHours(0),beginOfDay.setMinutes(0),beginOfDay.setSeconds(0),beginOfDay.setMilliseconds(0),beginOfDay},Date.prototype.beginOfWeek=function(){var offset=firstDayOfWeek-this.getDay();offset>0&&(offset-=7);var beginOfWeek=this.beginOfDay();return beginOfWeek.setHours(12),beginOfWeek.addDays(offset),beginOfWeek},Date.prototype.endOfWeek=function(){var endOfWeek=this.beginOfWeek();return endOfWeek.addDays(6),endOfWeek.setHours(23),endOfWeek.setMinutes(59),endOfWeek.setSeconds(59),endOfWeek.setMilliseconds(999),endOfWeek},Date.prototype.getDayString=function(){var newString=this.getYear();1e3>newString&&(newString+=1900);var month=""+(this.getMonth()+1);1==month.length&&(month="0"+month),newString+=month;var day=""+this.getDate();return 1==day.length&&(day="0"+day),newString+=day},Date.prototype.getHourString=function(){var newString=this.getHours()+"00";return 3==newString.length&&(newString="0"+newString),newString}; +//# sourceMappingURL=Common.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Common.js.map b/UI/WebServerResources/js/Common.js.map new file mode 100644 index 0000000000..65841bb4be --- /dev/null +++ b/UI/WebServerResources/js/Common.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Common.js","sources":["Common/utils.js","Common/Common.app.js","Common/decodeUri.filter.js","Common/encodeUri.filter.js","Common/loc.filter.js","Common/range.filter.js","Common/AclController.js","Common/navController.js","Common/Acl.service.js","Common/Alarm.service.js","Common/Authentication.service.js","Common/Dialog.service.js","Common/Gravatar.service.js","Common/Resource.service.js","Common/User.service.js","Common/sgFocus.service.js","Common/sgAvatarImage.directive.js","Common/sgColorPicker.directive.js","Common/sgCompile.directive.js","Common/sgEnter.directive.js","Common/sgEscape.directive.js","Common/sgFocus.directive.js","Common/sgFolderStylesheet.directive.js","Common/sgSearch.directive.js","Common/sgSubscribe.directive.js","Common/sgToggleGrid.directive.js"],"names":["l","key","arguments","value","labels","clabels","i","j","length","replace","configure","$mdThemingProvider","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastLightColors","1000","theme","primaryPalette","default","hue-1","hue-2","hue-3","accentPalette","backgroundPalette","angular","module","baseURL","ApplicationBaseURL","activeUser","param","settings","login","UserLogin","identification","UserIdentification","language","UserLanguage","folderURL","UserFolderURL","isSuperUser","IsSuperUser","constant","selection","sm","gt-sm","md","gt-md","lg","gt-lg","config","$inject","decodeUri","$window","decodeURIComponent","filter","encodeUri","encodeURIComponent","loc","range","n","res","parseInt","push","AclController","$mdDialog","Dialog","usersWithACL","User","folder","userFilter","$query","$filter","$acl","users","closeModal","$resetUsersRights","hide","saveModal","$saveUsersRights","then","data","status","alert","confirmChange","user","confirmation","$confirmRights","vm","showing","message","removeUser","$removeUser","uid","addUser","$addUser","userToAdd","searchText","error","selectUser","selectedUser","$rights","this","controller","navController","$scope","$timeout","$interval","$http","$mdSidenav","$mdBottomSheet","$mdMedia","$log","sgConstant","sgSettings","Alarm","currentDay","window","get","success","secondsBeforeTomorrow","toggleLeft","toggle","debug","toggleRight","openBottomSheet","show","parent","element","document","getElementById","templateUrl","toggleDetailView","detail","toggleClass","$watch","newVal","isGtMedium","getAlarms","Acl","folderId","factory","$q","Settings","Resource","extend","$$resource","$User","prototype","$users","_this","deferred","defer","resolve","promise","fetch","response","forEach","canSubscribeUser","isSubscribed","wasSubscribed","bind","_","indexOf","pluck","userClass","isGroup","reject","splice","$resetRights","deferredSave","deferredSubscribe","action","$rightsAreDirty","$omit","save","$shadowRights","copy","rights","uids","join","all","currentAlarm","AlarmService","$mdToast","$toast","now","Date","browserTime","Math","floor","getTime","alarms","sort","a","b","x","y","next","pop","utc","url","alarmTime","delay","f","showAlarm","cancel","AlarmController","scope","reminder","ok","position","hideDelay","template","locals","Authentication","readCookie","name","foundCookie","prefix","pairs","currentPair","start","cookie","split","charAt","substr","readLoginCookie","loginValues","base64decode","redirectUrl","username","domain","userName","address","baseAddress","altBaseAddress","parts","hostpart","protocol","newAddress","location","href","startsWith","endsWith","getService","passwordPolicyConfig","service","d","password","rememberLogin","loginSuffix","method","loginCookie","expire","grace","msg","perr","LDAPPasswordPolicyError","PolicyNoError","PolicyAccountLocked","changePassword","newPassword","PolicyPasswordModNotAllowed","PolicyInsufficientPasswordQuality","PolicyPasswordTooShort","PolicyPasswordTooYoung","PolicyPasswordInHistory","formatted","PolicyPasswordUnknown","PolicyPasswordSystemUnknown","$get","PolicyPasswordChangeUnsupported","PolicyPasswordExpired","PolicyChangeAfterReset","PolicyMustSupplyOldPassword","provider","DialogService","$modal","title","content","confirm","options","prompt","label","PromptDialogController","o","body","clickOutsideToClose","escapeToClose","inputType","Gravatar","email","size","hash","s","substring","md5","path","_http","_q","_path","_activeUser","$factory","userResource","compact","escape","params","flatten","newguid","create","post","id","newValue","remove","userData","init","$gravatar","search","excludedUsers","when","results","index","compareUids","find","each","isUndefined","$$shortFormat","$shortFormat","$$image","image","c_email","empty","fullname","cn","no_email","$isAnonymous","$isSpecial","$confirmation","some","values","isEqual","zero","map","keys","isString","$folders","type","$$folders","folders","toString","sgFocus","$rootScope","$broadcast","sgAvatarImage","restrict","src","bindToController","controllerAs","sgAvatarImageController","$element","attributes","directive","sgColorPicker","$parse","link","iElement","iAttr","doSelect","attr","sgColorPickerController","sgColors","colors","select","color","sgCompile","$compile","sgCompileLink","attrs","ensureCompileRunsOnce","$eval","html","contents","sgEnter","ENTER_KEY","event","which","$apply","preventDefault","sgEscape","ESCAPE_KEY","elem","keyCode","sgFocusOn","$on","e","focus","sgFolderStylesheet","require","ngModel","sgSearchPreTransclude","compile","tElement","tAttr","inputEl","selectEl","buttonEl","removeAttr","compiledButtonEl","doSearch","on","cancelSearch","priority","sgSearch","transclude","clone","append","sgSearchController","previous","searchField","searchTextOptions","updateOn","debounce","blur","onChange","sgSubscribe","folderType","onFolderSelect","sgSubscribeDialogController","showDialog","sgSubscribeController","selectFolder","folderData","sgToggleGrid","ctrl","day","findIndex","modelDays","modelAttr","tile","ensureInitRunsOnce","tiles","days","isDefined","flattenedDays","sgToggleGridAttr","contains","addClass","String","suffix","pattern","isNumber","lastIndexOf","_base64_keyStr","base64encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","input","utf8encode","charCodeAt","isNaN","fromCharCode","L","k","K","G","I","F","H","r","q","p","u","aa","Z","D","t","Array","B","J","P","h","E","v","g","Y","X","W","V","C","S","Q","N","M","A","z","w","m","U","T","R","O","toLowerCase","capitalize","toUpperCase","slice","asDate","newDate","date","formatTime","hours","minutes","newString","daysUpTo","otherDate","day1","day2","tmp","nbrDays","round","setTime","isValidEmail","emailRE","test","asCSSIdentifier","characters","escapeds","re","RegExp","timeInterval","interval","stringWithSeparator","separator","month","getMonth","getDate","year","getYear","str","addDays","milliSeconds","addHours","nbrHours","addMinutes","nbrMinutes","beginOfDay","setHours","setMinutes","setSeconds","setMilliseconds","beginOfWeek","offset","firstDayOfWeek","getDay","endOfWeek","getDayString","getHourString","getHours"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\nString.prototype.endsWith = function(suffix) {\n return this.indexOf(suffix, this.length - suffix.length) !== -1;\n};\n\nString.prototype.startsWith = function(pattern, position) {\n position = angular.isNumber(position) ? position : 0;\n return this.lastIndexOf(pattern, position) === position;\n};\n\nString.prototype._base64_keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nString.prototype.base64encode = function () {\n var output = \"\";\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = this.utf8encode();\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n \n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n \n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n \n output = output +\n this._base64_keyStr.charAt(enc1) + this._base64_keyStr.charAt(enc2) +\n this._base64_keyStr.charAt(enc3) + this._base64_keyStr.charAt(enc4);\n }\n \n return output;\n};\n\nString.prototype.base64decode = function() { \n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = \"\" + this; // .replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\")\n while (i < input.length) {\n enc1 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc2 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc3 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc4 = this._base64_keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n \n output = output + String.fromCharCode(chr1);\n \n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n }\n\n return output;\n};\n\nString.prototype.md5 = function() {\n if (!this.length) { return; }\n // MD5 (Message-Digest Algorithm) by WebToolkit\n var md5 = function(s){function L(k,d){return(k<>>(32-d));}function K(G,k){var I,d,F,H,x;F=(G&2147483648);H=(k&2147483648);I=(G&1073741824);d=(k&1073741824);x=(G&1073741823)+(k&1073741823);if(I&d){return(x^2147483648^F^H);}if(I|d){if(x&1073741824){return(x^3221225472^F^H);}else{return(x^1073741824^F^H);}}else{return(x^F^H);}}function r(d,F,k){return(d&F)|((~d)&k);}function q(d,F,k){return(d&k)|(F&(~k));}function p(d,F,k){return(d^F^k);}function n(d,F,k){return(F^(d|(~k)));}function u(G,F,aa,Z,k,H,I){G=K(G,K(K(r(F,aa,Z),k),I));return K(L(G,H),F);}function f(G,F,aa,Z,k,H,I){G=K(G,K(K(q(F,aa,Z),k),I));return K(L(G,H),F);}function D(G,F,aa,Z,k,H,I){G=K(G,K(K(p(F,aa,Z),k),I));return K(L(G,H),F);}function t(G,F,aa,Z,k,H,I){G=K(G,K(K(n(F,aa,Z),k),I));return K(L(G,H),F);}function e(G){var Z;var F=G.length;var x=F+8;var k=(x-(x%64))/64;var I=(k+1)*16;var aa=Array(I-1);var d=0;var H=0;while(H>>29;return aa;}function B(x){var k=\"\",F=\"\",G,d;for(d=0;d<=3;d++){G=(x>>>(d*8))&255;F=\"0\"+G.toString(16);k=k+F.substr(F.length-2,2);}return k;}function J(k){k=k.replace(/rn/g,\"n\");var d=\"\";for(var F=0;F127)&&(x<2048)){d+=String.fromCharCode((x>>6)|192);d+=String.fromCharCode((x&63)|128);}else{d+=String.fromCharCode((x>>12)|224);d+=String.fromCharCode(((x>>6)&63)|128);d+=String.fromCharCode((x&63)|128);}}}return d;}var C=Array();var P,h,E,v,g,Y,X,W,V;var S=7,Q=12,N=17,M=22;var A=5,z=9,y=14,w=20;var o=4,m=11,l=16,j=23;var U=6,T=10,R=15,O=21;s=J(s);C=e(s);Y=1732584193;X=4023233417;W=2562383102;V=271733878;for(P=0;P 12) {\n p = 'pm';\n i = hours % 12;\n }\n if (minutes < 10) {\n m = '0' + minutes;\n }\n\n // %H : hour as a decimal number using 24-hour clock\n newString = newString.replace(\"%H\", hours < 10 ? '0' + hours : hours);\n // %I : hour as a decimal number using 12-hour clock\n newString = newString.replace(\"%I\", i < 10 ? '0' + i : i);\n // %M : minute as decimal number\n newString = newString.replace(\"%M\", m);\n // %p : 'am' or 'pm'\n newString = newString.replace(\"%p\", p);\n\n return newString;\n};\n\nDate.prototype.daysUpTo = function(otherDate) {\n var days = [];\n\n var day1 = this.getTime();\n var day2 = otherDate.getTime();\n if (day1 > day2) {\n var tmp = day1;\n day1 = day2;\n day2 = tmp;\n }\n\n var nbrDays = Math.round((day2 - day1) / 86400000) + 1;\n for (var i = 0; i < nbrDays; i++) {\n var newDate = new Date();\n newDate.setTime(day1 + (i * 86400000));\n days.push(newDate);\n }\n\n return days;\n};\n\nString.prototype.isValidEmail = function() {\n var emailRE = /^([\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+\\.)*[\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+@((((([a-z0-9]{1}[a-z0-9\\-]{0,62}[a-z0-9]{1})|[a-z])\\.)+[a-z]{2,})|(\\d{1,3}\\.){3}\\d{1,3}(\\:\\d{1,5})?)$/i;\n return emailRE.test(this);\n};\n\nString.prototype.asCSSIdentifier = function() {\n var characters = [ '_' , '\\\\.', '#' , '@' , '\\\\*', ':' , ',' , ' ', \"'\", '&', '\\\\+' ];\n var escapeds = [ '_U_', '_D_', '_H_', '_A_', '_S_', '_C_', '_CO_', '_SP_', '_SQ_', '_AM_', '_P_' ];\n\n var newString = this;\n for (var i = 0; i < characters.length; i++) {\n var re = new RegExp(characters[i], 'g');\n newString = newString.replace(re, escapeds[i]);\n }\n\n if (/^\\d+/.test(newString)) {\n newString = '_' + newString;\n }\n\n return newString;\n};\n\nString.prototype.timeInterval = function () {\n var interval;\n if (this == \"once_per_hour\")\n interval = 3600;\n else if (this == \"every_minute\")\n interval = 60;\n else {\n interval = parseInt(this.substr(6)) * 60;\n }\n\n return interval;\n};\n\nDate.prototype.stringWithSeparator = function(separator) {\n var month = '' + (this.getMonth() + 1);\n var day = '' + this.getDate();\n var year = this.getYear();\n if (year < 1000)\n year = '' + (year + 1900);\n if (month.length == 1)\n month = '0' + month;\n if (day.length == 1)\n day = '0' + day;\n\n if (separator == '-')\n str = year + '-' + month + '-' + day;\n else\n str = day + '/' + month + '/' + year;\n\n return str;\n};\n\nDate.prototype.addDays = function(nbrDays) {\n var milliSeconds = this.getTime();\n milliSeconds += 86400000 * nbrDays;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.addHours = function(nbrHours) {\n var milliSeconds = this.getTime();\n milliSeconds += 3600000 * nbrHours;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.addMinutes = function(nbrMinutes) {\n var milliSeconds = this.getTime();\n milliSeconds += 60000 * nbrMinutes;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.beginOfDay = function() {\n var beginOfDay = new Date(this.getTime());\n beginOfDay.setHours(0);\n beginOfDay.setMinutes(0);\n beginOfDay.setSeconds(0);\n beginOfDay.setMilliseconds(0);\n\n return beginOfDay;\n};\n\nDate.prototype.beginOfWeek = function() {\n var offset = firstDayOfWeek - this.getDay();\n if (offset > 0)\n offset -= 7;\n\n var beginOfWeek = this.beginOfDay();\n beginOfWeek.setHours(12);\n beginOfWeek.addDays(offset);\n\n return beginOfWeek;\n};\n\nDate.prototype.endOfWeek = function() {\n var endOfWeek = this.beginOfWeek();\n endOfWeek.addDays(6);\n\n endOfWeek.setHours(23);\n endOfWeek.setMinutes(59);\n endOfWeek.setSeconds(59);\n endOfWeek.setMilliseconds(999);\n\n return endOfWeek;\n};\n\n// YYYYMMDD\nDate.prototype.getDayString = function() {\n var newString = this.getYear();\n if (newString < 1000) newString += 1900;\n var month = '' + (this.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n newString += month;\n var day = '' + this.getDate();\n if (day.length == 1)\n day = '0' + day;\n newString += day;\n\n return newString;\n};\n\n// MMHH\nDate.prototype.getHourString = function() {\n var newString = this.getHours() + '00';\n if (newString.length == 3)\n newString = '0' + newString;\n\n return newString;\n};\n\nfunction l() {\n var key = arguments[0];\n var value = key;\n if (labels[key]) {\n value = labels[key];\n }\n else if (clabels[key]) {\n value = clabels[key];\n }\n for (var i = 1, j = 0; i < arguments.length; i++, j++) {\n value = value.replace('%{' + j + '}', arguments[i]);\n }\n\n return value;\n}\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.Common', ['ngMaterial'])\n .value('sgSettings', {\n baseURL: function() {\n return ApplicationBaseURL || null;\n },\n activeUser: function(param) {\n var settings = {\n login: UserLogin || null,\n identification: UserIdentification || null,\n language: UserLanguage || null,\n folderURL: UserFolderURL || null,\n isSuperUser: IsSuperUser || null\n };\n if (param)\n return settings[param];\n else\n return settings;\n }\n })\n\n .constant('sgColors', {\n selection: [\n '#FFFFFF',\n '#330033',\n '#C0C0C0',\n '#999999',\n '#666666',\n '#333333',\n '#000000',\n '#FFCCCC',\n '#FF6666',\n '#FF0000',\n '#CC0000',\n '#990000',\n '#660000',\n '#330000',\n '#FFCC99',\n '#FF9966',\n '#FF9900',\n '#FF6600',\n '#CC6600',\n '#993300',\n '#663300',\n '#FFFF99',\n '#FFFF66',\n '#FFCC66',\n '#FFCC33',\n '#CC9933',\n '#996633',\n '#663333',\n '#FFFFCC',\n '#FFFF33',\n '#FFFF00',\n '#FFCC00',\n '#999900',\n '#666600',\n '#333300',\n '#CCCCCC',\n '#66FF99',\n '#33FF33',\n '#33CC00',\n '#009900',\n '#006600',\n '#003300',\n '#99FFFF',\n '#33FFFF',\n '#66CCCC',\n '#00CCCC',\n '#339999',\n '#336666',\n '#003333',\n '#CCFFFF',\n '#66FFFF',\n '#33CCFF',\n '#3366FF',\n '#3333FF',\n '#000099',\n '#000066',\n '#CCCCFF',\n '#9999FF',\n '#6666CC',\n '#6633FF',\n '#6600CC',\n '#333399',\n '#330099',\n '#FFCCFF',\n '#FF99FF',\n '#CC66CC',\n '#CC33CC',\n '#993399',\n '#663366',\n '#99FF99'\n ]\n })\n\n // md break-points values are hard-coded in angular-material/src/core/util/constant.js\n // $mdMedia has a built-in support for those values but can also evaluate others\n // For some reasons, angular-material's break-points don't match the specs\n // Here we define values according to specs\n .constant('sgConstant', {\n 'sm': '(max-width: 600px)',\n 'gt-sm': '(min-width: 600px)',\n 'md': '(min-width: 600px) and (max-width: 1024px)',\n 'gt-md': '(min-width: 1025px)',\n 'lg': '(min-width: 1024px) and (max-width: 1280px)',\n 'gt-lg': '(min-width: 1280px)'\n })\n\n .config(configure);\n\n configure.$inject = ['$mdThemingProvider'];\n function configure($mdThemingProvider) {\n $mdThemingProvider.definePalette('sogo-green', {\n '50': 'eaf5e9',\n '100': 'cbe5c8',\n '200': 'aad6a5',\n '300': '88c781',\n '400': '66b86a',\n '500': '56b04c',\n '600': '4da143',\n '700': '388e3c',\n '800': '367d2e',\n '900': '225e1b',\n 'A100': 'b9f6ca',\n 'A200': '69f0ae',\n 'A400': '00e676',\n 'A700': '00c853',\n 'contrastDefaultColor': 'dark',\n 'contrastDarkColors': '50 100 200',\n 'contrastLightColors': '300 400 500 600 700 800 900'\n });\n $mdThemingProvider.definePalette('sogo-blue', {\n '50': 'f0faf9',\n '100': 'e1f5f3',\n '200': 'ceebe8',\n '300': 'bfe0dd',\n '400': 'b2d6d3',\n '500': 'a1ccc8',\n '600': '8ebfbb',\n '700': '7db3b0',\n '800': '639997',\n '900': '4d8080',\n 'A100': 'd4f7fa',\n 'A200': 'c3f5fa',\n 'A400': '53e3f0',\n 'A700': '00b0c0',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': ['50', '100', '200'],\n 'contrastLightColors': ['300', '400', '500', '600', '700', '800', '900', 'A100', 'A200', 'A400', 'A700']\n });\n $mdThemingProvider.definePalette('sogo-paper', {\n '50': 'fcf7f8',\n '100': 'f7f1dc',\n '200': 'ede5ca',\n '300': 'e6d8ba',\n '400': 'e2d2a3',\n '500': 'd6c48d',\n '600': 'baa870',\n '700': '857545',\n '800': '524517',\n '900': '433809',\n '1000': '000000',\n 'A100': 'ffffff',\n 'A200': 'eeeeee',\n 'A400': 'bdbdbd',\n 'A700': '616161',\n 'contrastDefaultColor': 'dark',\n 'contrastLightColors': '800 900'\n });\n // Default theme definition\n // .primaryColor will soon be deprecated in favor of primaryPalette (already on dev builds https://groups.google.com/forum/m/#!topic/ngmaterial/-sXR8CYBMPg)\n $mdThemingProvider.theme('default')\n .primaryPalette('sogo-blue', {\n 'default': '300',\n 'hue-1': '100',\n 'hue-2': '400',\n 'hue-3': 'A700'\n })\n .accentPalette('sogo-green', {\n 'default': '500',\n 'hue-1': '200',\n 'hue-2': '300',\n 'hue-3': 'A700'\n })\n .backgroundPalette('sogo-paper', {\n 'default': '100',\n 'hue-1': '200',\n 'hue-2': '50',\n 'hue-3': '500'\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n decodeUri.$inject = ['$window'];\n function decodeUri($window) {\n return $window.decodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('decodeUri', decodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n encodeUri.$inject = ['$window'];\n function encodeUri($window) {\n return $window.encodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('encodeUri', encodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * loc - A simple filter to return the localized version of a string.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n function loc() {\n return l;\n }\n\n angular.module('SOGo.Common')\n .filter('loc', loc);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * range - A simple filter that will return an array of the size of its argument.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n function range() {\n return function(n) {\n var res = [];\n for (var i = 0; i < parseInt(n); i++) {\n res.push(i);\n }\n return res;\n };\n }\n\n angular.module('SOGo.Common')\n .filter('range', range);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AclController.$inject = ['$mdDialog', 'Dialog', 'usersWithACL', 'User', 'folder'];\n function AclController($mdDialog, Dialog, usersWithACL, User, folder) {\n var vm = this;\n\n vm.users = usersWithACL; // ACL users\n vm.folder = folder;\n vm.selectedUser = null;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.saveModal = saveModal;\n vm.confirmChange = confirmChange;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n vm.selectUser = selectUser;\n vm.confirmation = { showing: false,\n message: ''};\n\n function userFilter($query) {\n return User.$filter($query, folder.$acl.users);\n }\n\n function closeModal() {\n folder.$acl.$resetUsersRights(); // cancel changes\n $mdDialog.hide();\n }\n\n function saveModal() {\n folder.$acl.$saveUsersRights().then(function() {\n $mdDialog.hide();\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function confirmChange(user) {\n var confirmation = user.$confirmRights();\n if (confirmation) {\n vm.confirmation.showing = true;\n vm.confirmation.message = confirmation;\n }\n }\n\n function removeUser(user) {\n folder.$acl.$removeUser(user.uid).catch(function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function addUser(data) {\n if (data) {\n folder.$acl.$addUser(data).then(function() {\n vm.userToAdd = '';\n vm.searchText = '';\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n }\n\n function selectUser(user) {\n if (vm.selectedUser == user) {\n vm.selectedUser = null;\n }\n else {\n vm.selectedUser = user;\n vm.selectedUser.$rights();\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .controller('AclController', AclController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n navController.$inject = ['$scope', '$timeout', '$interval', '$http', '$mdSidenav', '$mdBottomSheet', '$mdMedia', '$log', 'sgConstant', 'sgSettings', 'Alarm'];\n function navController($scope, $timeout, $interval, $http, $mdSidenav, $mdBottomSheet, $mdMedia, $log, sgConstant, sgSettings, Alarm) {\n\n $scope.activeUser = sgSettings.activeUser();\n\n // Show current day in top bar\n $scope.currentDay = window.currentDay;\n $timeout(function() {\n // Update date when day ends\n $interval(function() {\n $http.get('../date').success(function(data) {\n $scope.currentDay = data;\n });\n }, 24 * 3600 * 1000);\n }, window.currentDay.secondsBeforeTomorrow * 1000);\n\n $scope.toggleLeft = function () {\n $mdSidenav('left').toggle()\n .then(function () {\n $log.debug(\"toggle left is done\");\n });\n };\n $scope.toggleRight = function () {\n $mdSidenav('right').toggle()\n .then(function () {\n $log.debug(\"toggle RIGHT is done\");\n });\n };\n $scope.openBottomSheet = function() {\n $mdBottomSheet.show({\n parent: angular.element(document.getElementById('left-sidenav')),\n templateUrl: 'bottomSheetTemplate.html'\n });\n };\n $scope.toggleDetailView = function() {\n var detail = angular.element(document.getElementById('detailView'));\n detail.toggleClass('sg-close');\n };\n $scope.$watch(function() {\n return $mdMedia(sgConstant['gt-md']);\n }, function(newVal) {\n $scope.isGtMedium = newVal;\n });\n\n Alarm.getAlarms();\n }\n\n angular.module('SOGo.Common')\n .controller('navController', navController);\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name Acl\n * @constructor\n * @param {String} folderId - the folder ID associated to the ACLs\n */\n function Acl(folderId) {\n this.folderId = folderId;\n }\n\n /**\n * @memberof Acl\n * @desc The factory we'll use to register with Angular.\n * @return the Acl constructor\n */\n Acl.factory = ['$q', '$timeout', 'sgSettings', 'Resource', 'User', function($q, $timeout, Settings, Resource, User) {\n angular.extend(Acl, {\n $q: $q,\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $User: User\n });\n\n return Acl;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('Acl', Acl.factory);\n\n /**\n * @function $users\n * @memberof Acl.prototype\n * @desc Fetch the list of users that have specific rights for the current folder.\n * @return a promise of an array of User objects\n */\n Acl.prototype.$users = function() {\n var _this = this,\n deferred = Acl.$q.defer(),\n user;\n if (this.users) {\n deferred.resolve(this.users);\n }\n else {\n return Acl.$$resource.fetch(this.folderId, 'acls').then(function(response) {\n _this.users = [];\n // console.debug(JSON.stringify(users, undefined, 2));\n angular.forEach(response.users, function(data) {\n user = new Acl.$User(data);\n user.canSubscribeUser = user.isSubscribed;\n user.wasSubscribed = user.isSubscribed;\n user.$rights = angular.bind(user, user.$acl, _this.folderId);\n _this.users.push(user);\n });\n deferred.resolve(_this.users);\n return _this.users;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $addUser\n * @memberof Acl.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @see {@link User.$filter}\n */\n Acl.prototype.$addUser = function(user) {\n var _this = this,\n deferred = Acl.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.users, 'uid'), user.uid) > -1) {\n // No UID specified or user already in ACLs\n deferred.resolve();\n }\n else {\n Acl.$$resource.fetch(this.folderId, 'addUserInAcls', param).then(function() {\n user.wasSubscribed = false;\n user.userClass = user.isGroup ? 'group-user' : 'normal-user';\n user.$rights = angular.bind(user, user.$acl, _this.folderId);\n _this.users.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeUser\n * @memberof Acl.prototype\n * @desc Remove a user from the folder's ACL\n * @return a promise of the server call to remove the user from the folder's ACL\n */\n Acl.prototype.$removeUser = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Acl.$$resource.fetch(this.folderId, 'removeUserFromAcls', param).then(function() {\n var i = _.indexOf(_.pluck(_this.users, 'uid'), uid);\n if (i >= 0) {\n _this.users.splice(i, 1);\n }\n });\n };\n\n /**\n * @function $resetUsersRights\n * @memberof Acl.prototype\n * @desc Restore initial rights of all users.\n */\n Acl.prototype.$resetUsersRights = function() {\n angular.forEach(this.users, function(user) {\n user.$resetRights();\n });\n };\n\n /**\n * @function $saveUsersRights\n * @memberof Acl.prototype\n * @desc Save user rights that have changed and subscribe users that have been selected.\n * @return a promise that resolved only if the modifications and subscriptions were successful\n */\n Acl.prototype.$saveUsersRights = function() {\n var _this = this,\n deferredSave = Acl.$q.defer(),\n deferredSubscribe = Acl.$q.defer(),\n param = {action: 'saveUserRights'},\n users = [];\n\n // Save user rights\n angular.forEach(this.users, function(user) {\n if (user.$rightsAreDirty()) {\n users.push(user.$omit());\n // console.debug('save ' + JSON.stringify(user.$omit(), undefined, 2));\n }\n });\n if (users.length) {\n Acl.$$resource.save(this.folderId, users, param)\n .then(function() {\n // Save was successful; copy rights to shadow rights\n angular.forEach(_this.users, function(user) {\n if (user.$rightsAreDirty()) {\n user.$shadowRights = angular.copy(user.rights);\n }\n });\n deferredSave.resolve();\n }, deferredSave.reject);\n }\n else {\n deferredSave.resolve();\n }\n\n // Subscribe users\n users = [];\n angular.forEach(this.users, function(user) {\n if (!user.wasSubscribed && user.isSubscribed) {\n users.push(user.uid);\n // console.debug('subscribe ' + user.uid);\n }\n });\n if (users.length) {\n param = {uids: users.join(',')};\n Acl.$$resource.fetch(this.folderId, 'subscribeUsers', param)\n .then(function() {\n // Subscribe was successful; reset \"wasSubscribed\" attribute\n angular.forEach(_this.users, function(user) {\n user.wasSubscribed = user.isSubscribed;\n });\n deferredSubscribe.resolve();\n }, deferredSubscribe.reject);\n }\n else {\n deferredSubscribe.resolve();\n }\n return Acl.$q.all([deferredSave.promise, deferredSubscribe.promise]);\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Alarm\n * @constructor\n */\n function Alarm() {\n this.currentAlarm = null;\n }\n\n /**\n * @name getAlarms\n * @desc Fetch the list of alarms from the server and use the last one\n */\n Alarm.getAlarms = function() {\n var _this = this;\n var now = new Date();\n var browserTime = Math.floor(now.getTime()/1000);\n\n this.$$resource.fetch('', 'alarmslist?browserTime=' + browserTime).then(function(data) {\n \n var alarms = data.alarms.sort(function reverseSortByAlarmTime(a, b) {\n var x = parseInt(a[2]);\n var y = parseInt(b[2]);\n return (y - x);\n });\n\n if (alarms.length > 0) {\n var next = alarms.pop();\n var now = new Date();\n var utc = Math.floor(now.getTime()/1000);\n var url = next[0] + '/' + next[1];\n var alarmTime = parseInt(next[2]);\n var delay = alarmTime;\n if (alarmTime > 0) delay -= utc;\n var d = new Date(alarmTime*1000);\n //console.log (\"now = \" + now.toUTCString());\n //console.log (\"next event \" + url + \" in \" + delay + \" seconds (on \" + d.toUTCString() + \")\");\n\n var f = angular.bind(_this, Alarm.showAlarm, url);\n\n if (_this.currentAlarm)\n _this.$timeout.cancel(_this.currentAlarm);\n\n _this.currentAlarm = _this.$timeout(f, delay*1000);\n }\n });\n };\n \n /**\n * @name showAlarm\n * @desc Show the latest alarm using a toast\n * @param url The URL of the calendar component for snoozing\n */\n Alarm.showAlarm = function(url) {\n var _this = this;\n\n this.$$resource.fetch(url, '?resetAlarm=yes');\n\n this.$toast.show({\n position: 'top right',\n hideDelay: 0,\n template: [\n '',\n ' ',\n ' ',\n ' ',\n l('5 minutes'),\n ' ',\n ' ',\n l('10 minutes'),\n ' ',\n ' ',\n l('15 minutes'),\n ' ',\n ' ',\n l('30 minutes'),\n ' ',\n ' ',\n l('45 minutes'),\n ' ',\n ' ',\n l('1 hour'),\n ' ',\n ' ',\n l('1 day'),\n ' ',\n ' ',\n ' ',\n ' ',\n l('Cancel'),\n ' ',\n ' ',\n l('Ok'),\n ' ',\n ''\n ].join(''),\n locals: {\n url: url\n },\n controller: AlarmController\n });\n \n /**\n * @ngInject\n */\n AlarmController.$inject = ['scope', '$mdToast', 'url'];\n function AlarmController(scope, $mdToast, url) {\n scope.reminder = '10';\n scope.cancel = function() {\n $mdToast.hide();\n };\n scope.ok = function() {\n _this.$$resource.fetch(url, 'view?snoozeAlarm=' + scope.reminder);\n $mdToast.hide();\n };\n }\n };\n\n /**\n * @memberof Alarm\n * @desc The factory we'll register as Alarm in the Angular module SOGo.Common\n * @ngInject\n */\n AlarmService.$inject = ['$timeout', 'sgSettings', 'Resource', '$mdToast'];\n function AlarmService($timeout, Settings, Resource, $mdToast) {\n angular.extend(Alarm, {\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $toast: $mdToast\n });\n\n return Alarm; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Alarm', AlarmService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for Authentication */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n angular.module('SOGo.Authentication', [])\n\n .constant('passwordPolicyConfig', {\n PolicyPasswordChangeUnsupported: -3,\n PolicyPasswordSystemUnknown: -2,\n PolicyPasswordUnknown: -1,\n PolicyPasswordExpired: 0,\n PolicyAccountLocked: 1,\n PolicyChangeAfterReset: 2,\n PolicyPasswordModNotAllowed: 3,\n PolicyMustSupplyOldPassword: 4,\n PolicyInsufficientPasswordQuality: 5,\n PolicyPasswordTooShort: 6,\n PolicyPasswordTooYoung: 7,\n PolicyPasswordInHistory: 8,\n PolicyNoError: 65535\n })\n\n // TODO: convert to a Factory recipe?\n .provider('Authentication', Authentication);\n\n /**\n * @ngInject\n */\n function Authentication() {\n function readCookie(name) {\n var foundCookie, prefix, pairs, i, currentPair, start;\n foundCookie = null;\n prefix = name + '=';\n pairs = document.cookie.split(';');\n for (i = 0; !foundCookie && i < pairs.length; i++) {\n currentPair = pairs[i];\n start = 0;\n while (currentPair.charAt(start) == ' ')\n start++;\n if (start > 0)\n currentPair = currentPair.substr(start);\n if (currentPair.indexOf(prefix) === 0)\n foundCookie = currentPair.substr(prefix.length);\n }\n\n return foundCookie;\n }\n\n function readLoginCookie() {\n var loginValues = null,\n cookie = readCookie('0xHIGHFLYxSOGo'),\n value;\n if (cookie && cookie.length > 8) {\n value = decodeURIComponent(cookie.substr(8));\n loginValues = value.base64decode().split(':');\n }\n\n return loginValues;\n }\n\n function redirectUrl(username, domain) {\n var userName, address, baseAddress, altBaseAddress, parts, hostpart, protocol, newAddress;\n\n userName = username;\n if (domain)\n userName += '@' + domain.value;\n address = '' + window.location.href;\n baseAddress = ApplicationBaseURL + '/' + encodeURIComponent(userName);\n if (baseAddress[0] == '/') {\n parts = address.split('/');\n hostpart = parts[2];\n protocol = parts[0];\n baseAddress = protocol + '//' + hostpart + baseAddress;\n }\n parts = baseAddress.split('/');\n parts.splice(0, 3);\n altBaseAddress = parts.join('/');\n if ((address.startsWith(baseAddress) || address.startsWith(altBaseAddress)) &&\n !address.endsWith('/logoff')) {\n newAddress = address;\n }\n else {\n newAddress = baseAddress;\n }\n\n return newAddress;\n }\n\n this.$get = getService;\n\n getService.$inject = ['$q', '$http', 'passwordPolicyConfig'];\n function getService($q, $http, passwordPolicyConfig) {\n\n var _this = this, service;\n\n service = {\n login: function(data) {\n var d = $q.defer(),\n username = data.username,\n password = data.password,\n domain = data.domain,\n language,\n rememberLogin = data.rememberLogin ? 1 : 0;\n\n if (data.loginSuffix && !username.endsWith(data.loginSuffix)) {\n username += loginSuffix;\n domain = false;\n }\n if (data.language && data.language != 'WONoSelectionString') {\n language = data.language;\n }\n\n $http({\n method: 'POST',\n url: '/SOGo/connect',\n data: {\n userName: username,\n password: password,\n domain: domain,\n language: language,\n rememberLogin: rememberLogin\n }\n }).success(function(data, status) {\n // Make sure browser's cookies are enabled\n var loginCookie = readLoginCookie();\n if (!loginCookie) {\n d.reject(l('cookiesNotEnabled'));\n }\n else {\n // Check password policy\n if (typeof data.expire != 'undefined' && typeof data.grace != 'undefined') {\n if (data.expire < 0 && data.grace > 0) {\n d.reject({grace: data.grace});\n //showPasswordDialog('grace', createPasswordGraceDialog, data['grace']);\n } else if (data.expire > 0 && data.grace == -1) {\n d.reject({expire: data.expire});\n //showPasswordDialog('expiration', createPasswordExpirationDialog, data['expire']);\n }\n else {\n d.resolve(redirectUrl(username, domain));\n }\n }\n else {\n d.resolve(redirectUrl(username, domain));\n }\n }\n }).error(function(data, status) {\n var msg, perr;\n if (data && data.LDAPPasswordPolicyError) {\n perr = data.LDAPPasswordPolicyError;\n if (perr == passwordPolicyConfig.PolicyNoError) {\n msg = l('Wrong username or password.');\n }\n else if (perr == passwordPolicyConfig.PolicyAccountLocked) {\n msg = l('Your account was locked due to too many failed attempts.');\n }\n else {\n msg = l('Login failed due to unhandled error case: ') + perr;\n }\n }\n else {\n msg = l('Unhandled error response');\n }\n d.reject({error: msg});\n });\n return d.promise;\n }, // login: function(data) { ...\n\n changePassword: function(newPassword) {\n var d = $q.defer(),\n loginCookie = _this.readLoginCookie();\n\n $http({\n method: 'POST',\n url: '/SOGo/so/changePassword',\n data: {\n userName: loginCookie[0],\n password: loginCookie[1],\n newPassword: newPassword }\n }).success(function(data, status) {\n d.resolve();\n }).error(function(data, status) {\n var error,\n perr = data.LDAPPasswordPolicyError;\n\n if (!perr) {\n perr = passwordPolicyConfig.PolicyPasswordSystemUnknown;\n error = _(\"Unhandled error response\");\n }\n else if (perr == passwordPolicyConfig.PolicyNoError) {\n error = l(\"Password change failed\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordModNotAllowed) {\n error = l(\"Password change failed - Permission denied\");\n } else if (perr == passwordPolicyConfig.PolicyInsufficientPasswordQuality) {\n error = l(\"Password change failed - Insufficient password quality\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordTooShort) {\n error = l(\"Password change failed - Password is too short\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordTooYoung) {\n error = l(\"Password change failed - Password is too young\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordInHistory) {\n error = l(\"Password change failed - Password is in history\");\n } else {\n error = l(\"Unhandled policy error: %{0}\").formatted(perr);\n perr = passwordPolicyConfig.PolicyPasswordUnknown;\n }\n\n d.reject(error);\n });\n return d.promise;\n }\n };\n return service;\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Dialog\n * @constructor\n */\n function Dialog() {\n }\n\n /**\n * @name alert\n * @desc Show an alert dialog box with a single \"OK\" button\n * @param {string} title\n * @param {string} content\n */\n Dialog.alert = function(title, content) {\n var alert = this.$modal.alert()\n .title(title)\n .content(content)\n .ok(l('OK'));\n this.$modal.show(alert);\n };\n\n /**\n * @name confirm\n * @desc Show a confirmation dialog box with buttons 'Cancel' and 'OK'\n * @param {string} title\n * @param {string} content\n * @returns a promise that resolves if the user has clicked on the 'OK' button\n */\n Dialog.confirm = function(title, content, options) {\n var confirm = this.$modal.confirm()\n .title(title)\n .content(content)\n .ok((options && options.ok)? options.ok : l('OK'))\n .cancel((options && options.cancel)? options.cancel : l('Cancel'));\n return this.$modal.show(confirm);\n };\n\n /**\n * @name prompt\n * @desc Show a primpt dialog box with a input text field and the 'Cancel' and 'OK' buttons\n * @param {string} title\n * @param {string} label\n * @param {object} [options] - use a different input type by setting 'inputType'\n * @returns a promise that resolves with the input field value\n */\n Dialog.prompt = function(title, label, options) {\n var o = options || {},\n d = this.$q.defer();\n\n this.$modal.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '

',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n ' ',\n ' ' + l('Cancel'),\n ' ',\n ' ',\n ' ' + l('OK'),\n ' ',\n '
',\n '
'\n ].join(''),\n controller: PromptDialogController\n });\n\n /**\n * @ngInject\n */\n PromptDialogController.$inject = ['scope', '$mdDialog'];\n function PromptDialogController(scope, $mdDialog) {\n scope.title = title;\n scope.name = \"\";\n scope.cancel = function() {\n d.reject();\n $mdDialog.hide();\n };\n scope.ok = function() {\n d.resolve(scope.name);\n $mdDialog.hide();\n };\n }\n\n return d.promise;\n };\n\n /**\n * @memberof Dialog\n * @desc The factory we'll register as Dialog in the Angular module SOGo.Common\n * @ngInject\n */\n DialogService.$inject = ['$q', '$mdDialog'];\n function DialogService($q, $mdDialog) {\n angular.extend(Dialog, { $q: $q , $modal: $mdDialog });\n\n return Dialog; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Dialog', DialogService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Gravatar - A service to build the Gravatar URL for an email address\n * @memberof SOGo.Common\n * @param {string} email\n * @param {number} [size] - the size of the image\n * @ngInject\n */\n function Gravatar() {\n return function(email, size) {\n var x, y, hash, s = size;\n if (!email) {\n return '';\n }\n x = email.indexOf('<');\n if (x >= 0) {\n y = email.indexOf('>', x);\n if (y > x)\n email = email.substring(x+1,y);\n }\n if (!size) {\n s = 48; // default to 48 pixels\n }\n hash = email.md5();\n\n // return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=identicon';\n return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=wavatar';\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('Gravatar', Gravatar);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Resource\n * @constructor\n * @param {Object} $http - the Angular HTTP service\n * @param {Object} $q - the Angular promise/deferred service\n * @param {String} path - the base path of the external resource\n * @param {Object} options - extra attributes to be associated to the object\n */\n function Resource($http, $q, path, activeUser, options) {\n angular.extend(this, {\n _http: $http,\n _q: $q,\n _path: path,\n _activeUser: activeUser\n });\n angular.extend(this, options);\n // Trim trailing slash\n this._path = this._path.replace(/\\/$/, '');\n }\n\n /**\n * @memberof Resource\n * @desc The factory we'll use to register with Angular.\n * @return a new Resource object\n */\n Resource.$factory = ['$http', '$q', function($http, $q) {\n return function(path, activeUser, options) {\n return new Resource($http, $q, path, activeUser, options);\n };\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of Resource in Angular module.\n */\n angular.module('SOGo.Common').factory('Resource', Resource.$factory);\n\n /**\n * @function userResource\n * @memberof Resource.prototype\n * @desc Create a new Resource object associated to a username different than the active user.\n * @param {String} uid - the user UID\n * @return a new Resource object\n */\n Resource.prototype.userResource = function(uid) {\n var path = _.compact(this._activeUser.folderURL.split('/'));\n path.splice(path.length - 1, 1, escape(uid));\n\n return new Resource(this._http, this._q, '/' + path.join('/'), this._activeUser);\n };\n\n /**\n * @function fetch\n * @memberof Resource.prototype\n * @desc Fetch resource using a specific folder, action and/or parameters.\n * @param {string} folderId - the folder on which the action will be applied (ex: addressbook, calendar)\n * @param {string} action - the action to be used in the URL\n * @param {Object} params - Object parameters injected through the $http service\n * @return a promise\n */\n Resource.prototype.fetch = function(folderId, action, params) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (folderId) path.push(folderId.split('/'));\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http({\n method: 'GET',\n url: path,\n params: params\n })\n .success(deferred.resolve)\n .error(function(data, status) {\n if (status == 404)\n return deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function newguid\n * @memberof Resource.prototype\n * @desc Fetch a new GUID on the specified folder ID.\n * @return a promise of the new data structure\n */\n Resource.prototype.newguid = function(folderId) {\n var deferred = this._q.defer(),\n path = this._path + '/' + folderId + '/newguid';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function create\n * @memberof Resource.prototype\n * @desc Create a new resource using a specific action (post).\n * @param {string} action - the action to be used in the URL\n * @param {string} name - the new resource's name\n * @return a promise\n */\n Resource.prototype.create = function(action, name) {\n var deferred = this._q.defer(),\n path = this._path + '/' + action;\n\n this._http\n .post(path, { name: name })\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function post\n * @memberof Resource.prototype\n * @desc Post a resource attributes on the server.\n * @return a promise\n */\n Resource.prototype.post = function(id, action, data) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (id) path.push(id);\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http\n .post(path, data)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function save\n * @memberof Resource.prototype\n * @desc Save a resource attributes on the server (post /save).\n * @return a promise\n */\n Resource.prototype.save = function(id, newValue, options) {\n var deferred = this._q.defer(),\n action = (options && options.action)? options.action : 'save';\n\n return this.post(id, action, newValue);\n };\n\n /**\n * @function remove\n * @memberof Resource.prototype\n * @desc Delete a resource (get /delete).\n * @return a promise\n */\n Resource.prototype.remove = function(uid) {\n var deferred = this._q.defer(),\n path = this._path + '/' + uid + '/delete';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name User\n * @constructor\n * @param {object} [userData] - some default values for the user\n */\n function User(userData) {\n if (userData) {\n this.init(userData);\n }\n }\n\n /**\n * @memberof User\n * @desc The factory we'll use to register with Angular.\n * @return the User constructor\n */\n User.factory = ['$q', '$log', 'sgSettings', 'Resource', 'Gravatar', function($q, $log, Settings, Resource, Gravatar) {\n angular.extend(User, {\n $q: $q,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $gravatar: Gravatar,\n $query: '',\n $users: []\n });\n\n return User;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('User', User.factory);\n\n /**\n * @memberof User\n * @desc Search for users that match a string.\n * @param {string} search - a string used to performed the search\n * @param {object[]} excludedUsers - a list of User objects that must be excluded from the results\n * @return a promise of an array of matching User objects\n */\n User.$filter = function(search, excludedUsers) {\n var param = {search: search};\n\n if (!search) {\n // No query specified\n User.$users = [];\n return User.$q.when(User.$users);\n }\n if (User.$query == search) {\n // Query hasn't changed\n return User.$q.when(User.$users);\n }\n User.$query = search;\n\n return User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {\n var results, index, user,\n compareUids = function(data) {\n return this.uid == data.uid;\n };\n if (excludedUsers) {\n // Remove excluded users from response\n results = _.filter(response.users, function(data) {\n return !_.find(excludedUsers, compareUids, user);\n });\n }\n else {\n results = response.users;\n }\n // Remove users that no longer match the search query\n for (index = User.$users.length - 1; index >= 0; index--) {\n user = User.$users[index];\n if (!_.find(results, compareUids, user)) {\n User.$users.splice(index, 1);\n }\n }\n // Add new users matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(User.$users, compareUids, data))) {\n var user = new User(data);\n User.$users.splice(index, 0, user);\n }\n });\n User.$log.debug(User.$users);\n return User.$users;\n });\n };\n\n /**\n * @function init\n * @memberof User.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of user\n */\n User.prototype.init = function(data) {\n angular.extend(this, data);\n if (!this.$$shortFormat)\n this.$$shortFormat = this.$shortFormat();\n if (!this.$$image)\n this.$$image = this.image || User.$gravatar(this.c_email);\n\n // An empty attribute to trick md-autocomplete when adding users from the ACLs editor\n this.empty = ' ';\n };\n\n /**\n * @function $shortFormat\n * @memberof User.prototype\n * @return the fullname along with the email address\n */\n User.prototype.$shortFormat = function(options) {\n var fullname = this.cn || this.c_email;\n var email = this.c_email;\n var no_email = options && options.email === false;\n if (!no_email && email && fullname != email) {\n fullname += ' <' + email + '>';\n }\n return fullname;\n };\n\n /**\n * @function $acl\n * @memberof User.prototype\n * @desc Fetch the user rights associated to a specific folder and populate the 'rights' attribute.\n * @param {string} the folder ID\n * @return a promise\n */\n User.prototype.$acl = function(folderId) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {uid: this.uid};\n if (this.$shadowRights) {\n deferred.resolve(this.rights);\n }\n else {\n User.$$resource.fetch(folderId, 'userRights', param).then(function(data) {\n _this.rights = data;\n // Convert numbers (0|1) to boolean values\n //angular.forEach(_.keys(_this.rights), function(key) {\n // _this.rights[key] = _this.rights[key] ? true : false;\n //});\n // console.debug('rights ' + _this.uid + ' => ' + JSON.stringify(data, undefined, 2));\n // Keep a copy of the server's version\n _this.$shadowRights = angular.copy(data);\n deferred.resolve(data);\n return data;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $isAnonymous\n * @memberof User.prototype\n * @return true if it's the special anonymous user\n */\n User.prototype.$isAnonymous = function() {\n return this.uid == 'anonymous';\n };\n\n /**\n * @function $isSpecial\n * @memberof User.prototype\n * @desc Only accurate from the ACL editor.\n * @return true if the user is not a regular system user\n */\n User.prototype.$isSpecial = function() {\n return this.userClass && this.userClass == 'public-user';\n };\n\n /**\n * @function $confirmRights\n * @memberof User.prototype\n * @desc Check if a confirmation is required before giving some rights.\n * @return the confirmation message or false if no confirmation is required\n */\n User.prototype.$confirmRights = function() {\n var confirmation = false;\n\n if (this.$confirmation) {\n // Don't bother the user more than once\n return false;\n }\n\n if (_.some(_.values(this.rights))) {\n if (this.uid == 'anonymous') {\n confirmation = l('Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?');\n }\n else if (this.uid == '') {\n confirmation = l('Any user with an account on this system will be able to access your folder. Are you certain you trust them all?');\n }\n }\n\n this.$confirmation = confirmation;\n\n return confirmation;\n };\n\n /**\n * @function $rightsAreDirty\n * @memberof User.prototype\n * @return whether or not the rights have changed from their initial values\n */\n User.prototype.$rightsAreDirty = function() {\n return this.rights && !_.isEqual(this.rights, this.$shadowRights);\n };\n\n /**\n * @function $resetRights\n * @memberof User.prototype\n * @desc Restore initial rights or disable all rights\n * @param {boolean} [zero] - reset all rights to zero when true\n */\n User.prototype.$resetRights = function(zero) {\n var _this = this;\n if (zero) {\n // Disable all rights\n _.map(_.keys(this.rights), function(key) {\n if (angular.isString(_this.rights[key]))\n _this.rights[key] = 'None';\n else\n _this.rights[key] = 0;\n });\n }\n else {\n // Restore initial rights\n this.rights = angular.copy(this.$shadowRights);\n }\n };\n\n /**\n * @function $folders\n * @memberof User.prototype\n * @desc Retrieve the list of folders of a specific type\n * @param {string} type - either 'contact' or 'calendar'\n * @return a promise of the HTTP query result or the cached result\n */\n User.prototype.$folders = function(type) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {type: type};\n if (this.$$folders) {\n deferred.resolve(this.$$folders);\n }\n else {\n User.$$resource.userResource(this.uid).fetch(null, 'foldersSearch', param).then(function(response) {\n _this.$$folders = response.folders;\n deferred.resolve(response.folders);\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof User.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the User instance\n */\n User.prototype.$omit = function() {\n var user = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n user[key] = value;\n }\n });\n return user;\n };\n\n User.prototype.toString = function() {\n return '[User ' + this.c_email + ']';\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n \n /**\n * sgFocus - A service to set the focus on the element associated to a specific string\n * @memberof SOGo.Common\n * @param {string} name - the string identifier of the element\n * @see {@link SOGo.Common.sgFocusOn}\n * @ngInject\n */\n sgFocus.$inject = ['$rootScope', '$timeout'];\n function sgFocus($rootScope, $timeout) {\n return function(name) {\n $timeout(function() {\n $rootScope.$broadcast('sgFocusOn', name);\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('sgFocus', sgFocus);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true, newcap: false */\n 'use strict';\n\n /**\n * sgAvatarImage - An avatar directive that returns un img element with either a local URL (if sg-src is specified)\n * or a Gravatar URL built from the Gravatar factory.\n * Based on http://blog.lingohub.com/2014/08/better-ux-with-angularjs-directives/.\n * @memberof SOGo.Common\n * @example:\n \n */\n function sgAvatarImage() {\n return {\n restrict: 'AE',\n replace: true,\n scope: {\n size: '@',\n email: '=sgEmail',\n src: '=sgSrc'\n },\n template: '',\n bindToController: true,\n controller: 'sgAvatarImageController',\n controllerAs: 'vm'\n };\n }\n\n /**\n * @ngInject\n */\n sgAvatarImageController.$inject = ['$scope', '$element', 'Gravatar'];\n function sgAvatarImageController($scope, $element, Gravatar) {\n var vm = this;\n\n $scope.$watch('vm.email', function(email) {\n if (email && !vm.url) {\n vm.url = Gravatar(email, vm.size);\n }\n });\n\n // If sg-src is defined, watch the expression for the URL of a local image\n if ('sg-src' in $element[0].attributes) {\n $scope.$watch('vm.src', function(src) {\n if (src) {\n vm.url = src;\n }\n });\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgAvatarImage', sgAvatarImage)\n .controller('sgAvatarImageController', sgAvatarImageController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgColorPicker - Color picker widget\n * @restrict element\n * @param {function} sgOnSelect - the function to call when clicking on a color.\n * One variable is available: color.\n * @ngInject\n * @example:\n\n \n */\n sgColorPicker.$inject = ['$parse'];\n function sgColorPicker($parse) {\n return {\n restrict: 'E',\n template: [\n '',\n ' ',\n ' color_lens',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ''\n ].join(''),\n replace: true,\n bindToController: true,\n controller: sgColorPickerController,\n controllerAs: '$sgColorPickerController',\n link: link\n };\n\n function link(scope, iElement, iAttr, controller) {\n // Associate callback to controller\n controller.doSelect = $parse(iElement.attr('sg-on-select'));\n }\n }\n \n /**\n * @ngInject\n */\n sgColorPickerController.$inject = ['$scope', 'sgColors'];\n function sgColorPickerController($scope, sgColors) {\n var vm = this;\n\n vm.colors = sgColors.selection;\n vm.select = function(color) {\n vm.doSelect($scope, { color: color });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgColorPicker', sgColorPicker);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCompile - Assign an expression to a DOM element and compile it.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgCompile - the expression to compile\n * @ngInject\n * @example:\n\n
\n */\n sgCompile.$inject = ['$compile'];\n function sgCompile($compile) {\n return {\n restrict: 'A',\n link: sgCompileLink\n };\n\n function sgCompileLink(scope, element, attrs) {\n var ensureCompileRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-compile expression for changes\n return scope.$eval(attrs.sgCompile);\n },\n function(value) {\n // When the sg-compile expression changes, assign it into the current DOM\n element.html(value);\n \n // Compile the new DOM and link it to the current scope.\n // NOTE: we only compile .childNodes so that we don't get into infinite loop compiling ourselves\n $compile(element.contents())(scope);\n \n // Use un-watch feature to ensure compilation happens only once.\n ensureCompileRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgCompile', sgCompile);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEnter - A directive evaluated when the enter key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEnter() {\n var ENTER_KEY = 13;\n return function(scope, element, attrs) {\n element.bind(\"keydown keypress\", function(event) {\n if (event.which === ENTER_KEY) {\n scope.$apply(function() {\n scope.$eval(attrs.sgEnter);\n });\n event.preventDefault();\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEnter', sgEnter);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEscape - A directive evaluated when the escape key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEscape() {\n var ESCAPE_KEY = 27;\n return function(scope, elem, attrs) {\n elem.bind('keydown', function(event) {\n if (event.keyCode === ESCAPE_KEY) {\n scope.$apply(attrs.sgEscape);\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEscape', sgEscape);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgFocusOn - A directive that sets the focus on its element when the specified string is broadcasted\n * @memberof SOGo.Common\n * @see {@link SOGo.Common.sgFocus}\n * @ngInject\n * @example:\n\n \n */\n function sgFocusOn() {\n return function(scope, elem, attr) {\n scope.$on('sgFocusOn', function(e, name) {\n if (name === attr.sgFocusOn) {\n elem[0].focus();\n elem[0].select();\n }\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFocusOn', sgFocusOn);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgFolderStylesheet - Add CSS stylesheet for folder (addressbook or calendar)\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} ngModel - the object literal describing the folder (an Addressbook or Calendar instance)\n * @example:\n\n
\n
\n */\n function sgFolderStylesheet() {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '='\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFolderStylesheet', sgFolderStylesheet);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSearch - Search within a list of items\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {function} sgSearch - the function to call when performing a search.\n * Two variables are available: searchField and searchText.\n * @example:\n\n
\n \n arrow_back\n \n \n \n \n \n Subject\n sender\n \n
\n */\n sgSearchPreTransclude.$inject = ['$parse'];\n function sgSearchPreTransclude($parse) {\n return {\n restrict: 'A',\n controller: 'sgSearchController',\n controllerAs: '$sgSearchController',\n priority: 1001,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n var mdInputEl = tElement.find('md-input-container'),\n inputEl = tElement.find('input'),\n selectEl = tElement.find('md-select'),\n buttonEl = tElement.find('md-button');\n\n inputEl.attr('ng-model', '$sgSearchController.searchText');\n inputEl.attr('ng-model-options', '$sgSearchController.searchTextOptions');\n inputEl.attr('ng-change', '$sgSearchController.onChange()');\n if (selectEl) {\n selectEl.attr('ng-model', '$sgSearchController.searchField');\n selectEl.attr('ng-change', '$sgSearchController.onChange()');\n }\n if (buttonEl && buttonEl.attr('sg-search-cancel')) {\n buttonEl.attr('ng-click', buttonEl.attr('sg-search-cancel'));\n buttonEl.removeAttr('sg-search-cancel');\n }\n else {\n buttonEl = null;\n }\n\n return function postLink(scope, iElement, iAttr, controller) {\n var compiledButtonEl = iElement.find('button');\n\n // Associate callback to controller\n controller.doSearch = $parse(iElement.attr('sg-search'));\n\n // Reset the input field when cancelling the search\n if (buttonEl && compiledButtonEl) {\n compiledButtonEl.on('click', controller.cancelSearch);\n }\n };\n }\n }\n\n function sgSearch() {\n return {\n restrict: 'A',\n priority: 1000,\n transclude: true,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n return function postLink(scope, iElement, iAttr, controller, transclude) {\n transclude(function(clone) {\n iElement.append(clone);\n });\n };\n }\n }\n\n /**\n * @ngInject\n */\n sgSearchController.$inject = ['$scope', '$element'];\n function sgSearchController($scope, $element) {\n var vm = this;\n\n // Controller variables\n vm.previous = { searchText: '', searchField: '' };\n vm.searchText = null;\n\n // Model options\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n // Method to call on data changes\n vm.onChange = function() {\n if (vm.searchText !== null) {\n if (vm.searchText != vm.previous.searchText || vm.searchField != vm.previous.searchField) {\n if (vm.searchText.length > 2 || vm.searchText.length === 0) {\n // doSearch is the compiled expression of the sg-search attribute\n vm.doSearch($scope, { searchText: vm.searchText, searchField: vm.searchField });\n }\n vm.previous = { searchText: vm.searchText, searchField: vm.searchField };\n }\n }\n };\n\n // Reset input field when cancelling the search\n vm.cancelSearch = function() {\n vm.searchText = \"\";\n };\n }\n\n angular\n .module('SOGo.Common')\n .controller('sgSearchController', sgSearchController)\n .directive('sgSearch', sgSearchPreTransclude)\n .directive('sgSearch', sgSearch);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSubscribe - Common subscription widget\n * @restrict attribute\n * @param {string} sgSubscribe - the folder type\n * @param {function} sgSubscribeOnSelect - the function to call when subscribing to a folder.\n * One variable is available: folderData.\n * @ngInject\n * @example:\n\n Subscribe ..\n */\n sgSubscribe.$inject = ['User'];\n function sgSubscribe(User) {\n return {\n restrict: 'A',\n scope: {\n folderType: '@sgSubscribe',\n onFolderSelect: '&sgSubscribeOnSelect'\n },\n replace: false,\n bindToController: true,\n controller: sgSubscribeDialogController,\n controllerAs: '$sgSubscribeDialogController',\n link: link\n };\n }\n\n function link(scope, element, attrs, controller) {\n var inputEl = element.find('input');\n element.on('click', controller.showDialog);\n }\n\n /**\n * @ngInject\n */\n sgSubscribeDialogController.$inject = ['$mdDialog'];\n function sgSubscribeDialogController($mdDialog) {\n var vm = this;\n vm.showDialog = function() {\n $mdDialog.show({\n templateUrl: '../Contacts/UIxContactsUserFolders',\n clickOutsideToClose: true,\n locals: {\n folderType: vm.folderType,\n onFolderSelect: vm.onFolderSelect\n },\n controller: sgSubscribeController,\n controllerAs: 'subscribe'\n });\n };\n }\n\n /**\n * @ngInject\n */\n sgSubscribeController.$inject = ['folderType', 'onFolderSelect', 'User'];\n function sgSubscribeController(folderType, onFolderSelect, User) {\n var vm = this;\n\n vm.selectedUser = null;\n vm.users = User.$users;\n\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n vm.onChange = function() {\n User.$filter(vm.searchText).then(function() {\n if (vm.selectedUser) {\n // If selected user is no longer part of the matching users, unselect it\n if (_.isUndefined(_.find(User.$users, function(user) {\n return user.uid == vm.selectedUser.uid;\n }))) {\n vm.selectedUser = null;\n }\n }\n });\n };\n\n vm.selectUser = function(i) {\n if (vm.selectedUser == vm.users[i]) {\n vm.selectedUser = null;\n }\n else {\n // Fetch folders of specific type for selected user\n vm.users[i].$folders(folderType).then(function() {\n vm.selectedUser = vm.users[i];\n });\n }\n };\n\n // Callback upon subscription to a folder\n vm.selectFolder = function(folder) {\n onFolderSelect({folderData: folder});\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgSubscribe', sgSubscribe);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgToggleGrid - Convert the tiles of a grid to toggle buttons\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgToggleGrid - the model of the source objects\n * @param {string} [sgToggleGridAttr] - the attribute that specifies if an object is enabled (toggled)\n * @ngInject\n * @example:\n\n ..\n */\n sgToggleGrid.$inject = ['$parse'];\n function sgToggleGrid($parse) {\n return {\n restrict: 'A',\n link: link\n };\n\n function link(scope, iElement, attrs, ctrl) {\n var tiles = iElement.find('md-grid-tile'),\n tile,\n i,\n modelDays,\n modelAttr,\n ensureInitRunsOnce,\n toggleClass;\n\n ensureInitRunsOnce = scope.$watch(function() {\n // Parse attribute until it returns a valid object\n return $parse(attrs.sgToggleGrid)(scope);\n }, function(days) {\n if (angular.isDefined(days)) {\n var flattenedDays = days;\n modelDays = days;\n if (attrs.sgToggleGridAttr) {\n modelAttr = attrs.sgToggleGridAttr;\n flattenedDays = _.pluck(days, attrs.sgToggleGridAttr);\n }\n _.each(tiles, function(o) {\n var tile = angular.element(o);\n if (_.contains(flattenedDays, tile.attr('value'))) {\n tile.addClass('sg-active');\n }\n });\n ensureInitRunsOnce();\n }\n });\n\n toggleClass = function() {\n // Toggle class on click event and call toggle function\n var tile = angular.element(this),\n day = tile.attr('value');\n tile.toggleClass('sg-active');\n toggle(day);\n };\n\n for (i = 0; i < tiles.length; i++) {\n tile = angular.element(tiles[i]);\n tile.addClass('iconButton');\n tile.find('figure').addClass('md-icon');\n tile.on('click', toggleClass);\n }\n\n function toggle(day) {\n var i = _.findIndex(modelDays, function(o) {\n if (modelAttr)\n return o[modelAttr] == day;\n else\n return o == day;\n });\n if (i < 0) {\n if (modelAttr) {\n var o = {};\n o[modelAttr] = day;\n modelDays.push(o);\n }\n else\n modelDays.push(day);\n }\n else\n modelDays.splice(i, 1);\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgToggleGrid', sgToggleGrid);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.js b/UI/WebServerResources/js/Contacts.js new file mode 100644 index 0000000000..1a4450dedb --- /dev/null +++ b/UI/WebServerResources/js/Contacts.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("app",{url:"/addressbooks","abstract":!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:stateAddressbooks}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:stateAddressbook}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:stateNewCard}}).state("app.addressbook.card",{url:"/:cardId","abstract":!0,views:{card:{template:""}},resolve:{stateCard:stateCard}}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),$urlRouterProvider.otherwise("/addressbooks/personal")}function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}function stateAddressbook($stateParams,AddressBook){return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData}function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});return stateAddressbook.selectedCard=!0,card}function stateCard($stateParams,stateAddressbook){return stateAddressbook.selectedCard=$stateParams.cardId,stateAddressbook.$getCard($stateParams.cardId)}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.ContactsUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAddressbooks.$inject=["AddressBook"],stateAddressbook.$inject=["$stateParams","AddressBook"],stateNewCard.$inject=["$stateParams","stateAddressbook","Card"],stateCard.$inject=["$stateParams","stateAddressbook"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AddressBookController($scope,$state,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function newComponent(ev){function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide(),$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ",'
'," "," "+l("Contact")," "," "," "+l("List")," ","
","
","
"].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController}),ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"]}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=!1})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards),delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=!0})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return vm.selectedFolder.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter("")}var vm=this;AddressBook.selectedFolder=stateAddressbook,vm.selectedFolder=stateAddressbook,vm.selectCard=selectCard,vm.newComponent=newComponent,vm.notSelectedComponent=notSelectedComponent,vm.unselectCards=unselectCards,vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards,vm.saveSelectedCards=saveSelectedCards,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1}}AddressBookController.$inject=["$scope","$state","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)}(),function(){"use strict";function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){function select(folder){vm.editMode=!1,$state.go("app.addressbook",{addressbookId:folder.id})}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){folder.isRemote||(vm.editMode=folder.id,vm.originalAddressbook=angular.extend({},folder.$omit()),focus("addressBookName_"+folder.id))}function revertEditing(folder){folder.name=vm.originalAddressbook.name,vm.editMode=!1}function save(folder){var name=folder.name;name&&name.length>0&&name!=vm.originalAddressbook.name&&folder.$rename(name).then(function(data){vm.editMode=!1},function(data,status){Dialog.alert(l("Warning"),data)})}function confirmDelete(){vm.service.selectedFolder.isSubscription?vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null,$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){return vm.service.selectedFolder=null,!0})["catch"](function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}function importCards(){}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name),AddressBook.$subscribe(addressbookData.owner,addressbookData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=AddressBook,vm.select=select,vm.newAddressbook=newAddressbook,vm.edit=edit,vm.revertEditing=revertEditing,vm.save=save,vm.confirmDelete=confirmDelete,vm.importCards=importCards,vm.exportCards=exportCards,vm.showLinks=showLinks,vm.share=share,vm.subscribeToFolder=subscribeToFolder}AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)}(),function(){"use strict";function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){return AddressBook.selectedFolder.$filter($query,{dry:!0,excludeLists:!0},excludedCards),AddressBook.selectedFolder.$cards}function save(form){form.$valid&&vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);0>i?AddressBook.selectedFolder.$reload():AddressBook.selectedFolder.cards[i]=angular.copy(vm.card),$state.go("app.addressbook.card.view",{cardId:vm.card.id})})["catch"](function(err){console.log(err)})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset(),vm.card.isNew?(vm.card=null,delete AddressBook.selectedFolder.selectedCard,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})):$state.go("app.addressbook.card.view",{cardId:vm.card.id})}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id}),vm.card=null,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function viewRawSource($event){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){function CardRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:CardRawSourceDialogController}),CardRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.card=stateCard,vm.currentFolder=AddressBook.selectedFolder,vm.allEmailTypes=Card.$EMAIL_TYPES,vm.allTelTypes=Card.$TEL_TYPES,vm.allUrlTypes=Card.$URL_TYPES,vm.allAddressTypes=Card.$ADDRESS_TYPES,vm.categories={},vm.userFilterResults=[],vm.addOrgUnit=addOrgUnit,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.viewRawSource=viewRawSource}CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",CardController)}(),function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];return data.street&&lines.push(data.street),data.street2&&lines.push(data.street2),data.locality&&locality_region.push(data.locality),data.region&&locality_region.push(data.region),locality_region.length>0&&lines.push(locality_region.join(", ")),data.country&&lines.push(data.country),data.postalcode&&lines.push(data.postalcode),lines.join("
")}}],template:'
'}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)}(); +//# sourceMappingURL=Contacts.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.js.map b/UI/WebServerResources/js/Contacts.js.map new file mode 100644 index 0000000000..f0cfa48e3c --- /dev/null +++ b/UI/WebServerResources/js/Contacts.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Contacts.js","sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","addressbooks","templateUrl","controller","controllerAs","resolve","stateAddressbooks","addressbook","stateAddressbook","card","stateCard","stateNewCard","template","card@app.addressbook","otherwise","AddressBook","$findAll","window","contactFolders","$stateParams","$find","addressbookId","$futureAddressBookData","Card","tag","contactType","pid","c_component","selectedCard","cardId","$getCard","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","angular","module","config","run","$inject","AddressBookController","$scope","$state","$timeout","$mdDialog","focus","Dialog","Settings","selectCard","go","id","newComponent","ev","ComponentDialogController","scope","create","type","hide","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","vm","selectedFolder","notSelectedComponent","currentCard","selected","unselectCards","_","each","cards","confirmDeleteSelectedCards","confirm","then","selectedCards","filter","$deleteCards","data","status","saveSelectedCards","selectedUIDs","pluck","location","href","ApplicationBaseURL","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","this","AddressBooksController","User","select","folder","editMode","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","length","$rename","alert","confirmDelete","service","isSubscription","$delete","importCards","exportCards","showLinks","LinksDialogController","close","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","debug","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","$reload","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","o","viewRawSource","$event","$$resource","post","currentFolder","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","push","street2","locality","region","country","postalcode","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: ''\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $state, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.mode = { search: false };\n \n function selectCard(card) {\n $state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});\n }\n \n function newComponent(ev) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' ',\n ' ' + l('Contact'),\n ' ',\n ' ',\n ' ' + l('List'),\n ' ',\n '
',\n '
',\n '
'\n ].join(''),\n locals: {\n addressbookId: vm.selectedFolder.id\n },\n controller: ComponentDialogController\n });\n \n /**\n * @ngInject\n */\n ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];\n function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {\n scope.create = function(type) {\n $mdDialog.hide();\n $state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });\n };\n }\n }\n\n function notSelectedComponent(currentCard, type) {\n return (currentCard && currentCard.c_component == type && !currentCard.selected);\n }\n\n function unselectCards() {\n _.each(vm.selectedFolder.cards, function(card) { card.selected = false; });\n }\n \n function confirmDeleteSelectedCards() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected contacts?'))\n .then(function() {\n // User confirmed the deletion\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$deleteCards(selectedCards);\n delete vm.selectedFolder.selectedCard;\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function saveSelectedCards() {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var selectedUIDs = _.pluck(selectedCards, 'id');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.cards, function(card) {\n card.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter('', { sort: field });\n }\n\n function sortedBy(field) {\n return vm.selectedFolder.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select(folder) {\n vm.editMode = false;\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards() {\n\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('
');\n };\n }],\n template: '
'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js b/UI/WebServerResources/js/Contacts.services.js new file mode 100644 index 0000000000..a9c89a8227 --- /dev/null +++ b/UI/WebServerResources/js/Contacts.services.js @@ -0,0 +1,2 @@ +!function(){"use strict";function AddressBook(futureAddressBookData){if("function"!=typeof futureAddressBookData.then)if(this.init(futureAddressBookData),this.name&&!this.id){var newAddressBookData=AddressBook.$$resource.create("createFolder",this.name);this.$unwrap(newAddressBookData)}else this.id&&(this.$acl=new AddressBook.$$Acl("Contacts/"+this.id));else this.$unwrap(futureAddressBookData)}AddressBook.$factory=["$q","$timeout","$log","sgSettings","Resource","Card","Acl","Preferences",function($q,$timeout,$log,Settings,Resource,Card,Acl,Preferences){return angular.extend(AddressBook,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$Card:Card,$$Acl:Acl,$Preferences:Preferences,activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),AddressBook}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("AddressBook",AddressBook.$factory),AddressBook.$filterAll=function(search,options,excludedCards){var params={search:search};if(!search)return AddressBook.$cards=[],AddressBook.$q.when(AddressBook.$cards);if(angular.isUndefined(AddressBook.$cards))AddressBook.$cards=[];else if(AddressBook.$query==search)return AddressBook.$q.when(AddressBook.$cards);return AddressBook.$query=search,angular.extend(params,options),AddressBook.$$resource.fetch(null,"allContactSearch",params).then(function(response){var results,card,index,compareIds=function(data){return this.id==data.id};for(results=excludedCards?_.filter(response.contacts,function(data){return _.isUndefined(_.find(excludedCards,compareIds,data))}):response.contacts,index=AddressBook.$cards.length-1;index>=0;index--)card=AddressBook.$cards[index],_.isUndefined(_.find(results,compareIds,card))&&AddressBook.$cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(AddressBook.$cards,compareIds,data))){var card=new AddressBook.$Card(data,search);AddressBook.$cards.splice(index,0,card)}}),AddressBook.$cards})},AddressBook.$add=function(addressbook){var list,sibling,i;list=addressbook.isSubscription?this.$subscriptions:this.$addressbooks,sibling=_.find(list,function(o){return"personal"==addressbook.id||"personal"!=o.id&&1===o.name.localeCompare(addressbook.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,addressbook)},AddressBook.$findAll=function(data){var _this=this;return data&&(this.$addressbooks=[],this.$subscriptions=[],this.$remotes=[],angular.forEach(data,function(o,i){var addressbook=new AddressBook(o);addressbook.isRemote?_this.$remotes.push(addressbook):addressbook.isSubscription?_this.$subscriptions.push(addressbook):_this.$addressbooks.push(addressbook)})),this.$addressbooks},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$$resource.fetch(addressbookId,"view");return new AddressBook(futureAddressBookData)},AddressBook.$subscribe=function(uid,path){var _this=this;return AddressBook.$$resource.userResource(uid).fetch(path,"subscribe").then(function(addressbookData){var addressbook=new AddressBook(addressbookData);return _.isUndefined(_.find(_this.$subscriptions,function(o){return o.id==addressbookData.id}))&&AddressBook.$add(addressbook),addressbook})},AddressBook.prototype.init=function(data){this.$cards=[],this.cards=[],angular.extend(this,data),this.isOwned=AddressBook.activeUser.isSuperUser||this.owner==AddressBook.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=AddressBook.activeUser.login,this.$query={search:"name_or_address",value:"",sort:"c_cn",asc:"true"}},AddressBook.prototype.$id=function(){return this.id?AddressBook.$q.when(this.id):this.$futureAddressBookData.then(function(addressbook){return addressbook.id})},AddressBook.prototype.$selectedCount=function(){var count;return count=0,this.cards&&(count=_.filter(this.cards,function(card){return card.selected}).length),count},AddressBook.prototype.$startRefreshTimeout=function(){var _this=this;AddressBook.$refreshTimeout&&AddressBook.$timeout.cancel(AddressBook.$refreshTimeout),AddressBook.$Preferences.ready().then(function(){var refreshViewCheck=AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,AddressBook.prototype.$reload);AddressBook.$refreshTimeout=AddressBook.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},AddressBook.prototype.$reload=function(){var _this=this;return this.$startRefreshTimeout(),AddressBook.$$resource.fetch(this.id,"view").then(function(response){var index,card,results=response.cards,cards=_this.cards,compareIds=function(data){return this.id==data.id};for(index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data);cards.splice(index,0,card)}}),cards})},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;if(options&&(angular.extend(this.$query,options),options.dry)){if(!search)return this.$cards=[],AddressBook.$q.when(this.$cards);if(this.$query.value==search)return AddressBook.$q.when(this.$cards)}return this.$query.value=search,this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",_this.$query)}).then(function(response){var results,cards,card,index,compareIds=function(data){return this.id==data.id};for(cards=options&&options.dry?_this.$cards:_this.cards,results=excludedCards?_.filter(response.cards,function(card){return _.isUndefined(_.find(excludedCards,compareIds,card))}):response.cards,index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data,search);cards.splice(index,0,card)}}),_.each(results,function(data,index){var oldIndex,removedCards;cards[index].id!=data.id&&(oldIndex=_.findIndex(cards,compareIds,data),removedCards=cards.splice(oldIndex,1),cards.splice(index,0,removedCards[0]))}),cards})},AddressBook.prototype.$rename=function(name){var i=_.indexOf(_.pluck(AddressBook.$addressbooks,"id"),this.id);return this.name=name,AddressBook.$addressbooks.splice(i,1),AddressBook.$add(this),this.$save()},AddressBook.prototype.$delete=function(){var list,promise,_this=this,d=AddressBook.$q.defer();return this.isSubscription?(promise=AddressBook.$$resource.fetch(this.id,"unsubscribe"),list=AddressBook.$subscriptions):(promise=AddressBook.$$resource.remove(this.id),list=AddressBook.$addressbooks),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},AddressBook.prototype.$deleteCards=function(cards){var uids=_.map(cards,function(card){return card.id}),_this=this;return AddressBook.$$resource.post(this.id,"batchDelete",{uids:uids}).then(function(){_this.cards=_.difference(_this.cards,cards)})},AddressBook.prototype.$save=function(){return AddressBook.$$resource.save(this.id,this.$omit()).then(function(data){return data})},AddressBook.prototype.$getCard=function(cardId){return this.$id().then(function(addressbookId){return AddressBook.$Card.$find(addressbookId,cardId)})},AddressBook.prototype.$unwrap=function(futureAddressBookData){var _this=this;this.$futureAddressBookData=futureAddressBookData.then(function(data){return AddressBook.$timeout(function(){return angular.forEach(AddressBook.$findAll(),function(o,i){o.id==data.id&&angular.extend(_this,o)}),_this.init(data),angular.forEach(_this.cards,function(o,i){_this.cards[i]=new AddressBook.$Card(o)}),_this.$acl=new AddressBook.$$Acl("Contacts/"+_this.id),_this.$startRefreshTimeout(),_this})},function(data){_this.isError=!0,angular.isObject(data)&&AddressBook.$timeout(function(){angular.extend(_this,data)})})},AddressBook.prototype.$omit=function(){var addressbook={};return angular.forEach(this,function(value,key){"constructor"!=key&&"cards"!=key&&"$"!=key[0]&&(addressbook[key]=value)}),addressbook}}(),function(){"use strict";function Card(futureCardData,partial){if("function"!=typeof futureCardData.then){if(this.init(futureCardData,partial),this.pid&&!this.id){var newCardData=Card.$$resource.newguid(this.pid);this.$unwrap(newCardData),this.isNew=!0}}else this.$unwrap(futureCardData)}Card.$TEL_TYPES=["work","home","cell","fax","pager"],Card.$EMAIL_TYPES=["work","home","pref"],Card.$URL_TYPES=["work","home","pref"],Card.$ADDRESS_TYPES=["work","home"],Card.$factory=["$timeout","sgSettings","Resource","Preferences","Gravatar",function($timeout,Settings,Resource,Preferences,Gravatar){return angular.extend(Card,{$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$timeout:$timeout,$gravatar:Gravatar}),Preferences.ready().then(function(){Preferences.defaults.SOGoContactsCategories&&(Card.$categories=Preferences.defaults.SOGoContactsCategories)}),Card}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("Card",Card.$factory),Card.$find=function(addressbookId,cardId){var futureCardData=this.$$resource.fetch([addressbookId,cardId].join("/"),"view");return cardId?new Card(futureCardData):Card.$unwrapCollection(futureCardData)},Card.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(Card.$categories,function(category){return-1!=category.search(re)})},Card.$unwrapCollection=function(futureCardData){var collection={};return collection.$futureCardData=futureCardData,futureCardData.then(function(cards){Card.$timeout(function(){angular.forEach(cards,function(data,index){collection[data.id]=new Card(data)})})}),collection},Card.prototype.init=function(data,partial){this.refs=[],angular.extend(this,data),this.$$fullname||(this.$$fullname=this.$fullname()),this.$$email||(this.$$email=this.$preferredEmail(partial)),this.$$image||(this.$$image=this.image||Card.$gravatar(this.$preferredEmail(partial),32)),this.selected=!1,this.empty=" "},Card.prototype.$id=function(){return this.$futureCardData.then(function(data){return data.id})},Card.prototype.$save=function(){var _this=this,action="saveAsContact";return"vlist"==this.c_component&&(action="saveAsList"),Card.$$resource.save([this.pid,this.id||"_new_"].join("/"),this.$omit(),{action:action}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Card.prototype.$delete=function(attribute,index){return attribute?void(index>-1&&this[attribute].length>index&&this[attribute].splice(index,1)):Card.$$resource.remove([this.pid,this.id].join("/"))},Card.prototype.$fullname=function(){var names,fn=this.c_cn||"";return 0===fn.length&&(names=[],this.c_givenname&&this.c_givenname.length>0&&names.push(this.c_givenname),this.nickname&&this.nickname.length>0&&names.push(""+this.nickname+""),this.c_sn&&this.c_sn.length>0&&names.push(this.c_sn),names.length>0?fn=names.join(" "):this.c_org&&this.c_org.length>0?fn=this.c_org:this.emails&&this.emails.length>0?fn=_.find(this.emails,function(i){return""!==i.value}).value:this.c_cn&&this.c_cn.length>0&&(fn=this.c_cn)),fn},Card.prototype.$description=function(){var description=[];return this.title&&description.push(this.title),this.role&&description.push(this.role),this.orgUnits&&this.orgUnits.length>0&&_.forEach(this.orgUnits,function(unit){""!==unit.value&&description.push(unit.value)}),this.org&&description.push(this.org),this.description&&description.push(this.description),description.join(", ")},Card.prototype.$preferredEmail=function(partial){var email,re;return partial&&(re=new RegExp(partial,"i"),email=_.find(this.emails,function(o){return re.test(o.value)})),email?email=email.value:(email=_.find(this.emails,function(o){return"pref"==o.type}),email=email?email.value:this.emails&&this.emails.length?this.emails[0].value:""),email},Card.prototype.$shortFormat=function(partial){var fullname=this.$fullname(),email=this.$preferredEmail(partial);return email&&email!=fullname&&(fullname+=" <"+email+">"),fullname},Card.prototype.$birthday=function(){return new Date(1e3*this.birthday)},Card.prototype.$isCard=function(){return"vcard"==this.c_component},Card.prototype.$isList=function(){return"vlist"==this.c_component},Card.prototype.$addOrgUnit=function(orgUnit){if(angular.isUndefined(this.orgUnits))this.orgUnits=[{value:orgUnit}];else{for(var i=0;i"),"["+desc+"]"}}(); +//# sourceMappingURL=Contacts.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js.map b/UI/WebServerResources/js/Contacts.services.js.map new file mode 100644 index 0000000000..292a7a0630 --- /dev/null +++ b/UI/WebServerResources/js/Contacts.services.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","then","this","init","name","id","newAddressBookData","$$resource","create","$unwrap","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Card","Acl","Preferences","angular","extend","activeUser","$Card","$Preferences","selectedFolder","$refreshTimeout","module","e","factory","$filterAll","search","options","excludedCards","params","$cards","when","isUndefined","$query","fetch","response","results","card","index","compareIds","data","_","filter","contacts","find","length","splice","each","$add","addressbook","list","sibling","i","isSubscription","$subscriptions","$addressbooks","o","localeCompare","indexOf","pluck","$findAll","_this","$remotes","forEach","isRemote","push","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","cards","isOwned","isSuperUser","owner","login","value","sort","asc","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","save","$omit","$getCard","cardId","isError","isObject","key","futureCardData","partial","pid","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Gravatar","$gravatar","SOGoContactsCategories","$categories","join","$unwrapCollection","filterCategories","query","re","RegExp","category","collection","$futureCardData","refs","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","empty","action","c_component","$shadowData","attribute","names","fn","c_cn","c_givenname","nickname","c_sn","c_org","emails","$description","description","title","role","orgUnits","unit","org","email","test","type","$shortFormat","fullname","$birthday","Date","birthday","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","deep","copy","toString","desc"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name AddressBook\n * @constructor\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function AddressBook(futureAddressBookData) {\n // Data is immediately available\n if (typeof futureAddressBookData.then !== 'function') {\n this.init(futureAddressBookData);\n if (this.name && !this.id) {\n // Create a new addressbook on the server\n var newAddressBookData = AddressBook.$$resource.create('createFolder', this.name);\n this.$unwrap(newAddressBookData);\n }\n else if (this.id) {\n this.$acl = new AddressBook.$$Acl('Contacts/' + this.id);\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureAddressBookData);\n }\n }\n\n /**\n * @memberof AddressBook\n * @desc The factory we'll use to register with Angular\n * @returns the AddressBook constructor\n */\n AddressBook.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Card', 'Acl', 'Preferences', function($q, $timeout, $log, Settings, Resource, Card, Acl, Preferences) {\n angular.extend(AddressBook, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $Card: Card,\n $$Acl: Acl,\n $Preferences: Preferences,\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n\n return AddressBook; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of AddressBook in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('AddressBook', AddressBook.$factory);\n\n /**\n * @memberof AddressBook\n * @desc Search for cards among all addressbooks matching some criterias.\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query (excludeGroups and excludeLists)\n * @param {object[]} excludedCards - a list of Card objects that must be excluded from the results\n * @returns a collection of Cards instances\n */\n AddressBook.$filterAll = function(search, options, excludedCards) {\n var params = {search: search};\n\n if (!search) {\n // No query specified\n AddressBook.$cards = [];\n return AddressBook.$q.when(AddressBook.$cards);\n }\n if (angular.isUndefined(AddressBook.$cards)) {\n // First session query\n AddressBook.$cards = [];\n }\n else if (AddressBook.$query == search) {\n // Query hasn't changed\n return AddressBook.$q.when(AddressBook.$cards);\n }\n AddressBook.$query = search;\n\n angular.extend(params, options);\n\n return AddressBook.$$resource.fetch(null, 'allContactSearch', params).then(function(response) {\n var results, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.contacts, function(data) {\n return _.isUndefined(_.find(excludedCards, compareIds, data));\n });\n }\n else {\n results = response.contacts;\n }\n // Remove cards that no longer match the search query\n for (index = AddressBook.$cards.length - 1; index >= 0; index--) {\n card = AddressBook.$cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n AddressBook.$cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(AddressBook.$cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n AddressBook.$cards.splice(index, 0, card);\n }\n });\n return AddressBook.$cards;\n });\n };\n\n /**\n * @memberof AddressBook\n * @desc Add a new addressbook to the static list of addressbooks\n * @param {AddressBook} addressbook - an Addressbook object instance\n */\n AddressBook.$add = function(addressbook) {\n // Insert new addressbook at proper index\n var list, sibling, i;\n\n list = addressbook.isSubscription? this.$subscriptions : this.$addressbooks;\n sibling = _.find(list, function(o) {\n return (addressbook.id == 'personal' ||\n (o.id != 'personal' &&\n o.name.localeCompare(addressbook.name) === 1));\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, addressbook);\n };\n\n /**\n * @memberof AddressBook\n * @desc Set or get the list of addressbooks. Will instantiate a new AddressBook object for each item.\n * @param {array} [data] - the metadata of the addressbooks\n * @returns the list of addressbooks\n */\n AddressBook.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$addressbooks = [];\n this.$subscriptions = [];\n this.$remotes = [];\n // Instanciate AddressBook objects\n angular.forEach(data, function(o, i) {\n var addressbook = new AddressBook(o);\n if (addressbook.isRemote)\n _this.$remotes.push(addressbook);\n else if (addressbook.isSubscription)\n _this.$subscriptions.push(addressbook);\n else\n _this.$addressbooks.push(addressbook);\n });\n }\n return this.$addressbooks;\n };\n\n /**\n * @memberOf AddressBook\n * @desc Fetch list of cards and return an AddressBook instance.\n * @param {string} addressbookId - the addressbook identifier\n * @returns an AddressBook object instance\n */\n AddressBook.$find = function(addressbookId) {\n var futureAddressBookData = AddressBook.$$resource.fetch(addressbookId, 'view');\n\n return new AddressBook(futureAddressBookData);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Subscribe to another user's addressbook and add it to the list of addressbooks.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n AddressBook.$subscribe = function(uid, path) {\n var _this = this;\n return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {\n var addressbook = new AddressBook(addressbookData);\n if (_.isUndefined(_.find(_this.$subscriptions, function(o) {\n return o.id == addressbookData.id;\n }))) {\n // Not already subscribed\n AddressBook.$add(addressbook);\n }\n return addressbook;\n });\n };\n\n /**\n * @function init\n * @memberof AddressBook.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of addressbook\n */\n AddressBook.prototype.init = function(data) {\n this.$cards = [];\n this.cards = [];\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = AddressBook.activeUser.isSuperUser || this.owner == AddressBook.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != AddressBook.activeUser.login;\n this.$query = {search: 'name_or_address', value: '', sort: 'c_cn', asc: 'true'};\n };\n\n /**\n * @function $id\n * @memberof AddressBook.prototype\n * @desc Resolve the addressbook id.\n * @returns a promise of the addressbook id\n */\n AddressBook.prototype.$id = function() {\n if (this.id) {\n // Object already unwrapped\n return AddressBook.$q.when(this.id);\n }\n else {\n // Wait until object is unwrapped\n return this.$futureAddressBookData.then(function(addressbook) {\n return addressbook.id;\n });\n }\n };\n\n /**\n * @function $selectedCount\n * @memberof AddressBook.prototype\n * @desc Return the number of cards selected by the user.\n * @returns the number of selected cards\n */\n AddressBook.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.cards) {\n count = (_.filter(this.cards, function(card) { return card.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof AddressBook.prototype\n * @desc Starts the refresh timeout for the current selected address book\n */\n AddressBook.prototype.$startRefreshTimeout = function() {\n var _this = this;\n\n if (AddressBook.$refreshTimeout)\n AddressBook.$timeout.cancel(AddressBook.$refreshTimeout);\n\n AddressBook.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, AddressBook.prototype.$reload);\n AddressBook.$refreshTimeout = AddressBook.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $reload\n * @memberof AddressBook.prototype\n * @desc Reload list of cards\n * @returns a promise of the Cards instances\n */\n AddressBook.prototype.$reload = function() {\n var _this = this;\n\n this.$startRefreshTimeout();\n\n return AddressBook.$$resource.fetch(this.id, 'view')\n .then(function(response) {\n var index, card,\n results = response.cards,\n cards = _this.cards,\n compareIds = function(data) {\n return this.id == data.id;\n };\n\n // Remove cards that no longer exist\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n\n // Add new cards\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data);\n cards.splice(index, 0, card);\n }\n });\n\n return cards;\n });\n };\n\n /**\n * @function $filter\n * @memberof AddressBook.prototype\n * @desc Search for cards matching some criterias\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query\n * @returns a collection of Cards instances\n */\n AddressBook.prototype.$filter = function(search, options, excludedCards) {\n var _this = this;\n\n if (options) {\n angular.extend(this.$query, options);\n\n if (options.dry) {\n if (!search) {\n // No query specified\n this.$cards = [];\n return AddressBook.$q.when(this.$cards);\n }\n else if (this.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(this.$cards);\n }\n }\n }\n\n this.$query.value = search;\n\n return this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', _this.$query);\n }).then(function(response) {\n var results, cards, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (options && options.dry) {\n // Don't keep a copy of the resulting cards.\n // This is usefull when doing autocompletion.\n cards = _this.$cards;\n }\n else {\n cards = _this.cards;\n }\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.cards, function(card) {\n return _.isUndefined(_.find(excludedCards, compareIds, card));\n });\n }\n else {\n results = response.cards;\n }\n // Remove cards that no longer match the search query\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n cards.splice(index, 0, card);\n }\n });\n // Respect the order of the results\n _.each(results, function(data, index) {\n var oldIndex, removedCards;\n if (cards[index].id != data.id) {\n oldIndex = _.findIndex(cards, compareIds, data);\n removedCards = cards.splice(oldIndex, 1);\n cards.splice(index, 0, removedCards[0]);\n }\n });\n return cards;\n });\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), this.id);\n this.name = name;\n AddressBook.$addressbooks.splice(i, 1);\n AddressBook.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof AddressBook.prototype\n * @desc Delete the addressbook from the server and the static list of addressbooks.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$delete = function() {\n var _this = this,\n d = AddressBook.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');\n list = AddressBook.$subscriptions;\n }\n else {\n promise = AddressBook.$$resource.remove(this.id);\n list = AddressBook.$addressbooks;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteCards\n * @memberof AddressBook.prototype\n * @desc Delete multiple cards from addressbook.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$deleteCards = function(cards) {\n\n var uids = _.map(cards, function(card) { return card.id; });\n var _this = this;\n \n return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: uids}).then(function() {\n _this.cards = _.difference(_this.cards, cards);\n });\n };\n\n /**\n * @function $save\n * @memberof AddressBook.prototype\n * @desc Save the addressbook to the server. This currently can only affect the name of the addressbook.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$save = function() {\n return AddressBook.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $getCard\n * @memberof AddressBook.prototype\n * @desc Fetch the card attributes from the server.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$getCard = function(cardId) {\n return this.$id().then(function(addressbookId) {\n return AddressBook.$Card.$find(addressbookId, cardId);\n });\n };\n\n /**\n * @function $unwrap\n * @memberof AddressBook.prototype\n * @desc Unwrap a promise and instanciate new Card objects using received data.\n * @param {promise} futureAddressBookData - a promise of the AddressBook's data\n */\n AddressBook.prototype.$unwrap = function(futureAddressBookData) {\n var _this = this;\n\n // Expose and sesolve the promise\n this.$futureAddressBookData = futureAddressBookData.then(function(data) {\n return AddressBook.$timeout(function() {\n // Extend AddressBook instance from data of addressbooks list.\n // Will inherit attributes such as isEditable and isRemote.\n angular.forEach(AddressBook.$findAll(), function(o, i) {\n if (o.id == data.id) {\n angular.extend(_this, o);\n }\n });\n // Extend AddressBook instance with received data\n _this.init(data);\n // Instanciate Card objects\n angular.forEach(_this.cards, function(o, i) {\n _this.cards[i] = new AddressBook.$Card(o);\n });\n // Instanciate Acl object\n _this.$acl = new AddressBook.$$Acl('Contacts/' + _this.id);\n\n _this.$startRefreshTimeout();\n\n return _this;\n });\n }, function(data) {\n _this.isError = true;\n if (angular.isObject(data)) {\n AddressBook.$timeout(function() {\n angular.extend(_this, data);\n });\n }\n });\n };\n\n /**\n * @function $omit\n * @memberof AddressBook.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Addressbook instance\n */\n AddressBook.prototype.$omit = function() {\n var addressbook = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'cards' &&\n key[0] != '$') {\n addressbook[key] = value;\n }\n });\n return addressbook;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Card\n * @constructor\n * @param {object} futureCardData\n * @param {string} [partial]\n */\n function Card(futureCardData, partial) {\n\n // Data is immediately available\n if (typeof futureCardData.then !== 'function') {\n this.init(futureCardData, partial);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new card;\n // Get UID from the server.\n var newCardData = Card.$$resource.newguid(this.pid);\n this.$unwrap(newCardData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureCardData);\n }\n }\n\n Card.$TEL_TYPES = ['work', 'home', 'cell', 'fax', 'pager'];\n Card.$EMAIL_TYPES = ['work', 'home', 'pref'];\n Card.$URL_TYPES = ['work', 'home', 'pref'];\n Card.$ADDRESS_TYPES = ['work', 'home'];\n\n /**\n * @memberof Card\n * @desc The factory we'll use to register with Angular.\n * @returns the Card constructor\n */\n Card.$factory = ['$timeout', 'sgSettings', 'Resource', 'Preferences', 'Gravatar', function($timeout, Settings, Resource, Preferences, Gravatar) {\n angular.extend(Card, {\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $timeout: $timeout,\n $gravatar: Gravatar\n });\n // Initialize categories from user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoContactsCategories) {\n Card.$categories = Preferences.defaults.SOGoContactsCategories;\n }\n });\n\n return Card; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of Card in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('Card', Card.$factory);\n\n /**\n * @memberof Card\n * @desc Fetch a card from a specific addressbook.\n * @param {string} addressbookId - the addressbook ID\n * @param {string} cardId - the card ID\n * @see {@link AddressBook.$getCard}\n */\n Card.$find = function(addressbookId, cardId) {\n var futureCardData = this.$$resource.fetch([addressbookId, cardId].join('/'), 'view');\n\n if (cardId) return new Card(futureCardData); // a single card\n\n return Card.$unwrapCollection(futureCardData); // a collection of cards\n };\n\n /**\n * @function filterCategories\n * @memberof Card.prototype\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Card.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(Card.$categories, function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @memberof Card\n * @desc Unwrap to a collection of Card instances.\n * @param {object} futureCardData\n */\n Card.$unwrapCollection = function(futureCardData) {\n var collection = {};\n\n collection.$futureCardData = futureCardData;\n\n futureCardData.then(function(cards) {\n Card.$timeout(function() {\n angular.forEach(cards, function(data, index) {\n collection[data.id] = new Card(data);\n });\n });\n });\n\n return collection;\n };\n\n /**\n * @function init\n * @memberof Card.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of card\n */\n Card.prototype.init = function(data, partial) {\n this.refs = [];\n angular.extend(this, data);\n if (!this.$$fullname)\n this.$$fullname = this.$fullname();\n if (!this.$$email)\n this.$$email = this.$preferredEmail(partial);\n if (!this.$$image)\n this.$$image = this.image || Card.$gravatar(this.$preferredEmail(partial), 32);\n this.selected = false;\n\n // An empty attribute to trick md-autocomplete when adding attendees from the appointment editor\n this.empty = ' ';\n };\n\n /**\n * @function $id\n * @memberof Card.prototype\n * @desc Return the card ID.\n * @returns the card ID\n */\n Card.prototype.$id = function() {\n return this.$futureCardData.then(function(data) {\n return data.id;\n });\n };\n\n /**\n * @function $save\n * @memberof Card.prototype\n * @desc Save the card to the server.\n */\n Card.prototype.$save = function() {\n var _this = this,\n action = 'saveAsContact';\n\n if (this.c_component == 'vlist') action = 'saveAsList';\n\n return Card.$$resource.save([this.pid, this.id || '_new_'].join('/'),\n this.$omit(),\n { action: action })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n Card.prototype.$delete = function(attribute, index) {\n if (attribute) {\n if (index > -1 && this[attribute].length > index) {\n this[attribute].splice(index, 1);\n }\n }\n else {\n // No arguments -- delete card\n return Card.$$resource.remove([this.pid, this.id].join('/'));\n }\n };\n\n Card.prototype.$fullname = function() {\n var fn = this.c_cn || '', names;\n if (fn.length === 0) {\n names = [];\n if (this.c_givenname && this.c_givenname.length > 0)\n names.push(this.c_givenname);\n if (this.nickname && this.nickname.length > 0)\n names.push('' + this.nickname + '');\n if (this.c_sn && this.c_sn.length > 0)\n names.push(this.c_sn);\n if (names.length > 0)\n fn = names.join(' ');\n else if (this.c_org && this.c_org.length > 0) {\n fn = this.c_org;\n }\n else if (this.emails && this.emails.length > 0) {\n fn = _.find(this.emails, function(i) { return i.value !== ''; }).value;\n }\n else if (this.c_cn && this.c_cn.length > 0) {\n fn = this.c_cn;\n }\n }\n\n return fn;\n };\n\n Card.prototype.$description = function() {\n var description = [];\n if (this.title) description.push(this.title);\n if (this.role) description.push(this.role);\n if (this.orgUnits && this.orgUnits.length > 0)\n _.forEach(this.orgUnits, function(unit) {\n if (unit.value !== '')\n description.push(unit.value);\n });\n if (this.org) description.push(this.org);\n if (this.description) description.push(this.description);\n\n return description.join(', ');\n };\n\n /**\n * @function $preferredEmail\n * @memberof Card.prototype\n * @desc Get the preferred email address.\n * @param {string} [partial] - a partial string that the email must match\n * @returns the first email address of type \"pref\" or the first address if none found\n */\n Card.prototype.$preferredEmail = function(partial) {\n var email, re;\n if (partial) {\n re = new RegExp(partial, 'i');\n email = _.find(this.emails, function(o) {\n return re.test(o.value);\n });\n }\n if (email) {\n email = email.value;\n }\n else {\n email = _.find(this.emails, function(o) {\n return o.type == 'pref';\n });\n if (email) {\n email = email.value;\n }\n else if (this.emails && this.emails.length) {\n email = this.emails[0].value;\n }\n else {\n email = '';\n }\n }\n\n return email;\n };\n\n /**\n * @function $shortFormat\n * @memberof Card.prototype\n * @param {string} [partial] - a partial string that the email must match\n * @returns the fullname along with a matching email address in parentheses\n */\n Card.prototype.$shortFormat = function(partial) {\n var fullname = this.$fullname(),\n email = this.$preferredEmail(partial);\n if (email && email != fullname)\n fullname += ' <' + email + '>';\n return fullname;\n };\n\n Card.prototype.$birthday = function() {\n return new Date(this.birthday * 1000);\n };\n\n Card.prototype.$isCard = function() {\n return this.c_component == 'vcard';\n };\n\n Card.prototype.$isList = function() {\n return this.c_component == 'vlist';\n };\n\n Card.prototype.$addOrgUnit = function(orgUnit) {\n if (angular.isUndefined(this.orgUnits)) {\n this.orgUnits = [{value: orgUnit}];\n }\n else {\n for (var i = 0; i < this.orgUnits.length; i++) {\n if (this.orgUnits[i].value == orgUnit) {\n break;\n }\n }\n if (i == this.orgUnits.length)\n this.orgUnits.push({value: orgUnit});\n }\n return this.orgUnits.length - 1;\n };\n\n Card.prototype.$addCategory = function(category) {\n if (angular.isUndefined(this.categories)) {\n this.categories = [{value: category}];\n }\n else {\n for (var i = 0; i < this.categories.length; i++) {\n if (this.categories[i].value == category) {\n break;\n }\n }\n if (i == this.categories.length)\n this.categories.push({value: category});\n }\n };\n\n Card.prototype.$addEmail = function(type) {\n if (angular.isUndefined(this.emails)) {\n this.emails = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.emails, function(i) { return i.value === ''; }))) {\n this.emails.push({type: type, value: ''});\n }\n return this.emails.length - 1;\n };\n\n Card.prototype.$addPhone = function(type) {\n if (angular.isUndefined(this.phones)) {\n this.phones = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.phones, function(i) { return i.value === ''; }))) {\n this.phones.push({type: type, value: ''});\n }\n return this.phones.length - 1;\n };\n\n Card.prototype.$addUrl = function(type, url) {\n if (angular.isUndefined(this.urls)) {\n this.urls = [{type: type, value: url}];\n }\n else if (_.isUndefined(_.find(this.urls, function(i) { return i.value == url; }))) {\n this.urls.push({type: type, value: url});\n }\n return this.urls.length - 1;\n };\n\n Card.prototype.$addAddress = function(type, postoffice, street, street2, locality, region, country, postalcode) {\n if (angular.isUndefined(this.addresses)) {\n this.addresses = [{type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode}];\n }\n else if (!_.find(this.addresses, function(i) {\n return i.street == street &&\n i.street2 == street2 &&\n i.locality == locality &&\n i.country == country &&\n i.postalcode == postalcode;\n })) {\n this.addresses.push({type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode});\n }\n return this.addresses.length - 1;\n };\n\n Card.prototype.$addMember = function(email) {\n var card = new Card({email: email, emails: [{value: email}]}),\n i;\n if (angular.isUndefined(this.refs)) {\n this.refs = [card];\n }\n else if (email.length === 0) {\n this.refs.push(card);\n }\n else {\n for (i = 0; i < this.refs.length; i++) {\n if (this.refs[i].email == email) {\n break;\n }\n }\n if (i == this.refs.length)\n this.refs.push(card);\n }\n return this.refs.length - 1;\n };\n\n /**\n * @function $reset\n * @memberof Card.prototype\n * @desc Reset the original state the card's data.\n */\n Card.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n // Reinstanciate Card objects for list members\n angular.forEach(this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n _this.refs[i] = new Card(o);\n });\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function $updateMember\n * @memberof Card.prototype\n * @desc Update an existing list member from a Card instance.\n * A list member has the following attribtues:\n * - email\n * - reference\n * - fn\n * @param {number} index\n * @param {string} email\n * @param {Card} card\n */\n // Card.prototype.$updateMember = function(index, email, card) {\n // var ref = {\n // email: email,\n // emails: [{value: email}],\n // reference: card.c_name,\n // c_cn: card.$fullname()\n // };\n // this.refs[index] = new Card(ref);\n // };\n\n /**\n * @function $unwrap\n * @memberof Card.prototype\n * @desc Unwrap a promise and make a copy of the resolved data.\n * @param {object} futureCardData - a promise of the Card's data\n */\n Card.prototype.$unwrap = function(futureCardData) {\n var _this = this;\n\n // Expose the promise\n this.$futureCardData = futureCardData;\n\n // Resolve the promise\n this.$futureCardData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n Card.$timeout(function() {\n _this.init(data);\n // Instanciate Card objects for list members\n angular.forEach(_this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n o.id = o.reference;\n _this.refs[i] = new Card(o);\n });\n if (_this.birthday) {\n _this.birthday = new Date(_this.birthday * 1000);\n }\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n });\n });\n };\n\n /**\n * @function $omit\n * @memberof Card.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Card instance\n */\n Card.prototype.$omit = function(deep) {\n var card = {};\n angular.forEach(this, function(value, key) {\n if (key == 'refs') {\n card.refs = _.map(value, function(o) {\n return o.$omit(deep);\n });\n }\n else if (key != 'constructor' && key[0] != '$') {\n if (deep)\n card[key] = angular.copy(value);\n else\n card[key] = value;\n }\n });\n return card;\n };\n\n Card.prototype.toString = function() {\n var desc = this.id + ' ' + this.$$fullname;\n\n if (this.$$email)\n desc += ' <' + this.$$email + '>';\n\n return '[' + desc + ']';\n };\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.js b/UI/WebServerResources/js/Mailer.js new file mode 100644 index 0000000000..d9bfabd3d2 --- /dev/null +++ b/UI/WebServerResources/js/Mailer.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("mail",{url:"/Mail",views:{mailboxes:{templateUrl:"UIxMailMainFrame",controller:"MailboxesController",controllerAs:"app"}},resolve:{stateAccounts:stateAccounts}}).state("mail.account",{url:"/:accountId","abstract":!0,views:{mailbox:{template:""}},resolve:{stateAccount:stateAccount}}).state("mail.account.mailbox",{url:"/:mailboxId",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:stateMailbox,stateMessages:stateMessages}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:stateMessage}}),$urlRouterProvider.otherwise("/Mail")}function stateAccounts($q,Account){var accounts=Account.$findAll(mailAccounts),promises=[];return angular.forEach(accounts,function(account,i){var mailboxes=account.$getMailboxes();promises.push(mailboxes.then(function(objects){return account}))}),$q.all(promises)}function stateAccount($stateParams,stateAccounts){return _.find(stateAccounts,function(account){return account.id==$stateParams.accountId})}function stateMailbox($stateParams,stateAccount,decodeUriFilter){var _find,mailboxId=decodeUriFilter($stateParams.mailboxId);return(_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==mailboxId});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox})(stateAccount.$mailboxes)}function stateMessages(stateMailbox){return stateMailbox.$filter()}function stateMessage(encodeUriFilter,$stateParams,$state,stateMailbox,stateMessages){var message=_.find(stateMailbox.$messages,function(messageObject){return messageObject.uid==$stateParams.messageId});return message?(stateMailbox.selectedMessage=$stateParams.messageId,message.$reload()):void $state.go("mail.account.mailbox",{accountId:stateMailbox.$account.id,mailboxId:encodeUriFilter(stateMailbox.path)})}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.MailerUI",["ngSanitize","ui.router","ck","angularFileUpload","SOGo.Common","SOGo.ContactsUI","ngAnimate","SOGo.PreferencesUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAccounts.$inject=["$q","Account"],stateAccount.$inject=["$stateParams","stateAccounts"],stateMailbox.$inject=["$stateParams","stateAccount","decodeUriFilter"],stateMessages.$inject=["stateMailbox"],stateMessage.$inject=["encodeUriFilter","$stateParams","$state","stateMailbox","stateMessages"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function MailboxController($state,$timeout,$mdDialog,stateAccounts,stateAccount,stateMailbox,encodeUriFilter,focus,Dialog,Account,Mailbox){function selectMessage(message){$state.go("mail.account.mailbox.message",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path),messageId:message.uid})}function unselectMessages(){_.each(vm.selectedFolder.$messages,function(message){message.selected=!1})}function confirmDeleteSelectedMessages(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected messages?")).then(function(){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");vm.selectedFolder.$deleteMessages(selectedUIDs).then(function(){vm.selectedFolder.$messages=_.difference(vm.selectedFolder.$messages,selectedMessages)},function(error){Dialog.alert(l("Error"),error)})})}function copySelectedMessages(folder){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");vm.selectedFolder.$copyMessages(selectedUIDs,"/"+folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function saveSelectedMessages(){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/saveMessages?uid="+selectedUIDs.join(",")}function selectAll(){_.each(vm.selectedFolder.$messages,function(message){message.selected=!0})}function sort(field){vm.selectedFolder.$filter({sort:field})}function sortedBy(field){return Mailbox.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter()}function newMessage($event){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:vm.account.$newMessage()}})}var vm=this;Mailbox.selectedFolder=stateMailbox,vm.service=Mailbox,vm.accounts=stateAccounts,vm.account=stateAccount,vm.selectedFolder=stateMailbox,vm.selectMessage=selectMessage,vm.unselectMessages=unselectMessages,vm.confirmDeleteSelectedMessages=confirmDeleteSelectedMessages,vm.copySelectedMessages=copySelectedMessages,vm.saveSelectedMessages=saveSelectedMessages,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.newMessage=newMessage,vm.mode={search:!1}}MailboxController.$inject=["$state","$timeout","$mdDialog","stateAccounts","stateAccount","stateMailbox","encodeUriFilter","sgFocus","Dialog","Account","Mailbox"],angular.module("SOGo.MailerUI").controller("MailboxController",MailboxController)}(),function(){"use strict";function MailboxesController($state,$timeout,$mdDialog,focus,encodeUriFilter,Dialog,Settings,Account,Mailbox,User,Preferences,stateAccounts){function newFolder(parentFolder){Dialog.prompt(l("New folder"),l("Enter the new name of your folder :")).then(function(name){parentFolder.$newMailbox(parentFolder.id,name).then(function(){},function(data,status){Dialog.alert(l('An error occured while creating the mailbox "%{0}".',name),l(data.error))})})}function delegate(account){function MailboxDelegationController($scope,$mdDialog,User,account){function userFilter($query){return User.$filter($query,account.delegates)}function closeModal(){$mdDialog.hide()}function removeUser(user){account.$removeDelegate(user.uid)["catch"](function(data,status){Dialog.alert(l("Warning"),l("An error occured please try again."))})}function addUser(data){data&&account.$addDelegate(data).then(function(){vm.userToAdd="",vm.searchText=""},function(error){Dialog.alert(l("Warning"),error)})}var vm=this;vm.users=account.delegates,vm.account=account,vm.userToAdd="",vm.searchText="",vm.userFilter=userFilter,vm.closeModal=closeModal,vm.removeUser=removeUser,vm.addUser=addUser}$mdDialog.show({templateUrl:account.id+"/delegation",controller:MailboxDelegationController,controllerAs:"delegate",clickOutsideToClose:!0,escapeToClose:!0,locals:{User:User,account:account}}),MailboxDelegationController.$inject=["$scope","$mdDialog","User","account"]}function editFolder(folder){vm.editMode=folder.path,focus("mailboxName_"+folder.path)}function revertEditing(folder){folder.$reset(),vm.editMode=!1}function selectFolder(account,folder){vm.editMode!=folder.path&&(vm.editMode=!1,$state.go("mail.account.mailbox",{accountId:account.id,mailboxId:encodeUriFilter(folder.path)}))}function saveFolder(folder){folder.$rename()}function compactFolder(folder){folder.$compact().then(function(){},function(error){Dialog.alert(l("Warning"),error)})}function emptyTrashFolder(folder){folder.$emptyTrash().then(function(){},function(error){Dialog.alert(l("Warning"),error)})}function exportMails(folder){window.location.href=ApplicationBaseURL+"/"+folder.id+"/exportFolder"}function confirmDelete(folder){Dialog.confirm(l("Confirmation"),l("Do you really want to move this folder into the trash ?")).then(function(){folder.$delete().then(function(){$state.go("mail")},function(data,status){Dialog.alert(l('An error occured while deleting the mailbox "%{0}".',folder.name),l(data.error))})})}function markFolderRead(folder){folder.$markAsRead()}function share(folder){folder.$acl.$users().then(function(){$mdDialog.show({templateUrl:folder.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:folder.$acl.users,User:User,folder:folder}})})}function metadataForFolder(folder){return"inbox"==folder.type?{name:folder.name,icon:"inbox"}:"draft"==folder.type?{name:l("DraftsFolderName"),icon:"drafts"}:"sent"==folder.type?{name:l("SentFolderName"),icon:"send"}:"trash"==folder.type?{name:l("TrashFolderName"),icon:"delete"}:"additional"==folder.type?{name:folder.name,icon:"folder_shared"}:{name:folder.name,icon:"folder"}}function setFolderAs(folder,type){folder.$setFolderAs(type).then(function(){folder.$account.$getMailboxes({reload:!0})},function(error){Dialog.alert(l("Warning"),error)})}function refreshUnseenCount(){var unseenCountFolders=window.unseenCountFolders;_.forEach(vm.accounts,function(account){_.includes(unseenCountFolders,account.id+"/folderINBOX")||unseenCountFolders.push(account.id+"/folderINBOX"),_.forEach(account.$$flattenMailboxes,function(mailbox){angular.isDefined(mailbox.unseenCount)&&!_.includes(unseenCountFolders,mailbox.id)&&unseenCountFolders.push(mailbox.id)})}),Account.$$resource.post("","unseenCount",{mailboxes:unseenCountFolders}).then(function(data){_.forEach(vm.accounts,function(account){_.forEach(account.$$flattenMailboxes,function(mailbox){data[mailbox.id]&&(mailbox.unseenCount=data[mailbox.id])})})}),Preferences.ready().then(function(){var refreshViewCheck=Preferences.defaults.SOGoRefreshViewCheck;refreshViewCheck&&"manually"!=refreshViewCheck&&$timeout(vm.refreshUnseenCount,1e3*refreshViewCheck.timeInterval())})}var account,mailbox,vm=this;vm.service=Mailbox,vm.accounts=stateAccounts,vm.newFolder=newFolder,vm.delegate=delegate,vm.editFolder=editFolder,vm.revertEditing=revertEditing,vm.selectFolder=selectFolder,vm.saveFolder=saveFolder,vm.compactFolder=compactFolder,vm.emptyTrashFolder=emptyTrashFolder,vm.exportMails=exportMails,vm.confirmDelete=confirmDelete,vm.markFolderRead=markFolderRead,vm.share=share,vm.metadataForFolder=metadataForFolder,vm.setFolderAs=setFolderAs,vm.refreshUnseenCount=refreshUnseenCount,"mail"==$state.current.name&&vm.accounts.length>0&&vm.accounts[0].$mailboxes.length>0&&(account=vm.accounts[0],mailbox=account.$mailboxes[0],$state.go("mail.account.mailbox",{accountId:account.id,mailboxId:encodeUriFilter(mailbox.path)})),vm.refreshUnseenCount()}MailboxesController.$inject=["$state","$timeout","$mdDialog","sgFocus","encodeUriFilter","Dialog","sgSettings","Account","Mailbox","User","Preferences","stateAccounts"],angular.module("SOGo.MailerUI").controller("MailboxesController",MailboxesController)}(),function(){"use strict";function MessageController($scope,$state,$mdDialog,stateAccounts,stateAccount,stateMailbox,stateMessage,encodeUriFilter,focus,Dialog,Account,Mailbox,Message){function doDelete(){stateMailbox.$deleteMessages([stateMessage.uid]).then(function(){var index=_.findIndex(stateMailbox.$messages,function(o){return o.uid==stateMessage.uid});-1!=index&&stateMailbox.$messages.splice(index,1),vm.message=null,$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)})})}function showMailEditor($event,message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:message}})}function reply($event){var message=vm.message.$reply();showMailEditor($event,message)}function replyAll($event){var message=vm.message.$replyAll();showMailEditor($event,message)}function forward($event){var message=vm.message.$forward();showMailEditor($event,message)}function edit($event){vm.message.$editableContent().then(function(){showMailEditor($event,vm.message)})}function viewRawSource($event){Message.$$resource.post(vm.message.id,"viewsource").then(function(data){function MessageRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:MessageRawSourceDialogController}),MessageRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.accounts=stateAccounts,vm.account=stateAccount,vm.mailbox=stateMailbox,vm.message=stateMessage,vm.service=Message,vm.tags={searchText:"",selected:""},vm.doDelete=doDelete,vm.reply=reply,vm.replyAll=replyAll,vm.forward=forward,vm.edit=edit,vm.viewRawSource=viewRawSource,$scope.$watchCollection("viewer.message.flags",function(oldTags,newTags){_.each(_.difference(newTags,oldTags),function(tag){vm.message.removeTag(tag)})})}MessageController.$inject=["$scope","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","stateMessage","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","Message"],angular.module("SOGo.MailerUI").controller("MessageController",MessageController)}(),function(){"use strict";function MessageEditorController($stateParams,$state,$q,$mdDialog,FileUploader,stateAccounts,stateMessage,$timeout,encodeUriFilter,focus,Dialog,Account,Mailbox,AddressBook,Preferences){function cancel(){vm.autosave&&$timeout.cancel(vm.autosave),$mdDialog.cancel()}function send(){vm.autosave&&$timeout.cancel(vm.autosave),vm.message.$send().then(function(data){$mdDialog.hide()},function(data){Dialog.alert(l(data.status),l(data.message))})}function contactFilter($query){var deferred=$q.defer();return AddressBook.$filterAll($query).then(function(results){deferred.resolve(_.invoke(results,"$shortFormat",$query))}),deferred.promise}function autosaveDrafts(){vm.message.$save(),Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60))}var vm=this;vm.autocomplete={to:{},cc:{},bcc:{}},vm.autosave=null,vm.autosaveDrafts=autosaveDrafts,vm.hideCc=!0,vm.hideBcc=!0,vm.cancel=cancel,vm.send=send,vm.contactFilter=contactFilter,vm.identities=_.pluck(_.flatten(_.pluck(stateAccounts,"identities")),"full"),vm.uploader=new FileUploader({url:stateMessage.$absolutePath({asDraft:!0})+"/save",autoUpload:!0,alias:"attachments",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){stateMessage.$setUID(response.uid),stateMessage.$reload(),console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2))},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2)),stateMessage.$deleteAttachment(item.file.name),this.removeFromQueue(item)},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),"reply"==$stateParams.actionName?stateMessage.$reply().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"replyall"==$stateParams.actionName?stateMessage.$replyAll().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"forward"==$stateParams.actionName?stateMessage.$forward().then(function(msgObject){vm.message=msgObject}):angular.isDefined(stateMessage)&&(vm.message=stateMessage),Preferences.ready().then(function(){Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60)),vm.localeCode=Preferences.defaults.LocaleCode})}MessageEditorController.$inject=["$stateParams","$state","$q","$mdDialog","FileUploader","stateAccounts","stateMessage","$timeout","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","AddressBook","Preferences"],angular.module("SOGo.MailerUI").controller("MessageEditorController",MessageEditorController)}(),function(){"use strict";function sgImip(){function link(scope,iElement,attrs,ctrl){ctrl.pathToAttachment=attrs.sgImipPath}return{restrict:"A",link:link,controller:"sgImipController"}}function sgImipController($scope,User){var vm=this;$scope.delegateInvitation=!1,$scope.delegatedTo="",$scope.searchText="",$scope.userFilter=function($query){return User.$filter($query)},$scope.iCalendarAction=function(action){var data;"delegate"==action&&(data={receiveUpdates:!1,delegatedTo:$scope.delegatedTo.c_email}),$scope.viewer.message.$imipAction(vm.pathToAttachment,action,data)}}sgImipController.$inject=["$scope","User"],angular.module("SOGo.MailerUI").controller("sgImipController",sgImipController).directive("sgImip",sgImip)}(); +//# sourceMappingURL=Mailer.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.js.map b/UI/WebServerResources/js/Mailer.js.map new file mode 100644 index 0000000000..fe8f50b387 --- /dev/null +++ b/UI/WebServerResources/js/Mailer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Mailer.js","sources":["Mailer/Mailer.app.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js","Mailer/sgIMIP.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","mailboxes","templateUrl","controller","controllerAs","resolve","stateAccounts","abstract","mailbox","template","stateAccount","mailbox@mail","stateMailbox","stateMessages","message","stateMessage","otherwise","$q","Account","accounts","$findAll","mailAccounts","promises","angular","forEach","account","i","$getMailboxes","push","then","objects","all","$stateParams","_","find","id","accountId","decodeUriFilter","_find","mailboxId","o","path","children","length","$mailboxes","$filter","encodeUriFilter","$state","$messages","messageObject","uid","messageId","selectedMessage","$reload","go","$account","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","module","config","run","$inject","MailboxController","$timeout","$mdDialog","focus","Dialog","Mailbox","selectMessage","unselectMessages","each","vm","selectedFolder","selected","confirmDeleteSelectedMessages","confirm","l","selectedMessages","filter","selectedUIDs","pluck","$deleteMessages","difference","alert","copySelectedMessages","folder","$copyMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","join","selectAll","sort","field","sortedBy","$query","cancelSearch","mode","search","newMessage","$event","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","$newMessage","this","service","MailboxesController","Settings","User","Preferences","newFolder","parentFolder","prompt","name","$newMailbox","data","status","delegate","MailboxDelegationController","$scope","userFilter","delegates","closeModal","hide","removeUser","user","$removeDelegate","addUser","$addDelegate","userToAdd","searchText","users","editFolder","editMode","revertEditing","$reset","selectFolder","saveFolder","$rename","compactFolder","$compact","emptyTrashFolder","$emptyTrash","exportMails","confirmDelete","$delete","markFolderRead","$markAsRead","share","$acl","$users","usersWithACL","metadataForFolder","type","icon","setFolderAs","$setFolderAs","reload","refreshUnseenCount","unseenCountFolders","includes","$$flattenMailboxes","isDefined","unseenCount","$$resource","post","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","timeInterval","MessageController","Message","doDelete","index","findIndex","splice","showMailEditor","reply","$reply","replyAll","$replyAll","forward","$forward","edit","$editableContent","viewRawSource","MessageRawSourceDialogController","scope","close","tags","$watchCollection","oldTags","newTags","tag","removeTag","MessageEditorController","FileUploader","AddressBook","cancel","autosave","send","$send","contactFilter","deferred","defer","$filterAll","results","invoke","promise","autosaveDrafts","$save","SOGoMailAutoSave","autocomplete","to","cc","bcc","hideCc","hideBcc","identities","flatten","uploader","$absolutePath","asDraft","autoUpload","alias","onProgressItem","item","progress","debug","onSuccessItem","response","headers","$setUID","JSON","stringify","undefined","onCancelItem","$deleteAttachment","file","removeFromQueue","onErrorItem","actionName","msgObject","editable","localeCode","LocaleCode","sgImip","link","iElement","attrs","ctrl","pathToAttachment","sgImipPath","restrict","sgImipController","delegateInvitation","delegatedTo","iCalendarAction","action","receiveUpdates","c_email","viewer","$imipAction","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.MailerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MailerUI', ['ngSanitize', 'ui.router', 'ck', 'angularFileUpload', 'SOGo.Common', 'SOGo.ContactsUI', 'ngAnimate', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('mail', {\n url: '/Mail',\n views: {\n mailboxes: {\n templateUrl: 'UIxMailMainFrame', // UI/Templates/MailerUI/UIxMailMainFrame.wox\n controller: 'MailboxesController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAccounts: stateAccounts\n }\n })\n .state('mail.account', {\n url: '/:accountId',\n abstract: true,\n views: {\n mailbox: {\n template: ''\n }\n },\n resolve: {\n stateAccount: stateAccount\n }\n })\n .state('mail.account.mailbox', {\n url: '/:mailboxId',\n views: {\n 'mailbox@mail': {\n templateUrl: 'UIxMailFolderTemplate', // UI/Templates/MailerUI/UIxMailFolderTemplate.wox\n controller: 'MailboxController',\n controllerAs: 'mailbox'\n }\n },\n resolve: {\n stateMailbox: stateMailbox,\n stateMessages: stateMessages\n }\n })\n // .state('mail.account.mailbox.newMessage', {\n // url: '/new',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateMessage: stateNewMessage\n // }\n // })\n .state('mail.account.mailbox.message', {\n url: '/:messageId',\n views: {\n message: {\n templateUrl: 'UIxMailViewTemplate', // UI/Templates/MailerUI/UIxMailViewTemplate.wox\n controller: 'MessageController',\n controllerAs: 'viewer'\n }\n },\n resolve: {\n stateMessage: stateMessage\n }\n });\n // .state('mail.account.mailbox.message.edit', {\n // url: '/edit',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateContent: stateContent\n // }\n // })\n // .state('mail.account.mailbox.message.action', {\n // url: '/{actionName:(?:reply|replyall|forward)}',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // }\n // });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/Mail');\n\n // Set default configuration for tags input\n // tagsInputConfigProvider.setDefaults('tagsInput', {\n // addOnComma: false,\n // replaceSpacesWithDashes: false,\n // allowedTagsPattern: /([\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+\\.)*[\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+@((((([a-z0-9]{1}[a-z0-9\\-]{0,62}[a-z0-9]{1})|[a-z])\\.)+[a-z]{2,})|(\\d{1,3}\\.){3}\\d{1,3}(\\:\\d{1,5})?)/i\n // });\n }\n\n /**\n * @ngInject\n */\n stateAccounts.$inject = ['$q', 'Account'];\n function stateAccounts($q, Account) {\n var accounts = Account.$findAll(mailAccounts),\n promises = [];\n // Fetch list of mailboxes for each account\n angular.forEach(accounts, function(account, i) {\n var mailboxes = account.$getMailboxes();\n promises.push(mailboxes.then(function(objects) {\n return account;\n }));\n });\n return $q.all(promises);\n }\n\n /**\n * @ngInject\n */\n stateAccount.$inject = ['$stateParams', 'stateAccounts'];\n function stateAccount($stateParams, stateAccounts) {\n return _.find(stateAccounts, function(account) {\n return account.id == $stateParams.accountId;\n });\n }\n\n /**\n * @ngInject\n */\n stateMailbox.$inject = ['$stateParams', 'stateAccount', 'decodeUriFilter'];\n function stateMailbox($stateParams, stateAccount, decodeUriFilter) {\n var mailboxId = decodeUriFilter($stateParams.mailboxId),\n _find;\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == mailboxId;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n return _find(stateAccount.$mailboxes);\n }\n\n /**\n * @ngInject\n */\n stateMessages.$inject = ['stateMailbox'];\n function stateMessages(stateMailbox) {\n return stateMailbox.$filter();\n }\n\n /**\n * @ngInject\n */\n // stateNewMessage.$inject = ['stateAccount'];\n // function stateNewMessage(stateAccount) {\n // return stateAccount.$newMessage();\n // }\n\n /**\n * @ngInject\n */\n stateMessage.$inject = ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages'];\n function stateMessage(encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) {\n var message = _.find(stateMailbox.$messages, function(messageObject) {\n return messageObject.uid == $stateParams.messageId;\n });\n\n if (message) {\n stateMailbox.selectedMessage = $stateParams.messageId;\n return message.$reload();\n }\n else {\n // Message not found\n $state.go('mail.account.mailbox', { accountId: stateMailbox.$account.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n }\n }\n\n /**\n * @ngInject\n */\n // stateContent.$inject = ['stateMessage'];\n // function stateContent(stateMessage) {\n // return stateMessage.$editableContent();\n // }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxController.$inject = ['$state', '$timeout', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox'];\n function MailboxController($state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, focus, Dialog, Account, Mailbox) {\n var vm = this;\n\n Mailbox.selectedFolder = stateMailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.selectedFolder = stateMailbox;\n vm.selectMessage = selectMessage;\n vm.unselectMessages = unselectMessages;\n vm.confirmDeleteSelectedMessages = confirmDeleteSelectedMessages;\n vm.copySelectedMessages = copySelectedMessages;\n // vm.moveSelectedMessages = moveSelectedMessages;\n vm.saveSelectedMessages = saveSelectedMessages;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.mode = { search: false };\n\n function selectMessage(message) {\n $state.go('mail.account.mailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path), messageId: message.uid});\n }\n\n function unselectMessages() {\n _.each(vm.selectedFolder.$messages, function(message) { message.selected = false; });\n }\n\n function confirmDeleteSelectedMessages() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected messages?'))\n .then(function() {\n // User confirmed the deletion\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$deleteMessages(selectedUIDs).then(function() {\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n });\n }\n\n function copySelectedMessages(folder) {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder).then(function() {\n // TODO: refresh target mailbox?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n // function moveSelectedMessages(folder) {\n // var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected });\n // var selectedUIDs = _.pluck(selectedMessages, 'uid');\n // vm.selectedFolder.$moveMessages(selectedUIDs, '/' + folder).then(function() {\n // // TODO: refresh target mailbox?\n // vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n // });\n // }\n\n function saveSelectedMessages() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/saveMessages?uid=' + selectedUIDs.join(\",\");\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.$messages, function(message) {\n message.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter({ sort: field });\n }\n\n function sortedBy(field) {\n return Mailbox.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter();\n }\n\n function newMessage($event) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: vm.account.$newMessage()\n }\n });\n }\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxController', MailboxController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxesController.$inject = ['$state', '$timeout', '$mdDialog', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Account', 'Mailbox', 'User', 'Preferences', 'stateAccounts'];\n function MailboxesController($state, $timeout, $mdDialog, focus, encodeUriFilter, Dialog, Settings, Account, Mailbox, User, Preferences, stateAccounts) {\n var vm = this,\n account,\n mailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.newFolder = newFolder;\n vm.delegate = delegate;\n vm.editFolder = editFolder;\n vm.revertEditing = revertEditing;\n vm.selectFolder = selectFolder;\n vm.saveFolder = saveFolder;\n vm.compactFolder = compactFolder;\n vm.emptyTrashFolder = emptyTrashFolder;\n vm.exportMails = exportMails;\n vm.confirmDelete = confirmDelete;\n vm.markFolderRead = markFolderRead;\n vm.share = share;\n vm.metadataForFolder = metadataForFolder;\n vm.setFolderAs = setFolderAs;\n vm.refreshUnseenCount = refreshUnseenCount;\n\n if ($state.current.name == 'mail' && vm.accounts.length > 0 && vm.accounts[0].$mailboxes.length > 0) {\n // Redirect to first mailbox of first account if no mailbox is selected\n account = vm.accounts[0];\n mailbox = account.$mailboxes[0];\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(mailbox.path) });\n }\n\n function newFolder(parentFolder) {\n Dialog.prompt(l('New folder'),\n l('Enter the new name of your folder :'))\n .then(function(name) {\n parentFolder.$newMailbox(parentFolder.id, name)\n .then(function() {\n // success\n }, function(data, status) {\n Dialog.alert(l('An error occured while creating the mailbox \"%{0}\".', name),\n l(data.error));\n });\n });\n }\n\n function delegate(account) {\n $mdDialog.show({\n templateUrl: account.id + '/delegation', // UI/Templates/MailerUI/UIxMailUserDelegation.wox\n controller: MailboxDelegationController,\n controllerAs: 'delegate',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n User: User,\n account: account\n }\n });\n\n /**\n * @ngInject\n */\n MailboxDelegationController.$inject = ['$scope', '$mdDialog', 'User', 'account'];\n function MailboxDelegationController($scope, $mdDialog, User, account) {\n var vm = this;\n\n vm.users = account.delegates;\n vm.account = account;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n\n function userFilter($query) {\n return User.$filter($query, account.delegates);\n }\n\n function closeModal() {\n $mdDialog.hide();\n }\n\n function removeUser(user) {\n account.$removeDelegate(user.uid).catch(function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function addUser(data) {\n if (data) {\n account.$addDelegate(data).then(function() {\n vm.userToAdd = '';\n vm.searchText = '';\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n }\n }\n } // delegate\n\n function editFolder(folder) {\n vm.editMode = folder.path;\n focus('mailboxName_' + folder.path);\n }\n\n function revertEditing(folder) {\n folder.$reset();\n vm.editMode = false;\n }\n\n function selectFolder(account, folder) {\n if (vm.editMode == folder.path)\n return;\n vm.editMode = false;\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(folder.path) });\n }\n\n function saveFolder(folder) {\n folder.$rename();\n }\n\n function compactFolder(folder) {\n folder.$compact().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function emptyTrashFolder(folder) {\n folder.$emptyTrash().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function exportMails(folder) {\n window.location.href = ApplicationBaseURL + '/' + folder.id + '/exportFolder';\n }\n\n function confirmDelete(folder) {\n Dialog.confirm(l('Confirmation'), l('Do you really want to move this folder into the trash ?'))\n .then(function() {\n folder.$delete()\n .then(function() {\n $state.go('mail');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the mailbox \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n\n function markFolderRead(folder) {\n folder.$markAsRead();\n }\n\n function share(folder) {\n // Fetch list of ACL users\n folder.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: folder.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: folder.$acl.users,\n User: User,\n folder: folder\n }\n });\n });\n } // share\n\n function metadataForFolder(folder) {\n if (folder.type == 'inbox')\n return {name: folder.name, icon:'inbox'};\n else if (folder.type == 'draft')\n return {name: l('DraftsFolderName'), icon: 'drafts'};\n else if (folder.type == 'sent')\n return {name: l('SentFolderName'), icon: 'send'};\n else if (folder.type == 'trash')\n return {name: l('TrashFolderName'), icon: 'delete'};\n else if (folder.type == 'additional')\n return {name: folder.name, icon: 'folder_shared'};\n\n //if ($rootScope.currentFolder == folder)\n // return 'folder_open';\n\n return {name: folder.name, icon: 'folder'};\n }\n\n function setFolderAs(folder, type) {\n folder.$setFolderAs(type).then(function() {\n folder.$account.$getMailboxes({reload: true});\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function refreshUnseenCount() {\n var unseenCountFolders = window.unseenCountFolders;\n\n _.forEach(vm.accounts, function(account) {\n\n // Always include the INBOX\n if (!_.includes(unseenCountFolders, account.id + '/folderINBOX'))\n unseenCountFolders.push(account.id + '/folderINBOX');\n\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (angular.isDefined(mailbox.unseenCount) &&\n !_.includes(unseenCountFolders, mailbox.id))\n unseenCountFolders.push(mailbox.id);\n });\n });\n\n Account.$$resource.post('', 'unseenCount', {mailboxes: unseenCountFolders}).then(function(data) {\n _.forEach(vm.accounts, function(account) {\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (data[mailbox.id])\n mailbox.unseenCount = data[mailbox.id];\n });\n });\n });\n\n Preferences.ready().then(function() {\n var refreshViewCheck = Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually')\n $timeout(vm.refreshUnseenCount, refreshViewCheck.timeInterval()*1000);\n });\n }\n\n vm.refreshUnseenCount();\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxesController', MailboxesController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageController.$inject = ['$scope', '$state', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'stateMessage', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'Message'];\n function MessageController($scope, $state, $mdDialog, stateAccounts, stateAccount, stateMailbox, stateMessage, encodeUriFilter, focus, Dialog, Account, Mailbox, Message) {\n var vm = this;\n\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.mailbox = stateMailbox;\n vm.message = stateMessage;\n vm.service = Message;\n vm.tags = { searchText: '', selected: '' };\n vm.doDelete = doDelete;\n vm.reply = reply;\n vm.replyAll = replyAll;\n vm.forward = forward;\n vm.edit = edit;\n vm.viewRawSource = viewRawSource;\n\n // Watch the message model \"flags\" attribute to remove on-the-fly a tag from the IMAP message\n // when removed from the message viewer.\n // TODO: this approach should be reviewed once md-chips supports ng-change.\n $scope.$watchCollection('viewer.message.flags', function(oldTags, newTags) {\n _.each(_.difference(newTags, oldTags), function(tag) {\n vm.message.removeTag(tag);\n });\n });\n\n function doDelete() {\n stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {\n // Remove message from list of messages\n var index = _.findIndex(stateMailbox.$messages, function(o) {\n return o.uid == stateMessage.uid;\n });\n if (index != -1)\n stateMailbox.$messages.splice(index, 1);\n // Remove message object from scope\n vm.message = null;\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n });\n }\n\n function showMailEditor($event, message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message\n }\n });\n }\n\n function reply($event) {\n var message = vm.message.$reply();\n showMailEditor($event, message);\n }\n\n function replyAll($event) {\n var message = vm.message.$replyAll();\n showMailEditor($event, message);\n }\n\n function forward($event) {\n var message = vm.message.$forward();\n showMailEditor($event, message);\n }\n\n function edit($event) {\n vm.message.$editableContent().then(function() {\n showMailEditor($event, vm.message);\n });\n }\n\n function viewRawSource($event) {\n Message.$$resource.post(vm.message.id, \"viewsource\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: MessageRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n MessageRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function MessageRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n \n angular\n .module('SOGo.MailerUI') \n .controller('MessageController', MessageController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageEditorController.$inject = ['$stateParams', '$state', '$q', '$mdDialog', 'FileUploader', 'stateAccounts', 'stateMessage', '$timeout', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $state, $q, $mdDialog, FileUploader, stateAccounts, stateMessage, $timeout, encodeUriFilter, focus, Dialog, Account, Mailbox, AddressBook, Preferences) {\n var vm = this;\n\n vm.autocomplete = {to: {}, cc: {}, bcc: {}};\n vm.autosave = null;\n vm.autosaveDrafts = autosaveDrafts;\n vm.hideCc = true;\n vm.hideBcc = true;\n vm.cancel = cancel;\n vm.send = send;\n vm.contactFilter = contactFilter;\n vm.identities = _.pluck(_.flatten(_.pluck(stateAccounts, 'identities')), 'full');\n vm.uploader = new FileUploader({\n url: stateMessage.$absolutePath({asDraft: true}) + '/save',\n autoUpload: true,\n alias: 'attachments',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n stateMessage.$setUID(response.uid);\n stateMessage.$reload();\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n\n // We remove the attachment\n stateMessage.$deleteAttachment(item.file.name);\n this.removeFromQueue(item);\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n if ($stateParams.actionName == 'reply') {\n stateMessage.$reply().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'replyall') {\n stateMessage.$replyAll().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'forward') {\n stateMessage.$forward().then(function(msgObject) {\n vm.message = msgObject;\n });\n }\n else if (angular.isDefined(stateMessage)) {\n vm.message = stateMessage;\n }\n\n function cancel() {\n // TODO: delete draft?\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n $mdDialog.cancel();\n }\n\n function send() {\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n vm.message.$send().then(function(data) {\n $mdDialog.hide();\n }, function(data) {\n Dialog.alert(l(data.status), l(data.message));\n });\n }\n\n function contactFilter($query) {\n var deferred = $q.defer();\n AddressBook.$filterAll($query).then(function(results) {\n deferred.resolve(_.invoke(results, '$shortFormat', $query));\n });\n return deferred.promise;\n }\n\n // Drafts autosaving\n function autosaveDrafts() {\n vm.message.$save();\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n }\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n vm.localeCode = Preferences.defaults.LocaleCode;\n });\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MessageEditorController', MessageEditorController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /**\n * sgIMIP - A directive to handle IMIP actions on emails\n * @memberof SOGo.MailerUI\n * @example:\n\n */\n function sgImip() {\n return {\n restrict: 'A',\n link: link,\n controller: 'sgImipController'\n };\n\n function link(scope, iElement, attrs, ctrl) {\n ctrl.pathToAttachment = attrs.sgImipPath;\n }\n }\n\n /**\n * @ngInject\n */\n sgImipController.$inject = ['$scope', 'User'];\n function sgImipController($scope, User) {\n var vm = this;\n\n $scope.delegateInvitation = false;\n $scope.delegatedTo = '';\n $scope.searchText = '';\n\n $scope.userFilter = function($query) {\n return User.$filter($query);\n };\n\n $scope.iCalendarAction = function(action) {\n var data;\n\n if (action == 'delegate') {\n data = {\n receiveUpdates: false,\n delegatedTo: $scope.delegatedTo.c_email\n };\n }\n\n $scope.viewer.message.$imipAction(vm.pathToAttachment, action, data);\n };\n }\n\n angular\n .module('SOGo.MailerUI')\n .controller('sgImipController', sgImipController)\n .directive('sgImip', sgImip);\n})();\n\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.services.js b/UI/WebServerResources/js/Mailer.services.js new file mode 100644 index 0000000000..1af2b6e850 --- /dev/null +++ b/UI/WebServerResources/js/Mailer.services.js @@ -0,0 +1,2 @@ +!function(){"use strict";function Account(futureAccountData){"function"!=typeof futureAccountData.then&&(angular.extend(this,futureAccountData),_.each(this.identities,function(identity){identity.fullName?identity.full=identity.fullName+" <"+identity.email+">":identity.full="<"+identity.email+">"}),Account.$log.debug("Account: "+JSON.stringify(futureAccountData,void 0,2)))}Account.$factory=["$q","$timeout","$log","sgSettings","Resource","Mailbox","Message",function($q,$timeout,$log,Settings,Resource,Mailbox,Message){return angular.extend(Account,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),$Mailbox:Mailbox,$Message:Message}),Account}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",Account.$factory),Account.$findAll=function(data){var collection=[];return data&&angular.forEach(data,function(o,i){o.id=i,collection[i]=new Account(o)}),collection},Account.prototype.$getMailboxes=function(options){var _this=this,deferred=Account.$q.defer();return!this.$mailboxes||options&&options.reload?Account.$Mailbox.$find(this).then(function(data){_this.$mailboxes=data,_this.$flattenMailboxes({reload:!0}),deferred.resolve(_this.$mailboxes)}):deferred.resolve(this.$mailboxes),deferred.promise},Account.prototype.$flattenMailboxes=function(options){var _this=this,allMailboxes=[],_visit=function(mailboxes){_.each(mailboxes,function(o){allMailboxes.push(o),o.children&&o.children.length>0&&_visit(o.children)})};return!this.$$flattenMailboxes||options&&options.reload?(_visit(this.$mailboxes),_this.$$flattenMailboxes=allMailboxes):allMailboxes=this.$$flattenMailboxes,allMailboxes},Account.prototype.$getMailboxByType=function(type){var mailbox,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.type==type});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};mailbox=_find(this.$mailboxes),console.debug(mailbox),console.debug(this.specialMailboxes)},Account.prototype.$getMailboxByPath=function(path){var mailbox=null,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==path});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};return mailbox=_find(this.$mailboxes)},Account.prototype.$newMailbox=function(path,name){var _this=this,deferred=Account.$q.defer();return Account.$$resource.post(path,"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0}),deferred.resolve()},function(response){deferred.reject(response.error)}),deferred.promise},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message: "+JSON.stringify(data,void 0,2));var message=new Account.$Message(data.accountId,_this.$getMailboxByPath(data.mailboxPath),data);return message}).then(function(message){return Account.$$resource.fetch(message.$absolutePath({asDraft:!0}),"edit").then(function(data){return Account.$log.debug("New message: "+JSON.stringify(data,void 0,2)),angular.extend(message.editable,data),message})})},Account.prototype.$addDelegate=function(user){var _this=this,deferred=Account.$q.defer(),param={uid:user.uid};return!user.uid||_.indexOf(_.pluck(this.delegates,"uid"),user.uid)>-1?deferred.resolve():Account.$$resource.fetch(this.id.toString(),"addDelegate",param).then(function(){_this.delegates.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Account.prototype.$removeDelegate=function(uid){var _this=this,param={uid:uid};return Account.$$resource.fetch(this.id.toString(),"removeDelegate",param).then(function(){var i=_.indexOf(_.pluck(_this.delegates,"uid"),uid);i>=0&&_this.delegates.splice(i,1)})}}(),function(){"use strict";function Mailbox(account,futureMailboxData){if(this.$account=account,"function"!=typeof futureMailboxData.then){if(this.init(futureMailboxData),this.name&&!this.path){var newMailboxData=Mailbox.$$resource.create("createFolder",this.name);this.$unwrap(newMailboxData)}}else this.$unwrap(futureMailboxData)}Mailbox.$factory=["$q","$timeout","$log","sgSettings","Resource","Message","Acl","Preferences","sgMailbox_PRELOAD",function($q,$timeout,$log,Settings,Resource,Message,Acl,Preferences,PRELOAD){return angular.extend(Mailbox,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser()),$Message:Message,$$Acl:Acl,$Preferences:Preferences,$query:{sort:"date",asc:0},selectedFolder:null,$refreshTimeout:null,PRELOAD:PRELOAD}),Preferences.ready().then(function(){Preferences.settings.Mail.SortingState&&(Mailbox.$query.sort=Preferences.settings.Mail.SortingState[0],Mailbox.$query.asc=parseInt(Preferences.settings.Mail.SortingState[1]))}),Mailbox}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").constant("sgMailbox_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("Mailbox",Mailbox.$factory),Mailbox.$find=function(account){var futureMailboxData;return futureMailboxData=this.$$resource.fetch(account.id.toString(),"view"),Mailbox.$unwrapCollection(account,futureMailboxData)},Mailbox.$unwrapCollection=function(account,futureMailboxData){var collection=[],createMailboxes=function(level,mailbox){for(var i=0;istartIndex&&max>startIndex;startIndex++)angular.isDefined(this.$messages[startIndex].subject)||this.$messages[startIndex].loading?endIndex++:(uids.push(this.$messages[startIndex].uid),this.$messages[startIndex].loading=!0);Mailbox.$log.debug("Loading UIDs "+uids.join(" ")),futureHeadersData=Mailbox.$$resource.post(this.id,"headers",{uids:uids}),this.$unwrapHeaders(futureHeadersData)}return loaded},Mailbox.prototype.isEditable=function(){return"folder"==this.type},Mailbox.prototype.$rename=function(){var findParent,parent,children,i,_this=this,deferred=Mailbox.$q.defer();return this.name==this.$shadowData.name?(deferred.resolve(),deferred.promise):(findParent=function(parent,children){var parentMailbox=null,mailbox=_.find(children,function(o){return o.path==_this.path});return mailbox?parentMailbox=parent:angular.forEach(children,function(o){!parentMailbox&&o.children&&o.children.length>0&&(parentMailbox=findParent(o,o.children))}),parentMailbox},parent=findParent(null,this.$account.$mailboxes),children=null===parent?this.$account.$mailboxes:parent.children,i=_.indexOf(_.pluck(children,"id"),this.id),this.$save().then(function(data){var sibling;angular.extend(_this,data),_this.id=_this.$id(),children.splice(i,1),sibling=_.find(children,function(o){return Mailbox.$log.debug(o.name+" ? "+_this.name),"folder"==o.type&&o.name.localeCompare(_this.name)>0}),i=sibling?_.indexOf(_.pluck(children,"id"),sibling.id):children.length,children.splice(i,0,_this),deferred.resolve()},function(data){deferred.reject(data)}),deferred.promise)},Mailbox.prototype.$compact=function(){return Mailbox.$$resource.post(this.id,"expunge")},Mailbox.prototype.$setFolderAs=function(type){return Mailbox.$$resource.post(this.id,"setAs"+type+"Folder")},Mailbox.prototype.$emptyTrash=function(){return Mailbox.$$resource.post(this.id,"emptyTrash")},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$delete=function(){var promise,_this=this,deferred=Mailbox.$q.defer();return promise=Mailbox.$$resource.remove(this.id),promise.then(function(){_this.$account.$getMailboxes({reload:!0}),deferred.resolve(!0)},function(data,status){deferred.reject(data)}),deferred.promise},Mailbox.prototype.$deleteMessages=function(uids){return Mailbox.$$resource.post(this.id,"batchDelete",{uids:uids})},Mailbox.prototype.$copyMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"copyMessages",{uids:uids,folder:folder})},Mailbox.prototype.$moveMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"moveMessages",{uids:uids,folder:folder})},Mailbox.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit()},Mailbox.prototype.$save=function(){var _this=this;return Mailbox.$$resource.save(this.id,this.$omit()).then(function(data){return _this.$shadowData=_this.$omit(),Mailbox.$log.debug(JSON.stringify(data,void 0,2)),data},function(data){Mailbox.$log.error(JSON.stringify(data,void 0,2)),_this.$reset()})},Mailbox.prototype.$newMailbox=function(path,name){return this.$account.$newMailbox(path,name)},Mailbox.prototype.$omit=function(){var mailbox={};return angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&(mailbox[key]=value)}),mailbox},Mailbox.prototype.$unwrap=function(futureMailboxData){var _this=this,deferred=Mailbox.$q.defer();return this.$futureMailboxData=futureMailboxData,this.$futureMailboxData.then(function(data){Mailbox.$timeout(function(){var uids,headers;_this.init(data),_this.uids&&(Mailbox.$log.debug("unwrapping "+data.uids.length+" messages"),headers=_.invoke(_this.headers[0],"toLowerCase"),_this.headers.splice(0,1),_this.threaded&&(uids=_this.uids[0],_this.uids.splice(0,1)),_.reduce(_this.uids,function(msgs,msg,i){var data;return data=_this.threaded?_.object(uids,msg):{uid:msg.toString()},_this.uidsMap[data.uid]=i,msgs.push(new Mailbox.$Message(_this.$account.id,_this,data)),msgs},_this.$messages),_.each(_this.headers,function(data){var msg=_.object(headers,data),i=_this.uidsMap[msg.uid.toString()];_.extend(_this.$messages[i],msg)})),Mailbox.$log.debug("mailbox "+_this.id+" ready"),_this.$isLoading=!1,deferred.resolve(_this.$messages)})},function(data){angular.extend(_this,data),_this.isError=!0,deferred.reject()}),deferred.promise},Mailbox.prototype.$unwrapHeaders=function(futureHeadersData){var _this=this;futureHeadersData.then(function(data){Mailbox.$timeout(function(){var headers,j;data.length>0&&(headers=_.invoke(data[0],"toLowerCase"),data.splice(0,1),_.each(data,function(messageHeaders){messageHeaders=_.object(headers,messageHeaders),j=_this.uidsMap[messageHeaders.uid.toString()],angular.isDefined(j)&&_.extend(_this.$messages[j],messageHeaders)}))})})}}(),function(){"use strict";function Message(accountId,mailbox,futureMessageData){this.accountId=accountId,this.$mailbox=mailbox,this.$hasUnsafeContent=!1,this.$loadUnsafeContent=!1,this.editable={to:[],cc:[],bcc:[]},"function"!=typeof futureMessageData.then?(angular.extend(this,futureMessageData),this.id=this.$absolutePath(),this.$formatFullAddresses()):this.$unwrap(futureMessageData),this.selected=!1}Message.$factory=["$q","$timeout","$log","$sce","sgSettings","Gravatar","Resource","Preferences",function($q,$timeout,$log,$sce,Settings,Gravatar,Resource,Preferences){return angular.extend(Message,{$q:$q,$timeout:$timeout,$log:$log,$sce:$sce,$gravatar:Gravatar,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser())}),Preferences.ready().then(function(){Preferences.defaults.SOGoMailLabelsColors&&(Message.$tags=Preferences.defaults.SOGoMailLabelsColors)}),Message}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Message",Message.$factory),Message.filterTags=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Message.$tags),function(tag){var value=Message.$tags[tag];return-1!=value[0].search(re)})},Message.prototype.$absolutePath=function(options){var path;return path=_.map(this.$mailbox.path.split("/"),function(component){return"folder"+component.asCSSIdentifier()}),path.splice(0,0,this.accountId),options&&options.asDraft&&this.draftId?path.push(this.draftId):path.push(this.uid),path.join("/")},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,this.id=this.$absolutePath(),oldUID>-1&&this.$mailbox.uidsMap[oldUID]&&(this.$mailbox.uidsMap[uid]=this.$mailbox.uidsMap[oldUID],this.$mailbox.uidsMap[oldUID]=null))},Message.prototype.$formatFullAddresses=function(){var _this=this;_.each(["from","to","cc","bcc","reply-to"],function(type){_.each(_this[type],function(data,i){data.name&&data.name!=data.email?data.full=data.name+" <"+data.email+">":data.full="<"+data.email+">"})})},Message.prototype.$shortAddress=function(type){var address="";return this[type]&&this[type].length>0&&(address=this[type][0].name||this[type][0].email||""),address},Message.prototype.loadUnsafeContent=function(){this.$loadUnsafeContent=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){"UIxMailPartAlternativeViewer"==part.type?_visit(_.find(part.content,function(alternatePart){return part.preferredPart==alternatePart.contentType})):angular.isArray(part.content)?_.each(part.content,function(mixedPart){_visit(mixedPart)}):(angular.isUndefined(part.safeContent)&&(part.safeContent=part.content,_this.$hasUnsafeContent=part.safeContent.indexOf(" unsafe-")>-1),"UIxMailPartHTMLViewer"==part.type?(part.html=!0,_this.$loadUnsafeContent?(angular.isUndefined(part.unsafeContent)&&(part.unsafeContent=document.createElement("div"),part.unsafeContent.innerHTML=part.safeContent,angular.forEach(["src","data","classid","background","style"],function(suffix){var element,value,i,elements=part.unsafeContent.querySelectorAll("[unsafe-"+suffix+"]");for(i=0;i';\n else\n identity.full = '<' + identity.email + '>';\n });\n Account.$log.debug('Account: ' + JSON.stringify(futureAccountData, undefined, 2));\n }\n else {\n // The promise will be unwrapped first\n //this.$unwrap(futureAccountData);\n }\n }\n\n /**\n * @memberof Account\n * @desc The factory we'll use to register with Angular\n * @returns the Account constructor\n */\n Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Mailbox, Message) {\n angular.extend(Account, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n $Mailbox: Mailbox,\n $Message: Message\n });\n\n return Account; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Account in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Account', Account.$factory);\n\n /**\n * @memberof Account\n * @desc Set the list of accounts and instanciate a new Account object for each item.\n * @param {array} [data] - the metadata of the accounts\n * @returns the list of accounts\n */\n Account.$findAll = function(data) {\n var collection = [];\n if (data) {\n // Each entry is spun up as an Account instance\n angular.forEach(data, function(o, i) {\n o.id = i;\n collection[i] = new Account(o);\n });\n }\n return collection;\n };\n\n /**\n * @function $getMailboxes\n * @memberof Account.prototype\n * @desc Fetch the list of mailboxes for the current account.\n * @param {object} [options] - force a reload by setting 'reload' to true\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxes = function(options) {\n var _this = this,\n deferred = Account.$q.defer();\n\n if (this.$mailboxes && !(options && options.reload)) {\n deferred.resolve(this.$mailboxes);\n }\n else {\n Account.$Mailbox.$find(this).then(function(data) {\n _this.$mailboxes = data;\n _this.$flattenMailboxes({reload: true});\n deferred.resolve(_this.$mailboxes);\n });\n }\n\n return deferred.promise;\n };\n\n /**\n * @function $flattenMailboxes\n * @memberof Account.prototype\n * @desc Get a flatten array of the mailboxes.\n * @param {object} [options] - force a reload\n * @returns an array of Mailbox instances\n */\n Account.prototype.$flattenMailboxes = function(options) {\n var _this = this,\n allMailboxes = [],\n _visit = function(mailboxes) {\n _.each(mailboxes, function(o) {\n allMailboxes.push(o);\n if (o.children && o.children.length > 0) {\n _visit(o.children);\n }\n });\n };\n\n if (this.$$flattenMailboxes && !(options && options.reload)) {\n allMailboxes = this.$$flattenMailboxes;\n }\n else {\n _visit(this.$mailboxes);\n _this.$$flattenMailboxes = allMailboxes;\n }\n\n return allMailboxes;\n };\n\n Account.prototype.$getMailboxByType = function(type) {\n var mailbox,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.type == type;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n console.debug(mailbox);\n console.debug(this.specialMailboxes);\n };\n\n /**\n * @function $getMailboxByPath\n * @memberof Account.prototype\n * @desc Recursively find a mailbox using its path\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxByPath = function(path) {\n var mailbox = null,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == path;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n return mailbox;\n };\n\n /**\n * @function $newMailbox\n * @memberof Account.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMailbox = function(path, name) {\n var _this = this,\n deferred = Account.$q.defer();\n\n Account.$$resource.post(path, 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n deferred.resolve();\n }, function(response) {\n deferred.reject(response.error);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $newMessage\n * @memberof Account.prototype\n * @desc Prepare a new Message object associated to the appropriate mailbox.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMessage = function() {\n var _this = this;\n\n // Query account for draft folder and draft UID\n return Account.$$resource.fetch(this.id.toString(), 'compose').then(function(data) {\n Account.$log.debug('New message: ' + JSON.stringify(data, undefined, 2));\n var message = new Account.$Message(data.accountId, _this.$getMailboxByPath(data.mailboxPath), data);\n return message;\n }).then(function(message) {\n // Fetch draft initial data\n return Account.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Account.$log.debug('New message: ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $addDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @see {@link User.$filter}\n */\n Account.prototype.$addDelegate = function(user) {\n var _this = this,\n deferred = Account.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.delegates, 'uid'), user.uid) > -1) {\n // No UID specified or user already in delegates\n deferred.resolve();\n }\n else {\n Account.$$resource.fetch(this.id.toString(), 'addDelegate', param).then(function() {\n _this.delegates.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @return a promise of the server call to remove the user from the account's delegates\n */\n Account.prototype.$removeDelegate = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Account.$$resource.fetch(this.id.toString(), 'removeDelegate', param).then(function() {\n var i = _.indexOf(_.pluck(_this.delegates, 'uid'), uid);\n if (i >= 0) {\n _this.delegates.splice(i, 1);\n }\n });\n };\n \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Mailbox\n * @constructor\n * @param {object} futureMailboxData - either an object literal or a promise\n */\n function Mailbox(account, futureMailboxData) {\n this.$account = account;\n // Data is immediately available\n if (typeof futureMailboxData.then !== 'function') {\n this.init(futureMailboxData);\n if (this.name && !this.path) {\n // Create a new mailbox on the server\n var newMailboxData = Mailbox.$$resource.create('createFolder', this.name);\n this.$unwrap(newMailboxData);\n }\n }\n else {\n // The promise will be unwrapped first\n // NOTE: this condition never happen for the moment\n this.$unwrap(futureMailboxData);\n }\n }\n\n /**\n * @memberof Mailbox\n * @desc The factory we'll use to register with Angular\n * @returns the Mailbox constructor\n */\n Mailbox.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Message', 'Acl', 'Preferences', 'sgMailbox_PRELOAD', function($q, $timeout, $log, Settings, Resource, Message, Acl, Preferences, PRELOAD) {\n angular.extend(Mailbox, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Message: Message,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: { sort: 'date', asc: 0 },\n selectedFolder: null,\n $refreshTimeout: null,\n PRELOAD: PRELOAD\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Mail.SortingState) {\n Mailbox.$query.sort = Preferences.settings.Mail.SortingState[0];\n Mailbox.$query.asc = parseInt(Preferences.settings.Mail.SortingState[1]);\n }\n });\n\n return Mailbox; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Mailbox in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .constant('sgMailbox_PRELOAD', {\n LOOKAHEAD: 50,\n SIZE: 100\n })\n .factory('Mailbox', Mailbox.$factory);\n\n /**\n * @memberof Mailbox\n * @desc Fetch list of mailboxes of a specific account\n * @param {string} accountId - the account\n * @return a promise of the HTTP operation\n * @see {@link Account.$getMailboxes}\n */\n Mailbox.$find = function(account) {\n var path, futureMailboxData;\n\n futureMailboxData = this.$$resource.fetch(account.id.toString(), 'view');\n\n return Mailbox.$unwrapCollection(account, futureMailboxData); // a collection of mailboxes\n };\n\n /**\n * @memberof Mailbox\n * @desc Unwrap to a collection of Mailbox instances.\n * @param {string} account - the account\n * @param {promise} futureMailboxData - a promise of the mailboxes metadata\n * @returns a promise of a collection of Mailbox objects\n */\n Mailbox.$unwrapCollection = function(account, futureMailboxData) {\n var collection = [],\n // Local recursive function\n createMailboxes = function(level, mailbox) {\n for (var i = 0; i < mailbox.children.length; i++) {\n mailbox.children[i].level = level;\n mailbox.children[i] = new Mailbox(account, mailbox.children[i]);\n createMailboxes(level+1, mailbox.children[i]);\n }\n };\n //collection.$futureMailboxData = futureMailboxData;\n\n return futureMailboxData.then(function(data) {\n return Mailbox.$timeout(function() {\n // Each entry is spun up as a Mailbox instance\n angular.forEach(data.mailboxes, function(data, index) {\n data.level = 0;\n var mailbox = new Mailbox(account, data);\n createMailboxes(1, mailbox); // recursively create all sub-mailboxes\n collection.push(mailbox);\n });\n return collection;\n });\n });\n };\n\n /**\n * @memberof Mailbox\n * @desc Build the path of the mailbox (or account only).\n * @param {string} accountId - the account ID\n * @param {string} [mailboxPath] - the mailbox path\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.$absolutePath = function(accountId, mailboxPath) {\n var path = [];\n\n if (mailboxPath) {\n path = _.map(mailboxPath.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n }\n\n path.splice(0, 0, accountId); // insert account ID\n\n return path.join('/');\n };\n\n /**\n * @function init\n * @memberof Mailbox.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of mailbox\n */\n Mailbox.prototype.init = function(data) {\n var _this = this;\n this.$isLoading = false;\n this.$messages = [];\n this.uidsMap = {};\n angular.extend(this, data);\n if (this.path) {\n this.id = this.$id();\n this.$acl = new Mailbox.$$Acl('Mail/' + this.id);\n }\n if (this.type) {\n this.$isEditable = this.isEditable();\n }\n if (angular.isUndefined(this.$shadowData)) {\n // Make a copy of the data for an eventual reset\n this.$shadowData = this.$omit();\n }\n };\n\n /**\n * @function $id\n * @memberof Mailbox.prototype\n * @desc Build the unique ID to identified the mailbox.\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.prototype.$id = function() {\n return Mailbox.$absolutePath(this.$account.id, this.path);\n };\n\n /**\n * @function $selectedCount\n * @memberof Mailbox.prototype\n * @desc Return the number of messages selected by the user.\n * @returns the number of selected messages\n */\n Mailbox.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.$messages) {\n count = (_.filter(this.$messages, function(message) { return message.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Mailbox.prototype\n * @desc Fetch the messages metadata of the mailbox\n * @param {object} [sort] - sort preferences. Defaults to descendent by date.\n * @param {string} sort.match - either AND or OR\n * @param {string} sort.sort - either arrival, subject, from, to, date, or size\n * @param {boolean} sort.asc - sort is ascendant if true\n * @param {object[]} [filters] - list of filters for the query\n * @param {string} filters.searchBy - either subject, from, to, cc, or body\n * @param {string} filters.searchInput - the search string to match\n * @param {boolean} filters.negative - negate the condition\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$filter = function(sortingAttributes, filters) {\n var _this = this, options = {};\n\n if (!angular.isDefined(this.unseenCount))\n this.unseenCount = 0;\n\n this.$isLoading = true;\n\n return Mailbox.$Preferences.ready().then(function() {\n\n if (Mailbox.$refreshTimeout)\n Mailbox.$timeout.cancel(Mailbox.$refreshTimeout);\n\n if (sortingAttributes)\n // Sorting preferences are common to all mailboxes\n angular.extend(Mailbox.$query, sortingAttributes);\n\n angular.extend(options, { sortingAttributes: Mailbox.$query });\n if (angular.isDefined(filters)) {\n options.filters = _.reject(filters, function(filter) {\n return angular.isUndefined(filter.searchInput) || filter.searchInput.length === 0;\n });\n _.each(options.filters, function(filter) {\n var secondFilter,\n match = filter.searchBy.match(/(\\w+)_or_(\\w+)/);\n if (match) {\n options.sortingAttributes.match = 'OR';\n filter.searchBy = match[1];\n secondFilter = angular.copy(filter);\n secondFilter.searchBy = match[2];\n options.filters.push(secondFilter);\n }\n });\n }\n\n // Restart the refresh timer, if needed\n var refreshViewCheck = Mailbox.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, Mailbox.prototype.$filter);\n Mailbox.$refreshTimeout = Mailbox.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n\n var futureMailboxData = Mailbox.$$resource.post(_this.id, 'view', options);\n return _this.$unwrap(futureMailboxData);\n });\n };\n\n /**\n * @function $loadMessage\n * @memberof Mailbox.prototype\n * @desc Check if the message is loaded and in any case, fetch more messages headers from the server.\n * @returns true if the message metadata are already fetched\n */\n Mailbox.prototype.$loadMessage = function(messageId) {\n var startIndex = this.uidsMap[messageId],\n endIndex,\n max = this.$messages.length,\n loaded = false,\n uids,\n futureHeadersData;\n if (angular.isDefined(this.uidsMap[messageId]) && startIndex < this.$messages.length) {\n // Index is valid\n if (angular.isDefined(this.$messages[startIndex].subject)) {// || this.$messages[startIndex].loading) {\n // Message headers are loaded or data is coming\n loaded = true;\n }\n\n // Preload more headers if possible\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.LOOKAHEAD, max - 1);\n if (!angular.isDefined(this.$messages[endIndex].subject) &&\n !angular.isDefined(this.$messages[endIndex].loading)) {\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.SIZE, max);\n for (uids = []; startIndex < endIndex && startIndex < max; startIndex++) {\n if (angular.isDefined(this.$messages[startIndex].subject) || this.$messages[startIndex].loading) {\n // Message at this index is already loaded; increase the end index\n endIndex++;\n }\n else {\n // Message at this index will be loaded\n uids.push(this.$messages[startIndex].uid);\n this.$messages[startIndex].loading = true;\n }\n }\n\n Mailbox.$log.debug('Loading UIDs ' + uids.join(' '));\n futureHeadersData = Mailbox.$$resource.post(this.id, 'headers', {uids: uids});\n this.$unwrapHeaders(futureHeadersData);\n }\n }\n return loaded;\n };\n\n /**\n * @function isEditable\n * @memberof Mailbox.prototype\n * @desc Checks if the mailbox is editable based on its type.\n * @returns true if the mailbox is not a special folder.\n */\n Mailbox.prototype.isEditable = function() {\n return this.type == 'folder';\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$rename = function() {\n var _this = this,\n findParent,\n deferred = Mailbox.$q.defer(),\n parent,\n children,\n i;\n\n if (this.name == this.$shadowData.name) {\n // Name hasn't changed\n deferred.resolve();\n return deferred.promise;\n }\n\n // Local recursive function\n findParent = function(parent, children) {\n var parentMailbox = null,\n mailbox = _.find(children, function(o) {\n return o.path == _this.path;\n });\n if (mailbox) {\n parentMailbox = parent;\n }\n else {\n angular.forEach(children, function(o) {\n if (!parentMailbox && o.children && o.children.length > 0) {\n parentMailbox = findParent(o, o.children);\n }\n });\n }\n return parentMailbox;\n };\n\n // Find mailbox parent\n parent = findParent(null, this.$account.$mailboxes);\n if (parent === null)\n children = this.$account.$mailboxes;\n else\n children = parent.children;\n\n // Find index of mailbox among siblings\n i = _.indexOf(_.pluck(children, 'id'), this.id);\n\n this.$save().then(function(data) {\n var sibling;\n angular.extend(_this, data); // update the path attribute\n _this.id = _this.$id();\n\n // Move mailbox among its siblings according to its new name\n children.splice(i, 1);\n sibling = _.find(children, function(o) {\n Mailbox.$log.debug(o.name + ' ? ' + _this.name);\n return (o.type == 'folder' && o.name.localeCompare(_this.name) > 0);\n });\n if (sibling) {\n i = _.indexOf(_.pluck(children, 'id'), sibling.id);\n }\n else {\n i = children.length;\n }\n children.splice(i, 0, _this);\n\n deferred.resolve();\n }, function(data) {\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $compact\n * @memberof Mailbox.prototype\n * @desc Compact the mailbox\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$compact = function() {\n return Mailbox.$$resource.post(this.id, 'expunge');\n };\n\n /**\n * @function $setFolderAs\n * @memberof Mailbox.prototype\n * @desc Set a folder as Drafts/Sent/Trash\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$setFolderAs = function(type) {\n return Mailbox.$$resource.post(this.id, 'setAs' + type + 'Folder');\n };\n\n /**\n * @function $emptyTrash\n * @memberof Mailbox.prototype\n * @desc Empty the Trash folder.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$emptyTrash = function() {\n return Mailbox.$$resource.post(this.id, 'emptyTrash');\n };\n\n /**\n * @function $markAsRead\n * @memberof Mailbox.prototype\n * @desc Mark all messages from folder as read\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$markAsRead = function() {\n return Mailbox.$$resource.post(this.id, 'markRead');\n };\n\n /**\n * @function $delete\n * @memberof Mailbox.prototype\n * @desc Delete the mailbox from the server\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$delete = function() {\n var _this = this,\n deferred = Mailbox.$q.defer(),\n promise;\n\n promise = Mailbox.$$resource.remove(this.id);\n\n promise.then(function() {\n _this.$account.$getMailboxes({reload: true});\n deferred.resolve(true);\n }, function(data, status) {\n deferred.reject(data);\n });\n return deferred.promise;\n };\n\n /**\n * @function $deleteMessages\n * @memberof Mailbox.prototype\n * @desc Delete multiple messages from mailbox.\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$deleteMessages = function(uids) {\n return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});\n };\n\n /**\n * @function $copyMessages\n * @memberof Mailbox.prototype\n * @desc Copy multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$copyMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'copyMessages', {uids: uids, folder: folder});\n };\n\n /**\n * @function $moveMessages\n * @memberof Mailbox.prototype\n * @desc Move multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$moveMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'moveMessages', {uids: uids, folder: folder});\n };\n \n /**\n * @function $reset\n * @memberof Mailbox.prototype\n * @desc Reset the original state the mailbox's data.\n */\n Mailbox.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key != 'children' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit();\n };\n\n /**\n * @function $save\n * @memberof Mailbox.prototype\n * @desc Save the mailbox to the server. This currently can only affect the name of the mailbox.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$save = function() {\n var _this = this;\n\n return Mailbox.$$resource.save(this.id, this.$omit()).then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n Mailbox.$log.debug(JSON.stringify(data, undefined, 2));\n return data;\n }, function(data) {\n Mailbox.$log.error(JSON.stringify(data, undefined, 2));\n // Restore previous version\n _this.$reset();\n });\n };\n\n /**\n * @function $newMailbox\n * @memberof Mailbox.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Mailbox.prototype.$newMailbox = function(path, name) {\n return this.$account.$newMailbox(path, name);\n };\n\n /**\n * @function $omit\n * @memberof Mailbox.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Mailbox instance\n */\n Mailbox.prototype.$omit = function() {\n var mailbox = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'children' &&\n key[0] != '$') {\n mailbox[key] = value;\n }\n });\n return mailbox;\n };\n\n /**\n * @function $unwrap\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and instanciate new Message objects using received data.\n * @param {promise} futureMailboxData - a promise of the Mailbox's metadata\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$unwrap = function(futureMailboxData) {\n var _this = this,\n deferred = Mailbox.$q.defer();\n\n this.$futureMailboxData = futureMailboxData;\n this.$futureMailboxData.then(function(data) {\n Mailbox.$timeout(function() {\n var uids, headers;\n\n _this.init(data);\n\n if (_this.uids) {\n Mailbox.$log.debug('unwrapping ' + data.uids.length + ' messages');\n \n // First entry of 'headers' are keys\n headers = _.invoke(_this.headers[0], 'toLowerCase');\n _this.headers.splice(0, 1);\n\n // First entry of 'uids' are keys when threaded view is enabled\n if (_this.threaded) {\n uids = _this.uids[0];\n _this.uids.splice(0, 1);\n }\n\n // Instanciate Message objects\n _.reduce(_this.uids, function(msgs, msg, i) {\n var data;\n if (_this.threaded)\n data = _.object(uids, msg);\n else\n data = {uid: msg.toString()};\n\n // Build map of UID <=> index\n _this.uidsMap[data.uid] = i;\n\n msgs.push(new Mailbox.$Message(_this.$account.id, _this, data));\n\n return msgs;\n }, _this.$messages);\n\n // Extend Message objects with received headers\n _.each(_this.headers, function(data) {\n var msg = _.object(headers, data),\n i = _this.uidsMap[msg.uid.toString()];\n _.extend(_this.$messages[i], msg);\n });\n }\n Mailbox.$log.debug('mailbox ' + _this.id + ' ready');\n _this.$isLoading = false;\n deferred.resolve(_this.$messages);\n });\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapHeaders\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and extend matching Message objects using received data.\n * @param {promise} futureHeadersData - a promise of some messages metadata\n */\n Mailbox.prototype.$unwrapHeaders = function(futureHeadersData) {\n var _this = this;\n\n futureHeadersData.then(function(data) {\n Mailbox.$timeout(function() {\n var headers, j;\n if (data.length > 0) {\n // First entry of 'headers' are keys\n headers = _.invoke(data[0], 'toLowerCase');\n data.splice(0, 1);\n _.each(data, function(messageHeaders) {\n messageHeaders = _.object(headers, messageHeaders);\n j = _this.uidsMap[messageHeaders.uid.toString()];\n if (angular.isDefined(j)) {\n _.extend(_this.$messages[j], messageHeaders);\n }\n });\n }\n });\n });\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Message\n * @constructor\n * @param {string} accountId - the account ID\n * @param {string} mailboxPath - an array of the mailbox path components\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function Message(accountId, mailbox, futureMessageData) {\n this.accountId = accountId;\n this.$mailbox = mailbox;\n this.$hasUnsafeContent = false;\n this.$loadUnsafeContent = false;\n this.editable = {to: [], cc: [], bcc: []};\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n angular.extend(this, futureMessageData);\n this.id = this.$absolutePath();\n this.$formatFullAddresses();\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\n this.selected = false;\n }\n\n /**\n * @memberof Message\n * @desc The factory we'll use to register with Angular\n * @returns the Message constructor\n */\n Message.$factory = ['$q', '$timeout', '$log', '$sce', 'sgSettings', 'Gravatar', 'Resource', 'Preferences', function($q, $timeout, $log, $sce, Settings, Gravatar, Resource, Preferences) {\n angular.extend(Message, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $sce: $sce,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser())\n });\n // Initialize tags form user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailLabelsColors) {\n Message.$tags = Preferences.defaults.SOGoMailLabelsColors;\n }\n });\n\n return Message; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Message in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Message', Message.$factory);\n\n /**\n * @function filterTags\n * @memberof Message.prototype\n * @desc Search for tags (ie., mail labels) matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Message.filterTags = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Message.$tags), function(tag) {\n var value = Message.$tags[tag];\n return value[0].search(re) != -1;\n });\n };\n\n /**\n * @function $absolutePath\n * @memberof Message.prototype\n * @desc Build the path of the message\n * @returns a string representing the path relative to the mail module\n */\n Message.prototype.$absolutePath = function(options) {\n var path;\n\n path = _.map(this.$mailbox.path.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n path.splice(0, 0, this.accountId); // insert account ID\n if (options && options.asDraft && this.draftId) {\n path.push(this.draftId); // add draft ID\n }\n else {\n path.push(this.uid); // add message UID\n }\n\n return path.join('/');\n };\n\n /**\n * @function $setUID\n * @memberof Message.prototype\n * @desc Change the UID of the message. This happens when saving a draft.\n * @param {number} uid - the new message UID\n */\n Message.prototype.$setUID = function(uid) {\n var oldUID = this.uid || -1;\n\n if (oldUID != uid) {\n this.uid = uid;\n this.id = this.$absolutePath();\n if (oldUID > -1 && this.$mailbox.uidsMap[oldUID]) {\n this.$mailbox.uidsMap[uid] = this.$mailbox.uidsMap[oldUID];\n this.$mailbox.uidsMap[oldUID] = null;\n }\n }\n };\n\n /**\n * @function $formatFullAddresses\n * @memberof Message.prototype\n * @desc Format all sender and recipients addresses with a complete description (name ).\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n\n // Build long representation of email addresses\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n _.each(_this[type], function(data, i) {\n if (data.name && data.name != data.email)\n data.full = data.name + ' <' + data.email + '>';\n else\n data.full = '<' + data.email + '>';\n });\n });\n };\n\n /**\n * @function $shortAddress\n * @memberof Message.prototype\n * @desc Format the first address of a specific type with a short description.\n * @returns a string of the name or the email of the envelope address type\n */\n Message.prototype.$shortAddress = function(type) {\n var address = '';\n if (this[type] && this[type].length > 0) {\n address = this[type][0].name || this[type][0].email || '';\n }\n\n return address;\n };\n\n /**\n * @function loadUnsafeContent\n * @memberof Message.prototype\n * @desc Mark the message to load unsafe resources when calling $content().\n */\n Message.prototype.loadUnsafeContent = function() {\n this.$loadUnsafeContent = true;\n };\n\n /**\n * @function $content\n * @memberof Message.prototype\n * @desc Get the message body as accepted by SCE (Angular Strict Contextual Escaping).\n * @returns the HTML representation of the body\n */\n Message.prototype.$content = function() {\n var _this = this,\n parts = [],\n _visit = function(part) {\n if (part.type == 'UIxMailPartAlternativeViewer') {\n _visit(_.find(part.content, function(alternatePart) {\n return part.preferredPart == alternatePart.contentType;\n }));\n }\n // Can be used for UIxMailPartMixedViewer and UIxMailPartMessageViewer\n else if (angular.isArray(part.content)) {\n _.each(part.content, function(mixedPart) {\n _visit(mixedPart);\n });\n }\n else {\n if (angular.isUndefined(part.safeContent)) {\n // Keep a copy of the original content\n part.safeContent = part.content;\n _this.$hasUnsafeContent = (part.safeContent.indexOf(' unsafe-') > -1);\n }\n if (part.type == 'UIxMailPartHTMLViewer') {\n part.html = true;\n if (_this.$loadUnsafeContent) {\n if (angular.isUndefined(part.unsafeContent)) {\n part.unsafeContent = document.createElement('div');\n part.unsafeContent.innerHTML = part.safeContent;\n angular.forEach(['src', 'data', 'classid', 'background', 'style'], function(suffix) {\n var elements = part.unsafeContent.querySelectorAll('[unsafe-' + suffix + ']'),\n element,\n value,\n i;\n for (i = 0; i < elements.length; i++) {\n element = angular.element(elements[i]);\n value = element.attr('unsafe-' + suffix);\n element.attr(suffix, value);\n element.removeAttr('unsafe-' + suffix);\n }\n });\n }\n part.content = Message.$sce.trustAs('html', part.unsafeContent.innerHTML);\n }\n else {\n part.content = Message.$sce.trustAs('html', part.safeContent);\n }\n parts.push(part);\n }\n else if (part.type == 'UIxMailPartICalViewer' ||\n part.type == 'UIxMailPartImageViewer' ||\n part.type == 'UIxMailPartLinkViewer') {\n\n // UIxMailPartICalViewer injects 'participants'\n if (part.participants) {\n _.each(part.participants, function(participant) {\n participant.image = Message.$gravatar(participant.email, 32);\n });\n }\n\n // Trusted content that can be compiled (Angularly-speaking)\n part.compile = true;\n parts.push(part);\n }\n else {\n part.html = true;\n part.content = Message.$sce.trustAs('html', part.safeContent);\n parts.push(part);\n }\n }\n };\n _visit(this.parts);\n\n return parts;\n };\n\n /**\n * @function $editableContent\n * @memberof Message.prototype\n * @desc First, fetch the draft ID that corresponds to the temporary draft object on the SOGo server.\n * Secondly, fetch the editable message body along with other metadata such as the recipients.\n * @returns the HTML representation of the body\n */\n Message.prototype.$editableContent = function() {\n var _this = this;\n\n return Message.$$resource.fetch(this.id, 'edit').then(function(data) {\n angular.extend(_this, data);\n return Message.$$resource.fetch(_this.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('editable = ' + JSON.stringify(data, undefined, 2));\n angular.extend(_this.editable, data);\n return data.text;\n });\n });\n };\n\n /**\n * @function addTag\n * @memberof Message.prototype\n * @desc Add a mail tag on the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.addTag = function(tag) {\n return this.$addOrRemoveTag('add', tag);\n };\n\n /**\n * @function removeTag\n * @memberof Message.prototype\n * @desc Remove a mail tag from the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.removeTag = function(tag) {\n return this.$addOrRemoveTag('remove', tag);\n };\n\n /**\n * @function $addOrRemoveTag\n * @memberof Message.prototype\n * @desc Add or remove a mail tag on the current message.\n * @param {string} operation - the operation name to perform\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$addOrRemoveTag = function(operation, tag) {\n var data = {\n operation: operation,\n msgUIDs: [this.uid],\n flags: tag\n };\n\n if (tag)\n return Message.$$resource.post(this.$mailbox.$id(), 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $imipAction\n * @memberof Message.prototype\n * @desc Perform IMIP actions on the current message.\n * @param {string} path - the path of the IMIP calendar part \n * @param {string} action - the the IMIP action to perform\n * @param {object} data - the delegation info \n */\n Message.prototype.$imipAction = function(path, action, data) {\n var _this = this;\n Message.$$resource.post([this.id, path].join('/'), action, data).then(function(data) {\n Message.$timeout(function() {\n _this.$reload();\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $sendMDN\n * @memberof Message.prototype\n * @desc Send MDN response for current email message\n */\n Message.prototype.$sendMDN = function() {\n this.shouldAskReceipt = 0;\n return Message.$$resource.post(this.id, 'sendMDN');\n };\n\n /**\n * @function $deleteAttachment\n * @memberof Message.prototype\n * @desc Delete an attachment from a message being composed\n * @param {string} filename - the filename of the attachment to delete\n */\n Message.prototype.$deleteAttachment = function(filename) {\n var action = 'deleteAttachment?filename=' + filename;\n var _this = this;\n Message.$$resource.post(this.$absolutePath({asDraft: true}), action).then(function(data) {\n Message.$timeout(function() {\n _this.editable.attachmentAttrs = _.filter(_this.editable.attachmentAttrs, function(attachment) {\n return attachment.filename != filename;\n });\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $markAsFlaggedOrUnflagged\n * @memberof Message.prototype\n * @desc Add or remove a the \\\\Flagged flag on the current message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.toggleFlag = function() {\n var _this = this,\n action = 'markMessageFlagged';\n\n if (this.isflagged)\n action = 'markMessageUnflagged';\n\n return Message.$$resource.post(this.id, action).then(function(data) {\n Message.$timeout(function() {\n _this.isflagged = !_this.isflagged;\n });\n });\n };\n\n /**\n * @function $reload\n * @memberof Message.prototype\n * @desc Fetch the viewable message body along with other metadata such as the list of attachments.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$reload = function() {\n var futureMessageData;\n\n futureMessageData = Message.$$resource.fetch(this.id, 'view');\n\n return this.$unwrap(futureMessageData);\n };\n\n /**\n * @function $reply\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$reply = function() {\n return this.$newDraft('reply');\n };\n\n /**\n * @function $replyAll\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender and all recipients.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$replyAll = function() {\n return this.$newDraft('replyall');\n };\n\n /**\n * @function $forward\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a forward.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$forward = function() {\n return this.$newDraft('forward');\n };\n\n /**\n * @function $newDraft\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply or a forward of the current message and associated\n * to the draft mailbox.\n * @see {@link Account.$newMessage}\n * @see {@link Message.$editableContent}\n * @see {@link Message.$reply}\n * @see {@link Message.$replyAll}\n * @see {@link Message.$forwad}\n * @param {string} action - the HTTP action to perform on the message\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$newDraft = function(action) {\n var _this = this;\n\n // Query server for draft folder and draft UID\n return Message.$$resource.fetch(this.id, action).then(function(data) {\n var mailbox, message;\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n mailbox = _this.$mailbox.$account.$getMailboxByPath(data.mailboxPath);\n message = new Message(data.accountId, mailbox, data);\n // Fetch draft initial data\n return Message.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $save\n * @memberof Message.prototype\n * @desc Save the message to the server.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$save = function() {\n var _this = this,\n data = this.editable;\n\n Message.$log.debug('save = ' + JSON.stringify(data, undefined, 2));\n\n return Message.$$resource.save(this.$absolutePath({asDraft: true}), data).then(function(response) {\n Message.$log.debug('save = ' + JSON.stringify(response, undefined, 2));\n _this.$setUID(response.uid);\n _this.$reload(); // fetch a new viewable version of the message\n });\n };\n\n /**\n * @function $send\n * @memberof Message.prototype\n * @desc Send the message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$send = function() {\n var data = angular.copy(this.editable),\n deferred = Message.$q.defer();\n\n Message.$log.debug('send = ' + JSON.stringify(data, undefined, 2));\n\n Message.$$resource.post(this.$absolutePath({asDraft: true}), 'send', data).then(function(data) {\n if (data.status == 'success') {\n deferred.resolve(data);\n }\n else {\n deferred.reject(data);\n }\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrap\n * @memberof Message.prototype\n * @desc Unwrap a promise. \n * @param {promise} futureMessageData - a promise of some of the Message's data\n */\n Message.prototype.$unwrap = function(futureMessageData) {\n var _this = this,\n deferred = Message.$q.defer();\n\n // Expose the promise\n this.$futureMessageData = futureMessageData;\n\n // Resolve the promise\n this.$futureMessageData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n Message.$timeout(function() {\n angular.extend(_this, data);\n _this.id = _this.$absolutePath();\n _this.$formatFullAddresses();\n _this.$loadUnsafeContent = false;\n deferred.resolve(_this);\n });\n if (!_this.isread) {\n Message.$$resource.fetch(_this.id, 'markMessageRead').then(function() {\n Message.$timeout(function() {\n _this.isread = true;\n _this.$mailbox.unseenCount--;\n });\n });\n }\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Message.$log.error(_this.error);\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof Message.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Message instance\n */\n Message.prototype.$omit = function() {\n var message = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n message[key] = value;\n }\n });\n\n // Format addresses as arrays\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n if (message[type])\n message[type] = _.invoke(message[type].split(','), 'trim');\n });\n\n //Message.$log.debug(JSON.stringify(message, undefined, 2));\n return message;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Main.js b/UI/WebServerResources/js/Main.js new file mode 100644 index 0000000000..d71544f7c1 --- /dev/null +++ b/UI/WebServerResources/js/Main.js @@ -0,0 +1,2 @@ +!function(){"use strict";function loginController($scope,$mdDialog,Authentication){$scope.warning=!1,$scope.creds={username:cookieUsername,password:null},$scope.login=function(creds){return $scope.warning=!1,Authentication.login(creds).then(function(url){window.location.href=url},function(msg){$scope.warning=msg.error}),!1},$scope.showAbout=function($event){function AboutDialogController(scope,$mdDialog){scope.closeDialog=function(){$mdDialog.hide()}}$mdDialog.show({targetEvent:$event,templateUrl:"aboutBox.html",controller:AboutDialogController}),AboutDialogController.$inject=["scope","$mdDialog"]}}angular.module("SOGo.MainUI",["SOGo.Common","SOGo.Authentication"]).controller("loginController",loginController),loginController.$inject=["$scope","$mdDialog","Authentication"]}(); +//# sourceMappingURL=Main.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Main.js.map b/UI/WebServerResources/js/Main.js.map new file mode 100644 index 0000000000..bf4c1e6ab0 --- /dev/null +++ b/UI/WebServerResources/js/Main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["loginController","$scope","$mdDialog","Authentication","warning","creds","username","cookieUsername","password","login","then","url","window","location","href","msg","error","showAbout","$event","AboutDialogController","scope","closeDialog","hide","show","targetEvent","templateUrl","controller","$inject","angular","module"],"mappings":"CAGA,WACE,YAMA,SAASA,iBAAgBC,OAAQC,UAAWC,gBAC1CF,OAAOG,SAAU,EACjBH,OAAOI,OAAUC,SAAUC,eAAgBC,SAAU,MACrDP,OAAOQ,MAAQ,SAASJ,OAQtB,MAPAJ,QAAOG,SAAU,EACjBD,eAAeM,MAAMJ,OAClBK,KAAK,SAASC,KACbC,OAAOC,SAASC,KAAOH,KACtB,SAASI,KACVd,OAAOG,QAAUW,IAAIC,SAElB,GAETf,OAAOgB,UAAY,SAASC,QAO1B,QAASC,uBAAsBC,MAAOlB,WACpCkB,MAAMC,YAAc,WAClBnB,UAAUoB,QARdpB,UAAUqB,MACRC,YAAaN,OACbO,YAAa,gBACbC,WAAYP,wBAEdA,sBAAsBQ,SAAW,QAAS,cAvB9CC,QAAQC,OAAO,eAAgB,cAAe,wBAC3CH,WAAW,kBAAmB1B,iBAEjCA,gBAAgB2B,SAAW,SAAU,YAAa","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for MainUI (SOGoRootPage) */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication'])\n .controller('loginController', loginController);\n\n loginController.$inject = ['$scope', '$mdDialog', 'Authentication'];\n function loginController($scope, $mdDialog, Authentication) {\n $scope.warning = false;\n $scope.creds = { username: cookieUsername, password: null };\n $scope.login = function(creds) {\n $scope.warning = false;\n Authentication.login(creds)\n .then(function(url) {\n window.location.href = url;\n }, function(msg) {\n $scope.warning = msg.error;\n });\n return false;\n };\n $scope.showAbout = function($event) {\n $mdDialog.show({\n targetEvent: $event,\n templateUrl: 'aboutBox.html',\n controller: AboutDialogController\n });\n AboutDialogController.$inject = ['scope', '$mdDialog'];\n function AboutDialogController(scope, $mdDialog) {\n scope.closeDialog = function() {\n $mdDialog.hide();\n };\n }\n };\n }\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.js b/UI/WebServerResources/js/Preferences.js new file mode 100644 index 0000000000..0e4fe48c64 --- /dev/null +++ b/UI/WebServerResources/js/Preferences.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("preferences",{"abstract":!0,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}},resolve:{statePreferences:statePreferences}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}}),$urlRouterProvider.otherwise("/general")}function statePreferences(Preferences){return Preferences}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.PreferencesUI",["ngSanitize","ui.router","ck","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],statePreferences.$inject=["Preferences"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AccountDialogController($mdDialog,defaults,account,accountId,mailCustomFromEnabled){function customFromIsReadonly(){return accountId>0?!1:!mailCustomFromEnabled}function cancel(){$mdDialog.cancel()}function save(){$mdDialog.hide()}var vm=this;vm.defaults=defaults,vm.account=account,vm.accountId=accountId,vm.customFromIsReadonly=customFromIsReadonly,vm.cancel=cancel,vm.save=save}AccountDialogController.$inject=["$mdDialog","defaults","account","accountId","mailCustomFromEnabled"],angular.module("SOGo.PreferencesUI").controller("AccountDialogController",AccountDialogController)}(),function(){"use strict";function FiltersDialogController($scope,$mdDialog,filter,mailboxes,labels){$scope.filter=filter,$scope.mailboxes=mailboxes,$scope.labels=labels,$scope.fieldLabels={subject:l("Subject"),from:l("From"),to:l("To"),cc:l("Cc"),to_or_cc:l("To or Cc"),size:l("Size (Kb)"),header:l("Header"),body:l("Body")},$scope.methodLabels={addflag:l("Flag the message with:"),discard:l("Discard the message"),fileinto:l("File the message in:"),keep:l("Keep the message"),redirect:l("Forward the message to:"),reject:l("Send a reject message:"),vacation:l("Send a vacation message"),stop:l("Stop processing filter rules")},$scope.numberOperatorLabels={under:l("is under"),over:l("is over")},$scope.textOperatorLabels={is:l("is"),is_not:l("is not"),contains:l("contains"),contains_not:l("does not contain"),matches:l("matches"),matches_not:l("does not match"),regex:l("matches regex"),regex_not:l("does not match regex")},$scope.flagLabels={seen:l("Seen"),deleted:l("Deleted"),answered:l("Answered"),flagged:l("Flagged"),junk:l("Junk"),not_junk:l("Not Junk")},$scope.cancel=function(){$mdDialog.cancel()},$scope.save=function(){$mdDialog.hide()},$scope.addMailFilterRule=function(event){$scope.filter.rules||($scope.filter.rules=[]),$scope.filter.rules.push({})},$scope.removeMailFilterRule=function(index){$scope.filter.rules.splice(index,1)},$scope.addMailFilterAction=function(event){$scope.filter.actions||($scope.filter.actions=[]),$scope.filter.actions.push({})},$scope.removeMailFilterAction=function(index){$scope.filter.actions.splice(index,1)}}FiltersDialogController.$inject=["$scope","$mdDialog","filter","mailboxes","labels"],angular.module("SOGo.PreferencesUI").controller("FiltersDialogController",FiltersDialogController)}(),function(){"use strict";function PreferencesController($state,$mdDialog,User,Mailbox,statePreferences,Authentication){function go(module){$state.go("preferences."+module)}function addCalendarCategory(){vm.preferences.defaults.SOGoCalendarCategoriesColors["New category"]="#aaa",vm.preferences.defaults.SOGoCalendarCategories.push("New category")}function removeCalendarCategory(index){var key=vm.preferences.defaults.SOGoCalendarCategories[index];vm.preferences.defaults.SOGoCalendarCategories.splice(index,1),delete vm.preferences.defaults.SOGoCalendarCategoriesColors[key]}function addContactCategory(){vm.preferences.defaults.SOGoContactsCategories.push("")}function removeContactCategory(index){vm.preferences.defaults.SOGoContactsCategories.splice(index,1)}function addMailAccount(ev){var account;vm.preferences.defaults.AuxiliaryMailAccounts.push({}),account=_.last(vm.preferences.defaults.AuxiliaryMailAccounts),account.name=l("New account"),account.identities=[{fullName:"",email:""}],account.receipts={receiptAction:"ignore",receiptNonRecipientAction:"ignore",receiptOutsideDomainAction:"ignore",receiptAnyAction:"ignore"},$mdDialog.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account=new",targetEvent:ev,locals:{defaults:vm.preferences.defaults,account:account,accountId:vm.preferences.defaults.AuxiliaryMailAccounts.length-1,mailCustomFromEnabled:window.mailCustomFromEnabled}})}function editMailAccount(event,index){var account=vm.preferences.defaults.AuxiliaryMailAccounts[index];$mdDialog.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account="+index,targetEvent:event,locals:{defaults:vm.preferences.defaults,account:account,accountId:index,mailCustomFromEnabled:window.mailCustomFromEnabled}}).then(function(){vm.preferences.defaults.AuxiliaryMailAccounts[index]=account})}function removeMailAccount(index){vm.preferences.defaults.AuxiliaryMailAccounts.splice(index,1)}function addMailLabel(){vm.preferences.defaults.SOGoMailLabelsColors.new_label=["New label","#aaa"]}function removeMailLabel(key){delete vm.preferences.defaults.SOGoMailLabelsColors[key]}function addMailFilter(ev){vm.preferences.defaults.SOGoSieveFilters||(vm.preferences.defaults.SOGoSieveFilters=[]),vm.preferences.defaults.SOGoSieveFilters.push({});var filter=_.last(vm.preferences.defaults.SOGoSieveFilters);$mdDialog.show({controller:"FiltersDialogController",templateUrl:"editFilter?filter=new",targetEvent:ev,locals:{filter:filter,mailboxes:vm.mailboxes,labels:vm.preferences.defaults.SOGoMailLabelsColors}})}function editMailFilter(index){var filter=angular.copy(vm.preferences.defaults.SOGoSieveFilters[index]);$mdDialog.show({controller:"FiltersDialogController",templateUrl:"editFilter?filter="+index,targetEvent:null,locals:{filter:filter,mailboxes:vm.mailboxes,labels:vm.preferences.defaults.SOGoMailLabelsColors}}).then(function(){vm.preferences.defaults.SOGoSieveFilters[index]=filter})}function removeMailFilter(index){vm.preferences.defaults.SOGoSieveFilters.splice(index,1)}function save(){vm.preferences.$save()}function canChangePassword(){return vm.passwords.newPassword&&vm.passwords.newPassword.length>0&&vm.passwords.newPasswordConfirmation&&vm.passwords.newPasswordConfirmation.length&&vm.passwords.newPassword==vm.passwords.newPasswordConfirmation?!0:!1}function changePassword(){Authentication.changePassword(vm.passwords.newPassword).then(function(){var alert=$mdDialog.alert({title:l("Password"),content:l("The password was changed successfully."),ok:"OK"});$mdDialog.show(alert)["finally"](function(){alert=void 0})},function(msg){var alert=$mdDialog.alert({title:l("Password"),content:msg,ok:"OK"});$mdDialog.show(alert)["finally"](function(){alert=void 0})})}function timeZonesListFilter(filter){return _.filter(vm.timeZonesList,function(value){return value.toUpperCase().indexOf(filter.toUpperCase())>=0})}var vm=this;vm.preferences=statePreferences,vm.passwords={newPassword:null,newPasswordConfirmation:null},vm.go=go,vm.addCalendarCategory=addCalendarCategory,vm.removeCalendarCategory=removeCalendarCategory,vm.addContactCategory=addContactCategory,vm.removeContactCategory=removeContactCategory,vm.addMailAccount=addMailAccount,vm.editMailAccount=editMailAccount,vm.removeMailAccount=removeMailAccount,vm.addMailLabel=addMailLabel,vm.removeMailLabel=removeMailLabel,vm.addMailFilter=addMailFilter,vm.editMailFilter=editMailFilter,vm.removeMailFilter=removeMailFilter,vm.userFilter=User.$filter,vm.save=save,vm.canChangePassword=canChangePassword,vm.changePassword=changePassword,vm.timeZonesList=window.timeZonesList,vm.timeZonesListFilter=timeZonesListFilter,vm.timeZonesSearchText="",vm.mailboxes=Mailbox.$find({id:0})}PreferencesController.$inject=["$state","$mdDialog","User","Mailbox","statePreferences","Authentication"],angular.module("SOGo.PreferencesUI").controller("PreferencesController",PreferencesController)}(); +//# sourceMappingURL=Preferences.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.js.map b/UI/WebServerResources/js/Preferences.js.map new file mode 100644 index 0000000000..61ae361001 --- /dev/null +++ b/UI/WebServerResources/js/Preferences.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Preferences.js","sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","resolve","statePreferences","url","module","otherwise","Preferences","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","angular","config","run","$inject","AccountDialogController","$mdDialog","defaults","account","accountId","mailCustomFromEnabled","customFromIsReadonly","cancel","save","hide","vm","this","FiltersDialogController","$scope","filter","mailboxes","labels","fieldLabels","subject","l","from","to","cc","to_or_cc","size","header","body","methodLabels","addflag","discard","fileinto","keep","redirect","reject","vacation","stop","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","flagLabels","seen","deleted","answered","flagged","junk","not_junk","addMailFilterRule","rules","push","removeMailFilterRule","index","splice","addMailFilterAction","actions","removeMailFilterAction","PreferencesController","$state","User","Mailbox","Authentication","go","addCalendarCategory","SOGoCalendarCategoriesColors","SOGoCalendarCategories","removeCalendarCategory","key","addContactCategory","SOGoContactsCategories","removeContactCategory","addMailAccount","ev","AuxiliaryMailAccounts","_","last","name","identities","fullName","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","length","window","editMailAccount","then","removeMailAccount","addMailLabel","SOGoMailLabelsColors","new_label","removeMailLabel","addMailFilter","SOGoSieveFilters","editMailFilter","copy","removeMailFilter","$save","canChangePassword","passwords","newPassword","newPasswordConfirmation","changePassword","alert","title","content","ok","undefined","msg","timeZonesListFilter","timeZonesList","value","toUpperCase","indexOf","userFilter","$filter","timeZonesSearchText","$find","id"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.PreferencesUI', ['ngSanitize', 'ui.router', 'ck', 'SOGo.Common', 'SOGo.MailerUI', 'SOGo.ContactsUI', 'SOGo.Authentication'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('preferences', {\n abstract: true,\n views: {\n preferences: {\n templateUrl: 'preferences.html',\n controller: 'PreferencesController',\n controllerAs: 'app'\n }\n },\n resolve: {\n statePreferences: statePreferences\n }\n })\n .state('preferences.general', {\n url: '/general',\n views: {\n module: {\n templateUrl: 'generalPreferences.html'\n }\n }\n })\n .state('preferences.calendars', {\n url: '/calendars',\n views: {\n module: {\n templateUrl: 'calendarsPreferences.html'\n }\n }\n })\n .state('preferences.addressbooks', {\n url: '/addressbooks',\n views: {\n module: {\n templateUrl: 'addressbooksPreferences.html'\n }\n }\n })\n .state('preferences.mailer', {\n url: '/mailer',\n views: {\n module: {\n templateUrl: 'mailerPreferences.html'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/general');\n }\n\n /**\n * @ngInject\n */\n statePreferences.$inject = ['Preferences'];\n function statePreferences(Preferences) {\n return Preferences;\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AccountDialogController.$inject = ['$mdDialog', 'defaults', 'account', 'accountId', 'mailCustomFromEnabled'];\n function AccountDialogController($mdDialog, defaults, account, accountId, mailCustomFromEnabled) {\n var vm = this;\n\n vm.defaults = defaults;\n vm.account = account;\n vm.accountId = accountId;\n vm.customFromIsReadonly = customFromIsReadonly;\n vm.cancel = cancel;\n vm.save = save;\n\n function customFromIsReadonly() {\n if (accountId > 0)\n return false;\n\n return !mailCustomFromEnabled;\n }\n\n function cancel() {\n $mdDialog.cancel();\n }\n\n function save() {\n $mdDialog.hide();\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('AccountDialogController', AccountDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n FiltersDialogController.$inject = ['$scope', '$mdDialog', 'filter', 'mailboxes', 'labels'];\n function FiltersDialogController($scope, $mdDialog, filter, mailboxes, labels) {\n $scope.filter = filter;\n $scope.mailboxes = mailboxes;\n $scope.labels = labels;\n\n $scope.fieldLabels = {\n \"subject\": l(\"Subject\"),\n \"from\": l(\"From\"),\n \"to\": l(\"To\"),\n \"cc\": l(\"Cc\"),\n \"to_or_cc\": l(\"To or Cc\"),\n \"size\": l(\"Size (Kb)\"),\n \"header\": l(\"Header\"),\n \"body\": l(\"Body\")\n };\n\n $scope.methodLabels = {\n \"addflag\": l(\"Flag the message with:\"), \n \"discard\": l(\"Discard the message\"),\n \"fileinto\": l(\"File the message in:\"),\n \"keep\": l(\"Keep the message\"),\n \"redirect\": l(\"Forward the message to:\"),\n \"reject\": l(\"Send a reject message:\"),\n \"vacation\": l(\"Send a vacation message\"),\n \"stop\": l(\"Stop processing filter rules\")\n };\n\n $scope.numberOperatorLabels = {\n \"under\": l(\"is under\"),\n \"over\": l(\"is over\")\n };\n\n $scope.textOperatorLabels = {\n \"is\": l(\"is\"),\n \"is_not\": l(\"is not\"),\n \"contains\": l(\"contains\"),\n \"contains_not\": l(\"does not contain\"),\n \"matches\": l(\"matches\"),\n \"matches_not\": l(\"does not match\"),\n \"regex\": l(\"matches regex\"),\n \"regex_not\": l(\"does not match regex\")\n };\n\n $scope.flagLabels = {\n \"seen\": l(\"Seen\"),\n \"deleted\": l(\"Deleted\"),\n \"answered\": l(\"Answered\"),\n \"flagged\": l(\"Flagged\"),\n \"junk\": l(\"Junk\"),\n \"not_junk\": l(\"Not Junk\")\n };\n \n $scope.cancel = function() {\n $mdDialog.cancel();\n };\n \n $scope.save = function() {\n $mdDialog.hide();\n };\n \n $scope.addMailFilterRule = function(event) {\n if (!$scope.filter.rules)\n $scope.filter.rules = [];\n\n $scope.filter.rules.push({});\n };\n \n $scope.removeMailFilterRule = function(index) {\n $scope.filter.rules.splice(index, 1);\n };\n \n $scope.addMailFilterAction = function(event) {\n if (!$scope.filter.actions)\n $scope.filter.actions = [];\n\n $scope.filter.actions.push({});\n };\n \n $scope.removeMailFilterAction = function(index) {\n $scope.filter.actions.splice(index, 1);\n };\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('FiltersDialogController', FiltersDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n PreferencesController.$inject = ['$state', '$mdDialog', 'User', 'Mailbox', 'statePreferences', 'Authentication'];\n function PreferencesController($state, $mdDialog, User, Mailbox, statePreferences, Authentication) {\n var vm = this;\n\n vm.preferences = statePreferences;\n vm.passwords = { newPassword: null, newPasswordConfirmation: null };\n\n vm.go = go;\n vm.addCalendarCategory = addCalendarCategory;\n vm.removeCalendarCategory = removeCalendarCategory;\n vm.addContactCategory = addContactCategory;\n vm.removeContactCategory = removeContactCategory;\n vm.addMailAccount = addMailAccount;\n vm.editMailAccount = editMailAccount;\n vm.removeMailAccount = removeMailAccount;\n vm.addMailLabel = addMailLabel;\n vm.removeMailLabel = removeMailLabel;\n vm.addMailFilter = addMailFilter;\n vm.editMailFilter = editMailFilter;\n vm.removeMailFilter = removeMailFilter;\n vm.userFilter = User.$filter;\n vm.save = save;\n vm.canChangePassword = canChangePassword;\n vm.changePassword = changePassword;\n vm.timeZonesList = window.timeZonesList;\n vm.timeZonesListFilter = timeZonesListFilter;\n vm.timeZonesSearchText = '';\n vm.mailboxes = Mailbox.$find({ id: 0 });\n\n function go(module) {\n $state.go('preferences.' + module);\n }\n\n function addCalendarCategory() {\n vm.preferences.defaults.SOGoCalendarCategoriesColors[\"New category\"] = \"#aaa\";\n vm.preferences.defaults.SOGoCalendarCategories.push(\"New category\");\n }\n\n function removeCalendarCategory(index) {\n var key = vm.preferences.defaults.SOGoCalendarCategories[index];\n vm.preferences.defaults.SOGoCalendarCategories.splice(index, 1);\n delete vm.preferences.defaults.SOGoCalendarCategoriesColors[key];\n }\n\n function addContactCategory() {\n vm.preferences.defaults.SOGoContactsCategories.push(\"\");\n }\n\n function removeContactCategory(index) {\n vm.preferences.defaults.SOGoContactsCategories.splice(index, 1);\n }\n\n function addMailAccount(ev) {\n var account;\n\n vm.preferences.defaults.AuxiliaryMailAccounts.push({});\n\n account = _.last(vm.preferences.defaults.AuxiliaryMailAccounts);\n account.name = l(\"New account\");\n account.identities = [\n {\n fullName: \"\",\n email: \"\"\n }\n ];\n account.receipts = {\n receiptAction: \"ignore\",\n receiptNonRecipientAction: \"ignore\",\n receiptOutsideDomainAction: \"ignore\",\n receiptAnyAction: \"ignore\"\n };\n\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=new',\n targetEvent: ev,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: (vm.preferences.defaults.AuxiliaryMailAccounts.length-1),\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n });\n }\n\n function editMailAccount(event, index) {\n var account = vm.preferences.defaults.AuxiliaryMailAccounts[index];\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=' + index,\n targetEvent: event,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: index,\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n }).then(function() {\n vm.preferences.defaults.AuxiliaryMailAccounts[index] = account;\n });\n }\n\n function removeMailAccount(index) {\n vm.preferences.defaults.AuxiliaryMailAccounts.splice(index, 1);\n }\n \n function addMailLabel() {\n vm.preferences.defaults.SOGoMailLabelsColors.new_label = [\"New label\", \"#aaa\"];\n }\n\n function removeMailLabel(key) {\n delete vm.preferences.defaults.SOGoMailLabelsColors[key];\n }\n\n function addMailFilter(ev) {\n if (!vm.preferences.defaults.SOGoSieveFilters)\n vm.preferences.defaults.SOGoSieveFilters = [];\n\n vm.preferences.defaults.SOGoSieveFilters.push({});\n var filter = _.last(vm.preferences.defaults.SOGoSieveFilters);\n $mdDialog.show({\n controller: 'FiltersDialogController',\n templateUrl: 'editFilter?filter=new',\n targetEvent: ev,\n locals: {\n filter: filter,\n mailboxes: vm.mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n });\n }\n \n function editMailFilter(index) {\n var filter = angular.copy(vm.preferences.defaults.SOGoSieveFilters[index]);\n \n $mdDialog.show({\n controller: 'FiltersDialogController',\n templateUrl: 'editFilter?filter=' + index,\n targetEvent: null,\n locals: {\n filter: filter,\n mailboxes: vm.mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n }).then(function() {\n vm.preferences.defaults.SOGoSieveFilters[index] = filter;\n });\n }\n\n function removeMailFilter(index) {\n vm.preferences.defaults.SOGoSieveFilters.splice(index, 1);\n }\n \n function save() {\n vm.preferences.$save();\n }\n\n function canChangePassword() {\n if (vm.passwords.newPassword && vm.passwords.newPassword.length > 0 &&\n vm.passwords.newPasswordConfirmation && vm.passwords.newPasswordConfirmation.length &&\n vm.passwords.newPassword == vm.passwords.newPasswordConfirmation)\n return true;\n\n return false;\n }\n \n function changePassword() {\n Authentication.changePassword(vm.passwords.newPassword).then(function() {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: l('The password was changed successfully.'),\n ok: 'OK'\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n }, function(msg) {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: msg,\n ok: 'OK'\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n });\n }\n\n function timeZonesListFilter(filter) {\n return _.filter(vm.timeZonesList, function(value) {\n return value.toUpperCase().indexOf(filter.toUpperCase()) >= 0;\n });\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('PreferencesController', PreferencesController);\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.services.js b/UI/WebServerResources/js/Preferences.services.js new file mode 100644 index 0000000000..c47f94eb5b --- /dev/null +++ b/UI/WebServerResources/js/Preferences.services.js @@ -0,0 +1,2 @@ +!function(){"use strict";function Preferences(){var _this=this;this.defaults={},this.settings={},this.defaultsPromise=Preferences.$$resource.fetch("jsonDefaults").then(function(data){var labels=_.object(_.map(data.SOGoMailLabelsColors,function(value,key){return"$"==key.charAt(0)?["_"+key,value]:[key,value]}));return data.SOGoMailLabelsColors=labels,data.Vacation&&data.Vacation.autoReplyEmailAddresses&&(data.Vacation.autoReplyEmailAddresses=data.Vacation.autoReplyEmailAddresses.join(",")),data.Forward&&data.Forward.forwardAddress&&(data.Forward.forwardAddress=data.Forward.forwardAddress.join(",")),angular.extend(_this.defaults,data),_this.defaults}),this.settingsPromise=Preferences.$$resource.fetch("jsonSettings").then(function(data){return data.Calendar&&data.Calendar.PreventInvitationsWhitelist?data.Calendar.PreventInvitationsWhitelist=_.map(data.Calendar.PreventInvitationsWhitelist,function(value,key){var match=/^(.+)\s<(\S+)>$/.exec(value);return new Preferences.$User({uid:key,cn:match[1],c_email:match[2]})}):data.Calendar.PreventInvitationsWhitelist=[],angular.extend(_this.settings,data),_this.settings})}Preferences.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function($q,$timeout,$log,Settings,Resource,User){return angular.extend(Preferences,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),activeUser:Settings.activeUser(),$User:User}),new Preferences}];try{angular.module("SOGo.PreferencesUI")}catch(e){angular.module("SOGo.PreferencesUI",["SOGo.Common"])}angular.module("SOGo.PreferencesUI").factory("Preferences",Preferences.$factory),Preferences.prototype.ready=function(){return Preferences.$q.all([this.defaultsPromise,this.settingsPromise])},Preferences.prototype.$save=function(){return Preferences.$$resource.save("Preferences",this.$omit(!0)).then(function(data){return data})},Preferences.prototype.$omit=function(deep){var preferences={};angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(deep?preferences[key]=angular.copy(value):preferences[key]=value)});var labels=_.object(_.map(preferences.defaults.SOGoMailLabelsColors,function(value,key){return"_"==key.charAt(0)&&"$"==key.charAt(1)?[key.substring(1),value]:[key,value]}));if(preferences.defaults.SOGoMailLabelsColors=labels,preferences.defaults.Vacation&&preferences.defaults.Vacation.autoReplyEmailAddresses&&(preferences.defaults.Vacation.autoReplyEmailAddresses=preferences.defaults.Vacation.autoReplyEmailAddresses.split(",")),preferences.defaults.Forward&&preferences.defaults.Forward.forwardAddress&&(preferences.defaults.Forward.forwardAddress=preferences.defaults.Forward.forwardAddress.split(",")),preferences.settings.Calendar&&preferences.settings.Calendar.PreventInvitationsWhitelist){var h={};_.each(preferences.settings.Calendar.PreventInvitationsWhitelist,function(user){h[user.uid]=user.$shortFormat()}),preferences.settings.Calendar.PreventInvitationsWhitelist=h}return preferences}}(); +//# sourceMappingURL=Preferences.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.services.js.map b/UI/WebServerResources/js/Preferences.services.js.map new file mode 100644 index 0000000000..49dbf6be47 --- /dev/null +++ b/UI/WebServerResources/js/Preferences.services.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Preferences.services.js","sources":["Preferences/Preferences.service.js"],"names":["Preferences","_this","this","defaults","settings","defaultsPromise","$$resource","fetch","then","data","labels","_","object","map","SOGoMailLabelsColors","value","key","charAt","Vacation","autoReplyEmailAddresses","join","Forward","forwardAddress","angular","extend","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","$User","uid","cn","c_email","$factory","$q","$timeout","$log","Settings","Resource","User","activeUser","module","e","factory","prototype","ready","all","$save","save","$omit","deep","preferences","forEach","copy","substring","split","h","each","user","$shortFormat"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Preferences\n * @constructor\n */\n function Preferences() {\n var _this = this;\n\n this.defaults = {};\n this.settings = {};\n\n this.defaultsPromise = Preferences.$$resource.fetch(\"jsonDefaults\").then(function(data) {\n // We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n var labels = _.object(_.map(data.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '$')\n return ['_' + key, value];\n return [key, value];\n }));\n\n data.SOGoMailLabelsColors = labels;\n\n // We convert our list of autoReplyEmailAddresses/forwardAddress into a string.\n if (data.Vacation && data.Vacation.autoReplyEmailAddresses)\n data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(\",\");\n\n if (data.Forward && data.Forward.forwardAddress)\n data.Forward.forwardAddress = data.Forward.forwardAddress.join(\",\");\n\n angular.extend(_this.defaults, data);\n\n return _this.defaults;\n });\n\n this.settingsPromise = Preferences.$$resource.fetch(\"jsonSettings\").then(function(data) {\n // We convert our PreventInvitationsWhitelist hash into a array of user\n if (data.Calendar && data.Calendar.PreventInvitationsWhitelist)\n data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {\n var match = /^(.+)\\s<(\\S+)>$/.exec(value);\n return new Preferences.$User({uid: key, cn: match[1], c_email: match[2]});\n });\n else\n data.Calendar.PreventInvitationsWhitelist = [];\n\n angular.extend(_this.settings, data);\n\n return _this.settings;\n });\n }\n\n /**\n * @memberof Preferences\n * @desc The factory we'll use to register with Angular\n * @returns the Preferences constructor\n */\n Preferences.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'User', function($q, $timeout, $log, Settings, Resource, User) {\n angular.extend(Preferences, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n activeUser: Settings.activeUser(),\n $User: User\n });\n\n return new Preferences(); // return unique instance\n }];\n\n /* Initialize module if necessary */\n try {\n angular.module('SOGo.PreferencesUI');\n }\n catch(e) {\n angular.module('SOGo.PreferencesUI', ['SOGo.Common']);\n }\n\n /* Factory registration in Angular module */\n angular.module('SOGo.PreferencesUI')\n .factory('Preferences', Preferences.$factory);\n\n /**\n * @function ready\n * @memberof Preferences.prototype\n * @desc Combine promises used to load user's defaults and settings.\n * @return a combined promise\n */\n Preferences.prototype.ready = function() {\n return Preferences.$q.all([this.defaultsPromise, this.settingsPromise]);\n };\n\n /**\n * @function $save\n * @memberof Preferences.prototype\n * @desc Save the preferences to the server.\n */\n Preferences.prototype.$save = function() {\n var _this = this;\n\n return Preferences.$$resource.save(\"Preferences\", this.$omit(true))\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n //_this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $omit\n * @memberof Preferences.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {Boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Preferences instance\n */\n Preferences.prototype.$omit = function(deep) {\n var preferences = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n if (deep)\n preferences[key] = angular.copy(value);\n else\n preferences[key] = value;\n }\n });\n\n // We swap _$key -> $key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n var labels = _.object(_.map(preferences.defaults.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '_' && key.charAt(1) == '$')\n return [key.substring(1), value];\n return [key, value];\n }));\n\n preferences.defaults.SOGoMailLabelsColors = labels;\n\n if (preferences.defaults.Vacation && preferences.defaults.Vacation.autoReplyEmailAddresses)\n preferences.defaults.Vacation.autoReplyEmailAddresses = preferences.defaults.Vacation.autoReplyEmailAddresses.split(\",\");\n\n if (preferences.defaults.Forward && preferences.defaults.Forward.forwardAddress)\n preferences.defaults.Forward.forwardAddress = preferences.defaults.Forward.forwardAddress.split(\",\");\n\n if (preferences.settings.Calendar && preferences.settings.Calendar.PreventInvitationsWhitelist) {\n var h = {};\n _.each(preferences.settings.Calendar.PreventInvitationsWhitelist, function(user) {\n h[user.uid] = user.$shortFormat();\n });\n preferences.settings.Calendar.PreventInvitationsWhitelist = h;\n }\n\n return preferences;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.js b/UI/WebServerResources/js/Scheduler.js new file mode 100644 index 0000000000..08ade441f2 --- /dev/null +++ b/UI/WebServerResources/js/Scheduler.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainFrame",controller:"CalendarsController",controllerAs:"calendars"}},resolve:{stateCalendars:stateCalendars}}).state("calendars.view",{url:"/{view:(?:day|week|month)}/:day",sticky:!0,deepStateRedirect:!0,views:{calendarView:{templateUrl:function($stateParams){return $stateParams.view+"view?day="+$stateParams.day},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:stateEventsBlocks}}),$urlRouterProvider.when("/calendar/day",function(){var now=new Date;return"/calendar/day/"+now.getDayString()}),$urlRouterProvider.when("/calendar/week",function(){var now=new Date;return"/calendar/week/"+now.getDayString()}),$urlRouterProvider.when("/calendar/month",function(){var now=new Date;return"/calendar/month/"+now.getDayString()}),$urlRouterProvider.otherwise("/calendar")}function stateCalendars(Calendar){return Calendar.$calendars||Calendar.$findAll(window.calendarsData)}function stateEventsBlocks($stateParams,Component){return Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate())}function runBlock($rootScope,$location,Preferences){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)}),0===$location.url().length&&Preferences.ready().then(function(){var view=/(.+)view/.exec(Preferences.settings.Calendar.View);view&&$location.replace().url("/calendar/"+view[1])})}angular.module("SOGo.SchedulerUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateCalendars.$inject=["Calendar"],stateEventsBlocks.$inject=["$stateParams","Component"],runBlock.$inject=["$rootScope","$location","Preferences"]}(),function(){"use strict";function CalendarController($scope,$state,$stateParams,$timeout,$interval,$log,focus,Calendar,Component,stateEventsBlocks){function changeView($event){var date=angular.element($event.currentTarget).attr("date");$state.go("calendars.view",{view:$stateParams.view,day:date})}var vm=this;vm.blocks=stateEventsBlocks,vm.changeView=changeView,$scope.$on("calendars:list",function(){Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(data){vm.blocks=data})})}CalendarController.$inject=["$scope","$state","$stateParams","$timeout","$interval","$log","sgFocus","Calendar","Component","stateEventsBlocks"],angular.module("SOGo.SchedulerUI").controller("CalendarController",CalendarController)}(),function(){"use strict";function CalendarListController($scope,$timeout,$state,$mdDialog,encodeUriFilter,Dialog,Preferences,Calendar,Component){function selectComponentType(type,options){(options&&options.reload||vm.componentType!=type)&&(angular.isUndefined(Component["$"+type])&&Component.$filter(type),vm.componentType=type)}function openEvent($event,event){openComponent($event,event,"appointment")}function openTask($event,task){openComponent($event,task,"task")}function openComponent($event,component,type){var templateUrl="UIx"+type.capitalize()+"ViewTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentController",controllerAs:"editor",locals:{stateComponent:component}})}function newComponent($event){var component,type="appointment";"tasks"==vm.componentType&&(type="task"),component=new Component({pid:"personal",type:type});var templateUrl="UIx"+type.capitalize()+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:component}})}function filter(filterpopup){Component.$filter(vm.componentType,{filterpopup:filterpopup})}function filteredBy(filterpopup){return Component["$query"+vm.componentType.capitalize()].filterpopup==filterpopup}function sort(field){Component.$filter(vm.componentType,{sort:field})}function sortedBy(field){return Component["$query"+vm.componentType.capitalize()].sort==field}function cancelSearch(){vm.mode.search=!1,Component.$filter(vm.componentType,{value:""})}var vm=this;vm.component=Component,vm.componentType="events",vm.selectedList=0,vm.selectComponentType=selectComponentType,vm.openEvent=openEvent,vm.openTask=openTask,vm.newComponent=newComponent,vm.filter=filter,vm.filteredBy=filteredBy,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1},Preferences.ready().then(function(){var type="events";"tasksListView"==Preferences.settings.Calendar.SelectedList&&(vm.selectedList=1,type="tasks"),selectComponentType(type,{reload:!0})}),$scope.$on("calendars:list",function(){Component.$filter(vm.componentType,{reload:!0})})}CalendarListController.$inject=["$scope","$timeout","$state","$mdDialog","encodeUriFilter","Dialog","Preferences","Calendar","Component"],angular.module("SOGo.SchedulerUI").controller("CalendarListController",CalendarListController)}(),function(){"use strict";function CalendarsController($scope,$rootScope,$stateParams,$state,$timeout,$q,$mdDialog,$log,focus,encodeUriFilter,Dialog,Settings,Calendar,User,stateCalendars){function newCalendar(ev){Dialog.prompt(l("New calendar"),l("Name of the Calendar")).then(function(name){var calendar=new Calendar({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});Calendar.$add(calendar)})}function addWebCalendar(){Dialog.prompt(l("Subscribe to a web calendar..."),l("URL of the Calendar"),{inputType:"url"}).then(function(url){Calendar.$addWebCalendar(url)})}function confirmDelete(folder){folder.isSubscription?folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",folder.name)).then(function(){folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))})})}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function showProperties(calendar){function PropertiesDialogController($mdDialog,calendar){function saveProperties(){vm.calendar.$save(),calendar.init(vm.calendar.$omit()),$mdDialog.hide()}function close(){$mdDialog.hide()}var vm=this;vm.calendar=new Calendar(calendar.$omit()),vm.saveProperties=saveProperties,vm.close=close}$mdDialog.show({templateUrl:calendar.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:!0,escapeToClose:!0,locals:{calendar:calendar}}),PropertiesDialogController.$inject=["$mdDialog","calendar"]}function share(calendar){calendar.$acl.$users().then(function(){$mdDialog.show({templateUrl:calendar.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:calendar.$acl.users,User:User,folder:calendar}})})}function subscribeToFolder(calendarData){$log.debug("subscribeToFolder "+calendarData.owner+calendarData.name),Calendar.$subscribe(calendarData.owner,calendarData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=Calendar,vm.newCalendar=newCalendar,vm.addWebCalendar=addWebCalendar,vm.confirmDelete=confirmDelete,vm.share=share,vm.showLinks=showLinks,vm.showProperties=showProperties,vm.subscribeToFolder=subscribeToFolder,$scope.$watch(function(){return _.union(_.map(Calendar.$calendars,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$subscriptions,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$webcalendars,function(o){return _.pick(o,["id","active","color"])}))},function(newList,oldList){var ids=_.pluck(_.filter(newList,function(o,i){return!_.isEqual(o,oldList[i])}),"id");ids.length>0&&($log.debug(ids.join(", ")+" changed"),_.each(ids,function(id){var calendar=Calendar.$get(id);calendar.$setActivation().then(function(){$scope.$broadcast("calendars:list")})}))},!0)}CalendarsController.$inject=["$scope","$rootScope","$stateParams","$state","$timeout","$q","$mdDialog","$log","sgFocus","encodeUriFilter","Dialog","sgSettings","Calendar","User","stateCalendars"],angular.module("SOGo.SchedulerUI").controller("CalendarsController",CalendarsController)}(),function(){"use strict";function ComponentController($rootScope,$mdDialog,Calendar,AddressBook,Alarm,stateComponent){function close(){$mdDialog.hide()}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function edit(){var type="vevent"==vm.component.component?"Appointment":"Task";$mdDialog.hide().then(function(){var templateUrl="UIx"+type+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:vm.component}})})}function editAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){vm.component=component,edit()})}function reply(component){var c=component||vm.component;c.$reply().then(function(){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()})}function replyAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){component.reply=vm.component.reply,component.delegatedTo=vm.component.delegatedTo,component.$hasAlarm=vm.component.$hasAlarm,component.alarm=vm.component.alarm,reply(component)})}var component,vm=this;vm.component=stateComponent,vm.close=close,vm.cardFilter=cardFilter,vm.edit=edit,vm.editAllOccurrences=editAllOccurrences,vm.reply=reply,vm.replyAllOccurrences=replyAllOccurrences,angular.isUndefined(vm.component.$futureComponentData)&&(component=Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name,vm.component.c_recurrence_id),component.$futureComponentData.then(function(){vm.component=component,vm.organizer=[vm.component.organizer]}))}function ComponentEditorController($rootScope,$scope,$log,$timeout,$mdDialog,User,Calendar,Component,AddressBook,Card,Alarm,stateComponent){function addAttachUrl(){var i=vm.component.addAttachUrl("");focus("attachUrl_"+i)}function toggleRecurrenceEditor(){vm.showRecurrenceEditor=!vm.showRecurrenceEditor,vm.component.$hasCustomRepeat=vm.showRecurrenceEditor}function toggleAttendeesEditor(){vm.showAttendeesEditor=!vm.showAttendeesEditor}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function addAttendee(card){angular.isString(card)?card.isValidEmail()&&(vm.component.addAttendee(new Card({emails:[{value:card}]})),vm.searchText=""):vm.component.addAttendee(card)}function save(form){form.$valid&&vm.component.$save().then(function(data){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()},function(data,status){$log.debug("failed")})}function cancel(){vm.component.$reset(),vm.component.isNew&&(vm.component=null),$mdDialog.hide()}function getDays(){var days=[];return vm.component.start&&vm.component.end&&(days=vm.component.start.daysUpTo(vm.component.end)),_.map(days,function(date){return{stringWithSeparator:date.stringWithSeparator(),getDayString:date.getDayString()}})}function getHours(){for(var hours=[],i=0;23>=i;i++)hours.push(i.toString());return hours}var vm=this;vm.calendars=Calendar.$calendars,vm.component=stateComponent,vm.categories={},vm.showRecurrenceEditor=vm.component.$hasCustomRepeat,vm.toggleRecurrenceEditor=toggleRecurrenceEditor,vm.showAttendeesEditor=angular.isDefined(vm.component.attendees),vm.toggleAttendeesEditor=toggleAttendeesEditor,vm.cardFilter=cardFilter,vm.addAttendee=addAttendee,vm.addAttachUrl=addAttachUrl,vm.cancel=cancel,vm.save=save,vm.attendeesEditor={startDate:vm.component.startDate,endDate:vm.component.endDate,days:getDays(),hours:getHours()},$scope.$watch("editor.component.startDate",function(newStartDate,oldStartDate){newStartDate&&$timeout(function(){vm.component.start=new Date(newStartDate.substring(0,10)+" "+newStartDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})}),$scope.$watch("editor.component.endDate",function(newEndDate,oldEndDate){newEndDate&&$timeout(function(){vm.component.end=new Date(newEndDate.substring(0,10)+" "+newEndDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})})}ComponentController.$inject=["$rootScope","$mdDialog","Calendar","AddressBook","Alarm","stateComponent"],ComponentEditorController.$inject=["$rootScope","$scope","$log","$timeout","$mdDialog","User","Calendar","Component","AddressBook","Card","Alarm","stateComponent"],angular.module("SOGo.SchedulerUI").controller("ComponentController",ComponentController).controller("ComponentEditorController",ComponentEditorController)}(),function(){"use strict";function sgCalendarDayBlock(){function link(scope,iElement,attrs){var pc=100/scope.block.siblings,left=scope.block.position*pc,right=100-(scope.block.position+1)*pc;100>pc&&(left>0&&(left-=5),right>0&&(right-=5)),iElement.css("left",left+"%"),iElement.css("right",right+"%"),iElement.addClass("starts"+scope.block.start),iElement.addClass("lasts"+scope.block.length),iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:!0,template:['
','
','
',"
",'
{{ block.component.c_title }}',' ',' ',' ',' ',"
","
",'
','
',"
"].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayBlock",sgCalendarDayBlock)}(),function(){"use strict";function sgCalendarDayTable(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[''].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayTable",sgCalendarDayTable)}(),function(){"use strict";function sgCalendarMonthDay(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay"},replace:!0,template:["'].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthDay",sgCalendarMonthDay)}(),function(){"use strict";function sgCalendarMonthEvent(){function link(scope,iElement,attrs){iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock"},replace:!0,template:['
',' {{ block.starthour }} - '," {{ block.component.c_title }}",' ',' ',' ',' '," ",'
','
',"
",""].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthEvent",sgCalendarMonthEvent)}(); +//# sourceMappingURL=Scheduler.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.js.map b/UI/WebServerResources/js/Scheduler.js.map new file mode 100644 index 0000000000..630ba27438 --- /dev/null +++ b/UI/WebServerResources/js/Scheduler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","sticky","deepStateRedirect","calendarView","$stateParams","view","day","stateEventsBlocks","when","now","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","runBlock","$rootScope","$location","Preferences","$on","event","current","previous","rejection","console","error","length","ready","then","exec","settings","View","replace","angular","module","config","run","$inject","CalendarController","$scope","$state","$timeout","$interval","$log","focus","changeView","$event","date","element","currentTarget","attr","go","vm","this","blocks","data","CalendarListController","$mdDialog","encodeUriFilter","Dialog","selectComponentType","type","options","reload","componentType","isUndefined","$filter","openEvent","openComponent","openTask","task","component","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","newComponent","pid","filter","filterpopup","filteredBy","sort","field","sortedBy","cancelSearch","mode","search","value","selectedList","SelectedList","CalendarsController","$q","Settings","User","newCalendar","ev","prompt","l","name","calendar","isEditable","isRemote","owner","UserLogin","$add","addWebCalendar","inputType","$addWebCalendar","confirmDelete","folder","isSubscription","$delete","$broadcast","status","alert","confirm","showLinks","selectedFolder","LinksDialogController","scope","close","hide","id","showProperties","PropertiesDialogController","saveProperties","$save","init","$omit","share","$acl","$users","usersWithACL","users","subscribeToFolder","calendarData","debug","$subscribe","activeUser","service","$watch","_","union","map","o","pick","$subscriptions","$webcalendars","newList","oldList","ids","pluck","i","isEqual","join","each","$get","$setActivation","ComponentController","AddressBook","Alarm","cardFilter","$query","$filterAll","$cards","edit","editAllOccurrences","$getComponent","$futureComponentData","reply","c","$reply","getAlarms","replyAllOccurrences","delegatedTo","$hasAlarm","alarm","c_folder","c_name","c_recurrence_id","organizer","ComponentEditorController","Card","addAttachUrl","toggleRecurrenceEditor","showRecurrenceEditor","$hasCustomRepeat","toggleAttendeesEditor","showAttendeesEditor","addAttendee","card","isString","isValidEmail","emails","searchText","save","form","$valid","cancel","$reset","isNew","getDays","days","start","end","daysUpTo","stringWithSeparator","getHours","hours","push","toString","categories","isDefined","attendees","attendeesEditor","startDate","endDate","newStartDate","oldStartDate","substring","freebusy","updateFreeBusyCoverage","newEndDate","oldEndDate","sgCalendarDayBlock","link","iElement","attrs","pc","block","siblings","left","position","right","css","addClass","restrict","clickBlock","template","directive","sgCalendarDayTable","sgCalendarMonthDay","sgCalendarMonthEvent"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.SchedulerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.SchedulerUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.ContactsUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('calendars', {\n url: '/calendar',\n views: {\n calendars: {\n templateUrl: 'UIxCalMainFrame', // UI/Templates/SchedulerUI/UIxCalMainFrame.wox\n controller: 'CalendarsController',\n controllerAs: 'calendars'\n }\n },\n resolve: {\n stateCalendars: stateCalendars\n }\n })\n .state('calendars.view', {\n url: '/{view:(?:day|week|month)}/:day',\n sticky: true,\n deepStateRedirect: true,\n views: {\n calendarView: {\n templateUrl: function($stateParams) {\n // UI/Templates/SchedulerUI/UIxCalDayView.wox or\n // UI/Templates/SchedulerUI/UIxCalWeekView.wox or\n // UI/Templates/SchedulerUI/UIxCalMonthView.wox\n return $stateParams.view + 'view?day=' + $stateParams.day;\n },\n controller: 'CalendarController',\n controllerAs: 'calendar'\n }\n },\n resolve: {\n stateEventsBlocks: stateEventsBlocks\n }\n });\n\n $urlRouterProvider.when('/calendar/day', function() {\n // If no date is specified, show today\n var now = new Date();\n return '/calendar/day/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/week', function() {\n // If no date is specified, show today's week\n var now = new Date();\n return '/calendar/week/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/month', function() {\n // If no date is specified, show today's month\n var now = new Date();\n return '/calendar/month/' + now.getDayString();\n });\n\n // If none of the above states are matched, use this as the fallback.\n // runBlock will also act as a fallback by looking at user's settings\n $urlRouterProvider.otherwise('/calendar');\n }\n\n /**\n * @ngInject\n */\n stateCalendars.$inject = ['Calendar'];\n function stateCalendars(Calendar) {\n return Calendar.$calendars || Calendar.$findAll(window.calendarsData);\n }\n\n /**\n * @ngInject\n */\n stateEventsBlocks.$inject = ['$stateParams', 'Component'];\n function stateEventsBlocks($stateParams, Component) {\n return Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate());\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope', '$location', 'Preferences'];\n function runBlock($rootScope, $location, Preferences) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n if ($location.url().length === 0) {\n // Restore user's last view\n Preferences.ready().then(function() {\n var view = /(.+)view/.exec(Preferences.settings.Calendar.View);\n if (view) {\n $location.replace().url('/calendar/' + view[1]);\n }\n });\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarController.$inject = ['$scope', '$state', '$stateParams', '$timeout', '$interval', '$log', 'sgFocus', 'Calendar', 'Component', 'stateEventsBlocks'];\n function CalendarController($scope, $state, $stateParams, $timeout, $interval, $log, focus, Calendar, Component, stateEventsBlocks) {\n var vm = this;\n\n vm.blocks = stateEventsBlocks;\n vm.changeView = changeView;\n\n // Refresh current view when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate()).then(function(data) {\n vm.blocks = data;\n });\n });\n\n // Change calendar's view\n function changeView($event) {\n var date = angular.element($event.currentTarget).attr('date');\n $state.go('calendars.view', { view: $stateParams.view, day: date });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI') \n .controller('CalendarController', CalendarController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarListController.$inject = ['$scope', '$timeout', '$state', '$mdDialog', 'encodeUriFilter', 'Dialog', 'Preferences', 'Calendar', 'Component'];\n function CalendarListController($scope, $timeout, $state, $mdDialog, encodeUriFilter, Dialog, Preferences, Calendar, Component) {\n var vm = this;\n\n vm.component = Component;\n vm.componentType = 'events';\n vm.selectedList = 0;\n vm.selectComponentType = selectComponentType;\n vm.openEvent = openEvent;\n vm.openTask = openTask;\n vm.newComponent = newComponent;\n vm.filter = filter;\n vm.filteredBy = filteredBy;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.mode = { search: false };\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n var type = 'events';\n if (Preferences.settings.Calendar.SelectedList == 'tasksListView') {\n vm.selectedList = 1;\n type = 'tasks';\n }\n selectComponentType(type, { reload: true });\n });\n\n // Refresh current list when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$filter(vm.componentType, { reload: true });\n });\n\n // Switch between components tabs\n function selectComponentType(type, options) {\n if (options && options.reload || vm.componentType != type) {\n // TODO: save user settings (Calendar.SelectedList)\n if (angular.isUndefined(Component['$' + type]))\n Component.$filter(type);\n vm.componentType = type;\n }\n }\n\n function openEvent($event, event) {\n openComponent($event, event, 'appointment');\n }\n\n function openTask($event, task) {\n openComponent($event, task, 'task');\n }\n\n function openComponent($event, component, type) {\n // UI/Templates/SchedulerUI/UIxAppointmentViewTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskViewTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'ViewTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function newComponent($event) {\n var type = 'appointment', component;\n\n if (vm.componentType == 'tasks')\n type = 'task';\n component = new Component({ pid: 'personal', type: type });\n\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function filter(filterpopup) {\n Component.$filter(vm.componentType, { filterpopup: filterpopup });\n }\n\n function filteredBy(filterpopup) {\n return Component['$query' + vm.componentType.capitalize()].filterpopup == filterpopup;\n }\n\n function sort(field) {\n Component.$filter(vm.componentType, { sort: field });\n }\n\n function sortedBy(field) {\n return Component['$query' + vm.componentType.capitalize()].sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n Component.$filter(vm.componentType, { value: '' });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarListController', CalendarListController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarsController.$inject = ['$scope', '$rootScope', '$stateParams', '$state', '$timeout', '$q', '$mdDialog', '$log', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Calendar', 'User', 'stateCalendars'];\n function CalendarsController($scope, $rootScope, $stateParams, $state, $timeout, $q, $mdDialog, $log, focus, encodeUriFilter, Dialog, Settings, Calendar, User, stateCalendars) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = Calendar;\n vm.newCalendar = newCalendar;\n vm.addWebCalendar = addWebCalendar;\n vm.confirmDelete = confirmDelete;\n vm.share = share;\n vm.showLinks = showLinks;\n vm.showProperties = showProperties;\n vm.subscribeToFolder = subscribeToFolder;\n\n // Dispatch the event named 'calendars:list' when a calendar is activated or deactivated or\n // when the color of a calendar is changed\n $scope.$watch(\n function() {\n return _.union(\n _.map(Calendar.$calendars, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$subscriptions, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$webcalendars, function(o) { return _.pick(o, ['id', 'active', 'color']); })\n );\n },\n function(newList, oldList) {\n // Identify which calendar has changed\n var ids = _.pluck(_.filter(newList, function(o, i) { return !_.isEqual(o, oldList[i]); }), 'id');\n if (ids.length > 0) {\n $log.debug(ids.join(', ') + ' changed');\n _.each(ids, function(id) {\n var calendar = Calendar.$get(id);\n calendar.$setActivation().then(function() {\n $scope.$broadcast('calendars:list');\n });\n });\n }\n },\n true // compare for object equality\n );\n\n function newCalendar(ev) {\n Dialog.prompt(l('New calendar'), l('Name of the Calendar'))\n .then(function(name) {\n var calendar = new Calendar(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n Calendar.$add(calendar);\n });\n }\n\n function addWebCalendar() {\n Dialog.prompt(l('Subscribe to a web calendar...'), l('URL of the Calendar'), {inputType: 'url'})\n .then(function(url) {\n Calendar.$addWebCalendar(url);\n });\n }\n\n function confirmDelete(folder) {\n if (folder.isSubscription) {\n // Unsubscribe without confirmation\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?', folder.name))\n .then(function() {\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function showProperties(calendar) {\n $mdDialog.show({\n templateUrl: calendar.id + '/properties',\n controller: PropertiesDialogController,\n controllerAs: 'properties',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n calendar: calendar\n }\n });\n \n /**\n * @ngInject\n */\n PropertiesDialogController.$inject = ['$mdDialog', 'calendar'];\n function PropertiesDialogController($mdDialog, calendar) {\n var vm = this;\n\n vm.calendar = new Calendar(calendar.$omit());\n vm.saveProperties = saveProperties;\n vm.close = close;\n\n function saveProperties() {\n vm.calendar.$save();\n // Refresh list instance\n calendar.init(vm.calendar.$omit());\n $mdDialog.hide();\n }\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(calendar) {\n calendar.$acl.$users().then(function() {\n $mdDialog.show({\n templateUrl: calendar.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: calendar.$acl.users,\n User: User,\n folder: calendar\n }\n });\n });\n }\n\n // Callback of sgSubscribe directive\n function subscribeToFolder(calendarData) {\n $log.debug('subscribeToFolder ' + calendarData.owner + calendarData.name);\n Calendar.$subscribe(calendarData.owner, calendarData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarsController', CalendarsController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n ComponentController.$inject = ['$rootScope', '$mdDialog', 'Calendar', 'AddressBook', 'Alarm', 'stateComponent'];\n function ComponentController($rootScope, $mdDialog, Calendar, AddressBook, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.component = stateComponent;\n vm.close = close;\n vm.cardFilter = cardFilter;\n vm.edit = edit;\n vm.editAllOccurrences = editAllOccurrences;\n vm.reply = reply;\n vm.replyAllOccurrences = replyAllOccurrences;\n\n // Load all attributes of component\n if (angular.isUndefined(vm.component.$futureComponentData)) {\n component = Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name, vm.component.c_recurrence_id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n vm.organizer = [vm.component.organizer];\n });\n }\n\n function close() {\n $mdDialog.hide();\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function edit() {\n var type = (vm.component.component == 'vevent')? 'Appointment':'Task';\n $mdDialog.hide().then(function() {\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: vm.component\n }\n });\n });\n }\n\n function editAllOccurrences() {\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n edit();\n });\n }\n\n function reply(component) {\n var c = component || vm.component;\n\n c.$reply().then(function() {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n });\n }\n\n function replyAllOccurrences() {\n // Retrieve master event\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n // Propagate the participant status and alarm to the master event\n component.reply = vm.component.reply;\n component.delegatedTo = vm.component.delegatedTo;\n component.$hasAlarm = vm.component.$hasAlarm;\n component.alarm = vm.component.alarm;\n // Send reply to the server\n reply(component);\n });\n }\n }\n\n /**\n * @ngInject\n */\n ComponentEditorController.$inject = ['$rootScope', '$scope', '$log', '$timeout', '$mdDialog', 'User', 'Calendar', 'Component', 'AddressBook', 'Card', 'Alarm', 'stateComponent'];\n function ComponentEditorController($rootScope, $scope, $log, $timeout, $mdDialog, User, Calendar, Component, AddressBook, Card, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.calendars = Calendar.$calendars;\n vm.component = stateComponent;\n vm.categories = {};\n vm.showRecurrenceEditor = vm.component.$hasCustomRepeat;\n vm.toggleRecurrenceEditor = toggleRecurrenceEditor;\n vm.showAttendeesEditor = angular.isDefined(vm.component.attendees);\n vm.toggleAttendeesEditor = toggleAttendeesEditor;\n vm.cardFilter = cardFilter;\n vm.addAttendee = addAttendee;\n vm.addAttachUrl = addAttachUrl;\n vm.cancel = cancel;\n vm.save = save;\n vm.attendeesEditor = {\n startDate: vm.component.startDate,\n endDate: vm.component.endDate,\n days: getDays(),\n hours: getHours()\n };\n\n $scope.$watch('editor.component.startDate', function(newStartDate, oldStartDate) {\n if (newStartDate) {\n $timeout(function() {\n vm.component.start = new Date(newStartDate.substring(0,10) + ' ' + newStartDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n $scope.$watch('editor.component.endDate', function(newEndDate, oldEndDate) {\n if (newEndDate) {\n $timeout(function() {\n vm.component.end = new Date(newEndDate.substring(0,10) + ' ' + newEndDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n function addAttachUrl() {\n var i = vm.component.addAttachUrl('');\n focus('attachUrl_' + i);\n }\n\n function toggleRecurrenceEditor() {\n vm.showRecurrenceEditor = !vm.showRecurrenceEditor;\n vm.component.$hasCustomRepeat = vm.showRecurrenceEditor;\n }\n\n function toggleAttendeesEditor() {\n vm.showAttendeesEditor = !vm.showAttendeesEditor;\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function addAttendee(card) {\n if (angular.isString(card)) {\n // User pressed \"Enter\" in search field, adding a non-matching card\n if (card.isValidEmail()) {\n vm.component.addAttendee(new Card({ emails: [{ value: card }] }));\n vm.searchText = '';\n }\n }\n else {\n vm.component.addAttendee(card);\n }\n }\n\n function save(form) {\n if (form.$valid) {\n vm.component.$save()\n .then(function(data) {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n }, function(data, status) {\n $log.debug('failed');\n });\n }\n }\n\n function cancel() {\n vm.component.$reset();\n if (vm.component.isNew) {\n // Cancelling the creation of a component\n vm.component = null;\n }\n $mdDialog.hide();\n }\n\n function getDays() {\n var days = [];\n\n if (vm.component.start && vm.component.end)\n days = vm.component.start.daysUpTo(vm.component.end);\n\n return _.map(days, function(date) {\n return { stringWithSeparator: date.stringWithSeparator(),\n getDayString: date.getDayString() };\n });\n }\n\n function getHours() {\n var hours = [];\n for (var i = 0; i <= 23; i++) {\n //hours.push(Component.timeFormat.formatTime(i, 0));\n hours.push(i.toString());\n }\n return hours;\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('ComponentController', ComponentController)\n .controller('ComponentEditorController', ComponentEditorController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayBlock - An event block to be displayed in a week\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: clickEvent (the event that triggered the mouse click),\n * and clickComponent (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayBlock() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock',\n clickBlock: '&sgClick'\n },\n replace: true,\n template: [\n '
',\n '
',\n '
',\n '
',\n '
{{ block.component.c_title }}',\n ' ',\n // Component has an alarm\n ' ',\n // Component is confidential\n ' ',\n // Component is private\n ' ',\n '
',\n '
',\n '
',\n '
',\n '
'\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n // Compute overlapping (5%)\n var pc = 100 / scope.block.siblings,\n left = scope.block.position * pc,\n right = 100 - (scope.block.position + 1) * pc;\n\n if (pc < 100) {\n if (left > 0)\n left -= 5;\n if (right > 0)\n right -= 5;\n }\n\n // Set position\n iElement.css('left', left + '%');\n iElement.css('right', right + '%');\n iElement.addClass('starts' + scope.block.start);\n iElement.addClass('lasts' + scope.block.length);\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayBlock', sgCalendarDayBlock);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayTable - Build list of blocks for a specific day\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: event (the event that triggered the mouse click),\n * and component (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayTable() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay',\n clickBlock: '&sgClick'\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayTable', sgCalendarDayTable);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthDay - Build list of blocks for a specific day in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthDay() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay'\n },\n replace: true,\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthDay', sgCalendarMonthDay);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthEvent - An event block to be displayed in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthEvent() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock'\n },\n replace: true,\n template: [\n '
',\n ' {{ block.starthour }} - ',\n ' {{ block.component.c_title }}',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n '
',\n ''\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthEvent', sgCalendarMonthEvent);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js b/UI/WebServerResources/js/Scheduler.services.js new file mode 100644 index 0000000000..7238101075 --- /dev/null +++ b/UI/WebServerResources/js/Scheduler.services.js @@ -0,0 +1,2 @@ +!function(){"use strict";function Calendar(futureCalendarData){if(this.init(futureCalendarData),this.name&&!this.id){var newCalendarData=Calendar.$$resource.create("createFolder",this.name);angular.extend(this,newCalendarData)}this.id&&(this.$acl=new Calendar.$$Acl("Calendar/"+this.id))}Calendar.$factory=["$q","$timeout","$log","sgSettings","Resource","Component","Acl",function($q,$timeout,$log,Settings,Resource,Component,Acl){return angular.extend(Calendar,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$Component:Component,$$Acl:Acl,activeUser:Settings.activeUser()}),Calendar}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Calendar",Calendar.$factory),Calendar.$add=function(calendar){var list,sibling,i;list=calendar.isWebCalendar?this.$webcalendars:calendar.isSubscription?this.$subscriptions:this.$calendars,sibling=_.find(list,function(o){return"personal"!=o.id&&1===o.name.localeCompare(calendar.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,calendar)},Calendar.$findAll=function(data){var _this=this;return data&&(this.$calendars=[],this.$subscriptions=[],this.$webcalendars=[],angular.forEach(data,function(o,i){var calendar=new Calendar(o);calendar.isWebCalendar?_this.$webcalendars.push(calendar):calendar.isSubscription?_this.$subscriptions.push(calendar):_this.$calendars.push(calendar)})),this.$calendars},Calendar.$get=function(id){var calendar;return calendar=_.find(Calendar.$calendars,function(o){return o.id==id}),calendar||(calendar=_.find(Calendar.$subscriptions,function(o){return o.id==id})),calendar||(calendar=_.find(Calendar.$webcalendars,function(o){return o.id==id})),calendar},Calendar.$subscribe=function(uid,path){var _this=this;return Calendar.$$resource.userResource(uid).fetch(path,"subscribe").then(function(calendarData){var calendar=new Calendar(calendarData);return _.find(_this.$subscriptions,function(o){return o.id==calendarData.id})||Calendar.$add(calendar),calendar})},Calendar.$addWebCalendar=function(url){var _this=this,d=Calendar.$q.defer();return _.find(_this.$webcalendars,function(o){return o.urls.webCalendarURL==url})?d.reject():Calendar.$$resource.post(null,"addWebCalendar",{url:url}).then(function(calendarData){angular.extend(calendarData,{isWebCalendar:!0,isEditable:!0,isRemote:!1,owner:Calendar.activeUser.login,urls:{webCalendarURL:url}});var calendar=new Calendar(calendarData);Calendar.$add(calendar),Calendar.$$resource.fetch(calendar.id,"reload").then(function(data){Calendar.$log.debug(JSON.stringify(data,void 0,2))}),d.resolve()},function(){d.reject()}),d.promise},Calendar.prototype.init=function(data){angular.extend(this,data),this.isOwned=Calendar.activeUser.isSuperUser||this.owner==Calendar.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=Calendar.activeUser.login},Calendar.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+this.id},Calendar.prototype.$rename=function(name){var i=_.indexOf(_.pluck(Calendar.$calendars,"id"),this.id);return this.name=name,Calendar.$calendars.splice(i,1),Calendar.$add(this),this.$save()},Calendar.prototype.$delete=function(){var list,promise,_this=this,d=Calendar.$q.defer();return this.isSubscription?(promise=Calendar.$$resource.fetch(this.id,"unsubscribe"),list=Calendar.$subscriptions):(promise=Calendar.$$resource.remove(this.id),list=this.isWebCalendar?Calendar.$webcalendars:Calendar.$calendars),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},Calendar.prototype.$save=function(){return Calendar.$$resource.save(this.id,this.$omit()).then(function(data){return data})},Calendar.prototype.$setActivation=function(){return Calendar.$$resource.fetch(this.id,(this.active?"":"de")+"activateFolder")},Calendar.prototype.$getComponent=function(componentId,recurrenceId){return Calendar.$Component.$find(this.id,componentId,recurrenceId)},Calendar.prototype.$omit=function(){var calendar={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(calendar[key]=value)}),calendar}}(),function(){"use strict";function Component(futureComponentData){if("function"!=typeof futureComponentData.then){if(this.init(futureComponentData),this.pid&&!this.id){var newComponentData=Component.$$resource.newguid(this.pid);this.$unwrap(newComponentData),this.isNew=!0}}else this.$unwrap(futureComponentData)}Component.$factory=["$q","$timeout","$log","sgSettings","Preferences","Gravatar","Resource",function($q,$timeout,$log,Settings,Preferences,Gravatar,Resource){return angular.extend(Component,{$q:$q,$timeout:$timeout,$log:$log,$Preferences:Preferences,$gravatar:Gravatar,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),timeFormat:"%H:%M",$query:{value:"",search:"title_Category_Location"},$queryEvents:{sort:"start",asc:1,filterpopup:"view_next7"},$queryTasks:{sort:"status",asc:1,filterpopup:"view_next7"}}),Preferences.ready().then(function(){Component.$queryEvents.filterpopup=Preferences.settings.CalendarDefaultFilter,Component.$queryTasks.show_completed=parseInt(Preferences.settings.ShowCompletedTasks),Component.$categories=Preferences.defaults.SOGoCalendarCategoriesColors,Preferences.defaults.SOGoTimeFormat&&(Component.timeFormat=Preferences.defaults.SOGoTimeFormat)}),Component}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Component",Component.$factory),Component.$filter=function(type,options){var _this=this,now=new Date,day=now.getDate(),month=now.getMonth()+1,year=now.getFullYear(),queryKey="$query"+type.capitalize(),params={day:""+year+(10>month?"0":"")+month+(10>day?"0":"")+day};return this.$Preferences.ready().then(function(){var futureComponentData,otherType,dirty=!1;return angular.extend(_this.$query,params),options&&_.each(_.keys(options),function(key){dirty|=_this.$query[key]&&options[key]!=Component.$query[key],"reload"==key&&options[key]?dirty=!0:angular.isDefined(_this.$query[key])?_this.$query[key]=options[key]:_this[queryKey][key]=options[key]}),futureComponentData=_this.$$resource.fetch(null,type+"list",angular.extend(_this[queryKey],_this.$query)),otherType="tasks"==type?"$events":"$tasks",dirty&&(delete Component[otherType],Component.$log.debug("force reload of "+otherType)),_this.$unwrapCollection(type,futureComponentData)})},Component.$find=function(calendarId,componentId,occurrenceId){var futureComponentData,path=[calendarId,componentId];return occurrenceId&&path.push(occurrenceId),futureComponentData=this.$$resource.fetch(path.join("/"),"view"),new Component(futureComponentData)},Component.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Component.$categories),function(category){return-1!=category.search(re)})},Component.$eventsBlocksForView=function(view,date){var viewAction,startDate,endDate;return"day"==view?(viewAction="dayView",startDate=endDate=date):"week"==view?(viewAction="weekView",startDate=date.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.addDays(6)):"month"==view&&(viewAction="monthView",startDate=date,startDate.setDate(1),startDate=startDate.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.setMonth(endDate.getMonth()+1),endDate.addDays(-1),endDate=endDate.endOfWeek()),this.$eventsBlocks(viewAction,startDate,endDate)},Component.$eventsBlocks=function(view,startDate,endDate){var params,futureComponentData,i,deferred=Component.$q.defer();return params={view:view.toLowerCase(),sd:startDate.getDayString(),ed:endDate.getDayString()},Component.$log.debug("eventsblocks "+JSON.stringify(params,void 0,2)),futureComponentData=this.$$resource.fetch(null,"eventsblocks",params),futureComponentData.then(function(data){Component.$timeout(function(){var components=[],blocks={};for(_.reduce(data.events,function(objects,eventData,i){var componentData=_.object(data.eventsFields,eventData),start=new Date(1e3*componentData.c_startdate);return componentData.hour=start.getHourString(),objects.push(new Component(componentData)),objects},components),_.each(_.flatten(data.blocks),function(block){block.component=components[block.nbr]}),i=0;i1||this.repeat.days&&this.repeat.days.length>0||this.repeat.monthdays&&this.repeat.monthdays.length>0||this.repeat.months&&this.repeat.months.length>0);return b},Component.prototype.isEditable=function(){return!this.occurrenceId&&!this.isReadOnly},Component.prototype.isEditableOccurrence=function(){return this.occurrenceId&&!this.isReadOnly},Component.prototype.isInvitation=function(){return!this.occurrenceId&&this.userHasRSVP},Component.prototype.isInvitationOccurrence=function(){return this.occurrenceId&&this.userHasRSVP},Component.prototype.isReadOnly=function(){return this.isReadOnly&&!this.userHasRSVP},Component.prototype.enablePercentComplete=function(){return this.component="not-specified"!=this.status&&"cancelled"!=this.status},Component.prototype.coversFreeBusy=function(day,hour,quarter){var b=angular.isDefined(this.freebusy[day])&&angular.isDefined(this.freebusy[day][hour])&&1==this.freebusy[day][hour][quarter];return b},Component.prototype.updateFreeBusyCoverage=function(){var _this=this,freebusy={};if(this.start&&this.end){var roundedStart=new Date(this.start.getTime()),roundedEnd=new Date(this.end.getTime()),startQuarter=parseInt(roundedStart.getMinutes()/15+.5),endQuarter=parseInt(roundedEnd.getMinutes()/15+.5);return roundedStart.setMinutes(15*startQuarter),roundedEnd.setMinutes(15*endQuarter),_.each(roundedStart.daysUpTo(roundedEnd),function(date,index){var hourKey,currentDay=date.getDate(),dayKey=date.getDayString();if(dayKey==_this.start.getDayString())for(hourKey=date.getHours().toString(),freebusy[dayKey]={},freebusy[dayKey][hourKey]=[];startQuarter>0;)freebusy[dayKey][hourKey].push(0),startQuarter--;else date=date.beginOfDay(),freebusy[dayKey]={};for(;date.getTime()<_this.end.getTime()&&date.getDate()==currentDay;)hourKey=date.getHours().toString(),angular.isUndefined(freebusy[dayKey][hourKey])&&(freebusy[dayKey][hourKey]=[]),freebusy[dayKey][hourKey].push(1),date.addMinutes(15)}),freebusy}},Component.prototype.updateFreeBusy=function(attendee){var params,url,days;attendee.uid&&(params={sday:this.start.getDayString(),eday:this.end.getDayString()},url=["..","..",attendee.uid,"freebusy.ifb"],days=_.map(this.start.daysUpTo(this.end),function(day){return day.getDayString()}),angular.isUndefined(attendee.freebusy)&&(attendee.freebusy={}),Component.$$resource.fetch(url.join("/"),"ajaxRead",params).then(function(data){_.each(days,function(day){var hour;angular.isUndefined(attendee.freebusy[day])&&(attendee.freebusy[day]={}),angular.isUndefined(data[day])&&(data[day]={});for(var i=0;23>=i;i++)hour=i.toString(),data[day][hour]?attendee.freebusy[day][hour]=[data[day][hour][0],data[day][hour][15],data[day][hour][30],data[day][hour][45]]:attendee.freebusy[day][hour]=[0,0,0,0]})}))},Component.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+(this.destinationCalendar||this.c_folder)},Component.prototype.addAttendee=function(card){var attendee;card&&(attendee={name:card.c_cn,email:card.$preferredEmail(),role:"req-participant",status:"needs-action",uid:card.c_uid},_.find(this.attendees,function(o){return o.email==attendee.email})||(attendee.image=Component.$gravatar(attendee.email,32),this.attendees?this.attendees.push(attendee):this.attendees=[attendee],this.updateFreeBusy(attendee)))},Component.prototype.hasAttendee=function(card){var attendee=_.find(this.attendees,function(attendee){return _.find(card.emails,function(email){return email.value==attendee.email})});return angular.isDefined(attendee)},Component.prototype.canRemindAttendeesByEmail=function(){return"email"==this.alarm.action&&!this.isReadOnly&&this.attendees&&this.attendees.length>0},Component.prototype.addAttachUrl=function(attachUrl){if(angular.isUndefined(this.attachUrls))this.attachUrls=[{value:attachUrl}];else{for(var i=0;i-1&&this.attachUrls.length>index&&this.attachUrls.splice(index,1)},Component.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit(!0)},Component.prototype.$reply=function(){var data,_this=this,path=[this.pid,this.id];return this.occurrenceId&&path.push(this.occurrenceId),data={reply:this.reply,delegatedTo:this.delegatedTo,alarm:this.$hasAlarm?this.alarm:{}},Component.$$resource.save(path.join("/"),data,{action:"rsvpAppointment"}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$save=function(){var options,_this=this,path=[this.pid,this.id];return this.isNew&&(options={action:"saveAs"+this.type.capitalize()}),this.occurrenceId&&path.push(this.occurrenceId),Component.$$resource.save(path.join("/"),this.$omit(),options).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$unwrap=function(futureComponentData){var _this=this;this.$futureComponentData=futureComponentData,this.$futureComponentData.then(function(data){_this.init(data),_this.$shadowData=_this.$omit()},function(data){angular.extend(_this,data),_this.isError=!0,Component.$log.error(_this.error)})},Component.prototype.$omit=function(){function formatTime(dateString){var date=new Date(dateString.substring(0,10)+" "+dateString.substring(11,16)),hours=date.getHours(),minutes=date.getMinutes();return 10>hours&&(hours="0"+hours),10>minutes&&(minutes="0"+minutes),hours+":"+minutes}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startTime=component.startDate?formatTime(component.startDate):"",component.endTime=component.endDate?formatTime(component.endDate):"",this.$hasCustomRepeat?"monthly"==this.repeat.frequency&&this.repeat.month.type&&"byday"==this.repeat.month.type||"yearly"==this.repeat.frequency&&this.repeat.year.byday?(delete component.repeat.monthdays,component.repeat.days=[{day:this.repeat.month.day,occurrence:this.repeat.month.occurrence.toString()}]):this.repeat.month.type&&delete component.repeat.days:this.repeat.frequency&&(component.repeat={frequency:this.repeat.frequency}),this.repeat.frequency?"until"==this.repeat.end&&this.repeat.until?component.repeat.until=this.repeat.until.stringWithSeparator("-"):"count"==this.repeat.end&&this.repeat.count?component.repeat.count=this.repeat.count:(delete component.repeat.until,delete component.repeat.count):delete component.repeat,this.$hasAlarm?!this.alarm.action||"email"!=this.alarm.action||this.attendees&&this.attendees.length>0||(this.alarm.attendees=0,this.alarm.organizer=1):component.alarm={},component}}(); +//# sourceMappingURL=Scheduler.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js.map b/UI/WebServerResources/js/Scheduler.services.js.map new file mode 100644 index 0000000000..cf28428713 --- /dev/null +++ b/UI/WebServerResources/js/Scheduler.services.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Calendar.service.js","Scheduler/Component.service.js"],"names":["Calendar","futureCalendarData","this","init","name","id","newCalendarData","$$resource","create","angular","extend","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Component","Acl","activeUser","$Component","module","e","factory","$add","calendar","list","sibling","i","isWebCalendar","$webcalendars","isSubscription","$subscriptions","$calendars","_","find","o","localeCompare","indexOf","pluck","splice","$findAll","data","_this","forEach","push","$get","$subscribe","uid","path","userResource","fetch","then","calendarData","$addWebCalendar","url","d","defer","urls","webCalendarURL","reject","post","isEditable","isRemote","owner","login","debug","JSON","stringify","undefined","resolve","promise","prototype","isOwned","isSuperUser","getClassName","base","isUndefined","$rename","$save","$delete","remove","status","save","$omit","$setActivation","active","$getComponent","componentId","recurrenceId","$find","value","key","futureComponentData","pid","newComponentData","newguid","$unwrap","isNew","Preferences","Gravatar","$Preferences","$gravatar","baseURL","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","ready","settings","CalendarDefaultFilter","show_completed","parseInt","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","isDefined","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","filter","category","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","components","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","component","nbr","length","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","count","until","asDate","$hasCustomRepeat","hasCustomRepeat","units","M","H","D","W","match","exec","SOGoCalendarDefaultReminder","$hasAlarm","destinationCalendar","organizer","email","$image","freebusy","updateFreeBusyCoverage","attendees","attendee","image","updateFreeBusy","b","isReadOnly","isEditableOccurrence","isInvitation","userHasRSVP","isInvitationOccurrence","enablePercentComplete","coversFreeBusy","quarter","roundedStart","roundedEnd","startQuarter","getMinutes","endQuarter","setMinutes","daysUpTo","index","hourKey","currentDay","dayKey","getHours","beginOfDay","addMinutes","sday","eday","map","c_folder","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","dateString","hours","minutes","copy","startTime","endTime","stringWithSeparator"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Calendar\n * @constructor\n * @param {object} futureCalendarData - either an object literal or a promise\n */\n function Calendar(futureCalendarData) {\n // Data is immediately available\n this.init(futureCalendarData);\n if (this.name && !this.id) {\n // Create a new calendar on the server\n var newCalendarData = Calendar.$$resource.create('createFolder', this.name);\n angular.extend(this, newCalendarData);\n }\n if (this.id) {\n this.$acl = new Calendar.$$Acl('Calendar/' + this.id);\n }\n }\n\n /**\n * @memberof Calendar\n * @desc The factory we'll use to register with Angular\n * @returns the Calendar constructor\n */\n Calendar.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Component', 'Acl', function($q, $timeout, $log, Settings, Resource, Component, Acl) {\n angular.extend(Calendar, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $Component: Component,\n $$Acl: Acl,\n activeUser: Settings.activeUser()\n });\n\n return Calendar; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Calendar in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Calendar', Calendar.$factory);\n\n /**\n * @memberof Calendar\n * @desc Add a new calendar to the static list of calendars\n * @param {Calendar} calendar - an Calendar object instance\n */\n Calendar.$add = function(calendar) {\n // Insert new calendar at proper index\n var list, sibling, i;\n\n if (calendar.isWebCalendar)\n list = this.$webcalendars;\n else if (calendar.isSubscription)\n list = this.$subscriptions;\n else\n list = this.$calendars;\n\n sibling = _.find(list, function(o) {\n return (o.id != 'personal' &&\n o.name.localeCompare(calendar.name) === 1);\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, calendar);\n };\n\n /**\n * @memberof Calendar\n * @desc Set or get the list of calendars. Will instanciate a new Calendar object for each item.\n * @param {object[]} [data] - the metadata of the calendars\n * @returns the list of calendars\n */\n Calendar.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$calendars = [];\n this.$subscriptions = [];\n this.$webcalendars = [];\n // Instanciate Calendar objects\n angular.forEach(data, function(o, i) {\n var calendar = new Calendar(o);\n if (calendar.isWebCalendar)\n _this.$webcalendars.push(calendar);\n else if (calendar.isSubscription)\n _this.$subscriptions.push(calendar);\n else\n _this.$calendars.push(calendar);\n });\n }\n return this.$calendars;\n };\n\n /**\n * @memberof Calendar\n * @desc Find a calendar among local instances (personal calendars, subscriptions and Web calendars).\n * @param {string} id - the calendar ID\n * @returns an object literal of the matching Calendar instance\n */\n Calendar.$get = function(id) {\n var calendar;\n\n calendar = _.find(Calendar.$calendars, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$subscriptions, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$webcalendars, function(o) { return o.id == id; });\n\n return calendar;\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to another user's calendar and add it to the list of calendars.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n Calendar.$subscribe = function(uid, path) {\n var _this = this;\n return Calendar.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(calendarData) {\n var calendar = new Calendar(calendarData);\n if (!_.find(_this.$subscriptions, function(o) {\n return o.id == calendarData.id;\n })) {\n Calendar.$add(calendar);\n }\n return calendar;\n });\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to a remote Web calendar\n * @param {string} url - URL of .ics file\n * @returns a promise of the HTTP query result\n */\n Calendar.$addWebCalendar = function(url) {\n var _this = this,\n d = Calendar.$q.defer();\n\n if (_.find(_this.$webcalendars, function(o) {\n return o.urls.webCalendarURL == url;\n })) {\n // Already subscribed\n d.reject();\n }\n else {\n Calendar.$$resource.post(null, 'addWebCalendar', { url: url }).then(function(calendarData) {\n angular.extend(calendarData, {\n isWebCalendar: true,\n isEditable: true,\n isRemote: false,\n owner: Calendar.activeUser.login,\n urls: { webCalendarURL: url }\n });\n var calendar = new Calendar(calendarData);\n Calendar.$add(calendar);\n Calendar.$$resource.fetch(calendar.id, 'reload').then(function(data) {\n // TODO: show a toast of the reload status\n Calendar.$log.debug(JSON.stringify(data, undefined, 2));\n });\n d.resolve();\n }, function() {\n d.reject();\n });\n }\n\n return d.promise;\n };\n\n /**\n * @function init\n * @memberof Calendar.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of calendar\n */\n Calendar.prototype.init = function(data) {\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = Calendar.activeUser.isSuperUser || this.owner == Calendar.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != Calendar.activeUser.login;\n };\n\n /**\n * @function getClassName\n * @memberof Calendar.prototype\n * @desc Return the calendar CSS class name based on its ID.\n * @returns a string representing the foreground CSS class name\n */\n Calendar.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + this.id;\n };\n\n /**\n * @function $rename\n * @memberof Calendar.prototype\n * @desc Rename the calendar and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(Calendar.$calendars, 'id'), this.id);\n this.name = name;\n Calendar.$calendars.splice(i, 1);\n Calendar.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof Calendar.prototype\n * @desc Delete the calendar from the server and the static list of calendars.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$delete = function() {\n var _this = this,\n d = Calendar.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = Calendar.$$resource.fetch(this.id, 'unsubscribe');\n list = Calendar.$subscriptions;\n }\n else {\n promise = Calendar.$$resource.remove(this.id);\n if (this.isWebCalendar)\n list = Calendar.$webcalendars;\n else\n list = Calendar.$calendars;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $save\n * @memberof Calendar.prototype\n * @desc Save the calendar properties to the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$save = function() {\n return Calendar.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $setActivation\n * @memberof Calendar.prototype\n * @desc Either activate or deactivate the calendar.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$setActivation = function() {\n return Calendar.$$resource.fetch(this.id, (this.active?'':'de') + 'activateFolder');\n };\n\n /**\n * @function $getComponent\n * @memberof Calendar.prototype\n * @desc Fetch a component attributes from the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$getComponent = function(componentId, recurrenceId) {\n return Calendar.$Component.$find(this.id, componentId, recurrenceId);\n };\n\n /**\n * @function $omit\n * @memberof Calendar.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Calendar instance\n */\n Calendar.prototype.$omit = function() {\n var calendar = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key[0] != '$') {\n calendar[key] = value;\n }\n });\n return calendar;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Component\n * @constructor\n * @param {object} futureComponentData - either an object literal or a promise\n */\n function Component(futureComponentData) {\n // Data is immediately available\n if (typeof futureComponentData.then !== 'function') {\n this.init(futureComponentData);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new component;\n // Get UID from the server.\n var newComponentData = Component.$$resource.newguid(this.pid);\n this.$unwrap(newComponentData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureComponentData);\n }\n }\n\n /**\n * @memberof Component\n * @desc The factory we'll use to register with Angular\n * @returns the Component constructor\n */\n Component.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Preferences', 'Gravatar', 'Resource', function($q, $timeout, $log, Settings, Preferences, Gravatar, Resource) {\n angular.extend(Component, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Preferences: Preferences,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n timeFormat: \"%H:%M\",\n // Filter parameters common to events and tasks\n $query: { value: '', search: 'title_Category_Location' },\n // Filter paramaters specific to events\n $queryEvents: { sort: 'start', asc: 1, filterpopup: 'view_next7' },\n // Filter parameters specific to tasks\n $queryTasks: { sort: 'status', asc: 1, filterpopup: 'view_next7' } //'view_incomplete' }\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n Component.$queryEvents.filterpopup = Preferences.settings.CalendarDefaultFilter;\n Component.$queryTasks.show_completed = parseInt(Preferences.settings.ShowCompletedTasks);\n // Initialize categories from user's defaults\n Component.$categories = Preferences.defaults.SOGoCalendarCategoriesColors;\n // Initialize time format from user's defaults\n if (Preferences.defaults.SOGoTimeFormat) {\n Component.timeFormat = Preferences.defaults.SOGoTimeFormat;\n }\n });\n\n return Component; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Component in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Component', Component.$factory);\n\n /**\n * @function $filter\n * @memberof Component.prototype\n * @desc Search for components matching some criterias\n * @param {string} type - either 'events' or 'tasks'\n * @param {object} [options] - additional options to the query\n * @returns a collection of Components instances\n */\n Component.$filter = function(type, options) {\n var _this = this,\n now = new Date(),\n day = now.getDate(),\n month = now.getMonth() + 1,\n year = now.getFullYear(),\n queryKey = '$query' + type.capitalize(),\n params = {\n day: '' + year + (month < 10?'0':'') + month + (day < 10?'0':'') + day,\n };\n\n return this.$Preferences.ready().then(function() {\n var futureComponentData,\n dirty = false,\n otherType;\n\n angular.extend(_this.$query, params);\n\n if (options) {\n _.each(_.keys(options), function(key) {\n // Query parameters common to events and tasks are compared\n dirty |= (_this.$query[key] && options[key] != Component.$query[key]);\n if (key == 'reload' && options[key])\n dirty = true;\n // Update either the common parameters or the type-specific parameters\n else if (angular.isDefined(_this.$query[key]))\n _this.$query[key] = options[key];\n else\n _this[queryKey][key] = options[key];\n });\n }\n\n // Perform query with both common and type-specific parameters\n futureComponentData = _this.$$resource.fetch(null, type + 'list',\n angular.extend(_this[queryKey], _this.$query));\n\n // Invalidate cached results of other type if $query has changed\n otherType = (type == 'tasks')? '$events' : '$tasks';\n if (dirty) {\n delete Component[otherType];\n Component.$log.debug('force reload of ' + otherType);\n }\n\n return _this.$unwrapCollection(type, futureComponentData);\n });\n };\n\n /**\n * @function $find\n * @desc Fetch a component from a specific calendar.\n * @param {string} calendarId - the calendar ID\n * @param {string} componentId - the component ID\n * @param {string} [occurrenceId] - the component ID\n * @see {@link Calendar.$getComponent}\n */\n Component.$find = function(calendarId, componentId, occurrenceId) {\n var futureComponentData, path = [calendarId, componentId];\n\n if (occurrenceId)\n path.push(occurrenceId);\n\n futureComponentData = this.$$resource.fetch(path.join('/'), 'view');\n\n return new Component(futureComponentData);\n };\n\n /**\n * @function filterCategories\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Component.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Component.$categories), function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @function $eventsBlocksForView\n * @desc Events blocks for a specific week\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} type - Date of any day of the desired period\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocksForView = function(view, date) {\n var viewAction, startDate, endDate, params;\n\n if (view == 'day') {\n viewAction = 'dayView';\n startDate = endDate = date;\n }\n else if (view == 'week') {\n viewAction = 'weekView';\n startDate = date.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.addDays(6);\n }\n else if (view == 'month') {\n viewAction = 'monthView';\n startDate = date;\n startDate.setDate(1);\n startDate = startDate.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.addDays(-1);\n endDate = endDate.endOfWeek();\n }\n return this.$eventsBlocks(viewAction, startDate, endDate);\n };\n\n /**\n * @function $eventsBlocks\n * @desc Events blocks for a specific view and period\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} startDate - period's start date\n * @param {Date} endDate - period's end date\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocks = function(view, startDate, endDate) {\n var params, futureComponentData, i,\n deferred = Component.$q.defer();\n\n params = { view: view.toLowerCase(), sd: startDate.getDayString(), ed: endDate.getDayString() };\n Component.$log.debug('eventsblocks ' + JSON.stringify(params, undefined, 2));\n futureComponentData = this.$$resource.fetch(null, 'eventsblocks', params);\n futureComponentData.then(function(data) {\n Component.$timeout(function() {\n var components = [], blocks = {};\n\n // Instantiate Component objects\n _.reduce(data.events, function(objects, eventData, i) {\n var componentData = _.object(data.eventsFields, eventData),\n start = new Date(componentData.c_startdate * 1000);\n componentData.hour = start.getHourString();\n objects.push(new Component(componentData));\n return objects;\n }, components);\n\n // Associate Component objects to blocks positions\n _.each(_.flatten(data.blocks), function(block) {\n block.component = components[block.nbr];\n });\n\n // Convert array of blocks to object with days as keys\n for (i = 0; i < data.blocks.length; i++) {\n blocks[startDate.getDayString()] = data.blocks[i];\n startDate.addDays(1);\n }\n\n Component.$log.debug('blocks ready (' + _.keys(blocks).length + ')');\n\n // Save the blocks to the object model\n Component.$blocks = blocks;\n\n deferred.resolve(blocks);\n });\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapCollection\n * @desc Unwrap a promise and instanciate new Component objects using received data.\n * @param {string} type - either 'events' or 'tasks'\n * @param {promise} futureComponentData - a promise of the components' metadata\n * @returns a promise of the HTTP operation\n */\n Component.$unwrapCollection = function(type, futureComponentData) {\n var _this = this,\n components = [];\n\n return futureComponentData.then(function(data) {\n return Component.$timeout(function() {\n var fields = _.invoke(data.fields, 'toLowerCase');\n\n // Instanciate Component objects\n _.reduce(data[type], function(components, componentData, i) {\n var data = _.object(fields, componentData);\n components.push(new Component(data));\n return components;\n }, components);\n\n Component.$log.debug('list of ' + type + ' ready (' + components.length + ')');\n\n // Save the list of components to the object model\n Component['$' + type] = components;\n\n return components;\n });\n });\n };\n\n /**\n * @function init\n * @memberof Component.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of component\n */\n Component.prototype.init = function(data) {\n var _this = this;\n\n this.categories = [];\n this.repeat = {};\n this.alarm = { action: 'display', quantity: 5, unit: 'MINUTES', reference: 'BEFORE', relation: 'START' };\n this.status = 'not-specified';\n angular.extend(this, data);\n\n Component.$Preferences.ready().then(function() {\n var type = (_this.type == 'appointment')? 'Events' : 'Tasks';\n\n // Set default values from user's defaults\n _this.classification = _this.classification ||\n Component.$Preferences.defaults['SOGoCalendar' + type + 'DefaultClassification'].toLowerCase();\n });\n\n if (this.startDate)\n this.start = new Date(this.startDate.substring(0,10) + ' ' + this.startDate.substring(11,16));\n if (this.endDate)\n this.end = new Date(this.endDate.substring(0,10) + ' ' + this.endDate.substring(11,16));\n if (this.dueDate)\n this.due = new Date(this.dueDate.substring(0,10) + ' ' + this.dueDate.substring(11,16));\n\n // Parse recurrence rule definition and initialize default values\n this.$isRecurrent = angular.isDefined(data.repeat);\n if (this.repeat.days) {\n var byDayMask = _.find(this.repeat.days, function(o) {\n return angular.isDefined(o.occurrence);\n });\n if (byDayMask)\n if (this.repeat.frequency == 'yearly')\n this.repeat.year = { byday: true };\n this.repeat.month = {\n type: 'byday',\n occurrence: byDayMask.occurrence.toString(),\n day: byDayMask.day\n };\n }\n else {\n this.repeat.days = [];\n }\n if (angular.isUndefined(this.repeat.frequency))\n this.repeat.frequency = 'never';\n if (angular.isUndefined(this.repeat.interval))\n this.repeat.interval = 1;\n if (angular.isUndefined(this.repeat.month))\n this.repeat.month = { occurrence: '1', day: 'SU', type: 'bymonthday' };\n if (angular.isUndefined(this.repeat.monthdays))\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n this.repeat.months = [];\n if (angular.isUndefined(this.repeat.year))\n this.repeat.year = {};\n if (this.repeat.count)\n this.repeat.end = 'count';\n else if (this.repeat.until) {\n this.repeat.end = 'until';\n this.repeat.until = this.repeat.until.substring(0,10).asDate();\n }\n else\n this.repeat.end = 'never';\n this.$hasCustomRepeat = this.hasCustomRepeat();\n\n if (this.isNew) {\n // Set default alarm\n Component.$Preferences.ready().then(function() {\n var units = { M: 'MINUTES', H: 'HOURS', D: 'DAYS', W: 'WEEKS' };\n var match = /-PT?([0-9]+)([MHDW])/.exec(Component.$Preferences.defaults.SOGoCalendarDefaultReminder);\n if (match) {\n _this.$hasAlarm = true;\n _this.alarm.quantity = parseInt(match[1]);\n _this.alarm.unit = units[match[2]];\n }\n });\n }\n else {\n this.$hasAlarm = angular.isDefined(data.alarm);\n }\n\n // Allow the component to be moved to a different calendar\n this.destinationCalendar = this.pid;\n\n if (this.organizer && this.organizer.email) {\n this.organizer.$image = Component.$gravatar(this.organizer.email, 32);\n }\n\n // Load freebusy of attendees\n this.freebusy = this.updateFreeBusyCoverage();\n\n if (this.attendees) {\n _.each(this.attendees, function(attendee) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n _this.updateFreeBusy(attendee);\n });\n }\n };\n\n /**\n * @function hasCustomRepeat\n * @memberof Component.prototype\n * @desc Check if the component has a custom recurrence rule.\n * @returns true if the recurrence rule requires the full recurrence editor\n */\n Component.prototype.hasCustomRepeat = function() {\n var b = angular.isDefined(this.repeat) &&\n (this.repeat.interval > 1 ||\n this.repeat.days && this.repeat.days.length > 0 ||\n this.repeat.monthdays && this.repeat.monthdays.length > 0 ||\n this.repeat.months && this.repeat.months.length > 0);\n return b;\n };\n\n /**\n * @function isEditable\n * @memberof Component.prototype\n * @desc Check if the component is editable and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditable = function() {\n return (!this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isEditableOccurrence\n * @memberof Component.prototype\n * @desc Check if the component is editable and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditableOccurrence = function() {\n return (this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isInvitation\n * @memberof Component.prototype\n * @desc Check if the component an invitation and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitation = function() {\n return (!this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isInvitationOccurrence\n * @memberof Component.prototype\n * @desc Check if the component an invitation and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitationOccurrence = function() {\n return (this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isReadOnly\n * @memberof Component.prototype\n * @desc Check if the component is not editable and not an invitation\n * @returns true or false\n */\n Component.prototype.isReadOnly = function() {\n return (this.isReadOnly && !this.userHasRSVP);\n };\n\n /**\n * @function enablePercentComplete\n * @memberof Component.prototype\n * @desc Check if the percent completion should be enabled with respect to the\n * component's type and status.\n * @returns true if the percent completion should be displayed\n */\n Component.prototype.enablePercentComplete = function() {\n return (this.component = 'vtodo' &&\n this.status != 'not-specified' &&\n this.status != 'cancelled');\n };\n\n /**\n * @function coversFreeBusy\n * @memberof Component.prototype\n * @desc Check if a specific quarter matches the component's period\n * @returns true if the quarter covers the component's period\n */\n Component.prototype.coversFreeBusy = function(day, hour, quarter) {\n var b = (angular.isDefined(this.freebusy[day]) &&\n angular.isDefined(this.freebusy[day][hour]) &&\n this.freebusy[day][hour][quarter] == 1);\n return b;\n };\n\n /**\n * @function updateFreeBusyCoverage\n * @memberof Component.prototype\n * @desc Build a 15-minute-based representation of the component's period.\n * @returns an object literal hashed by days and hours and arrays of four 1's and 0's\n */\n Component.prototype.updateFreeBusyCoverage = function() {\n var _this = this, freebusy = {};\n\n if (this.start && this.end) {\n var roundedStart = new Date(this.start.getTime()),\n roundedEnd = new Date(this.end.getTime()),\n startQuarter = parseInt(roundedStart.getMinutes()/15 + 0.5),\n endQuarter = parseInt(roundedEnd.getMinutes()/15 + 0.5);\n roundedStart.setMinutes(15*startQuarter);\n roundedEnd.setMinutes(15*endQuarter);\n\n _.each(roundedStart.daysUpTo(roundedEnd), function(date, index) {\n var currentDay = date.getDate(),\n dayKey = date.getDayString(),\n hourKey;\n if (dayKey == _this.start.getDayString()) {\n hourKey = date.getHours().toString();\n freebusy[dayKey] = {};\n freebusy[dayKey][hourKey] = [];\n while (startQuarter > 0) {\n freebusy[dayKey][hourKey].push(0);\n startQuarter--;\n }\n }\n else {\n date = date.beginOfDay();\n freebusy[dayKey] = {};\n }\n while (date.getTime() < _this.end.getTime() &&\n date.getDate() == currentDay) {\n hourKey = date.getHours().toString();\n if (angular.isUndefined(freebusy[dayKey][hourKey]))\n freebusy[dayKey][hourKey] = [];\n freebusy[dayKey][hourKey].push(1);\n date.addMinutes(15);\n }\n });\n return freebusy;\n }\n };\n\n /**\n * @function updateFreeBusy\n * @memberof Component.prototype\n * @desc Update the freebusy information for the component's period for a specific attendee.\n * @param {Object} card - an Card object instance of the attendee\n */\n Component.prototype.updateFreeBusy = function(attendee) {\n var params, url, days;\n if (attendee.uid) {\n params =\n {\n sday: this.start.getDayString(),\n eday: this.end.getDayString()\n };\n url = ['..', '..', attendee.uid, 'freebusy.ifb'];\n days = _.map(this.start.daysUpTo(this.end), function(day) { return day.getDayString(); });\n\n if (angular.isUndefined(attendee.freebusy))\n attendee.freebusy = {};\n\n // Fetch FreeBusy information\n Component.$$resource.fetch(url.join('/'), 'ajaxRead', params).then(function(data) {\n _.each(days, function(day) {\n var hour;\n\n if (angular.isUndefined(attendee.freebusy[day]))\n attendee.freebusy[day] = {};\n\n if (angular.isUndefined(data[day]))\n data[day] = {};\n\n for (var i = 0; i <= 23; i++) {\n hour = i.toString();\n if (data[day][hour])\n attendee.freebusy[day][hour] = [\n data[day][hour][\"0\"],\n data[day][hour][\"15\"],\n data[day][hour][\"30\"],\n data[day][hour][\"45\"]\n ];\n else\n attendee.freebusy[day][hour] = [0, 0, 0, 0];\n }\n });\n });\n }\n };\n\n /**\n * @function getClassName\n * @memberof Component.prototype\n * @desc Return the component CSS class name based on its container (calendar) ID.\n * @param {string} [base] - the prefix to add to the class name (defaults to \"fg\")\n * @returns a string representing the foreground CSS class name\n */\n Component.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + (this.destinationCalendar || this.c_folder);\n };\n\n /**\n * @function addAttendee\n * @memberof Component.prototype\n * @desc Add an attendee and fetch his freebusy info.\n * @param {Object} card - an Card object instance to be added to the attendees list\n */\n Component.prototype.addAttendee = function(card) {\n var attendee, url, params;\n if (card) {\n attendee = {\n name: card.c_cn,\n email: card.$preferredEmail(),\n role: 'req-participant',\n status: 'needs-action',\n uid: card.c_uid\n };\n if (!_.find(this.attendees, function(o) {\n return o.email == attendee.email;\n })) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n if (this.attendees)\n this.attendees.push(attendee);\n else\n this.attendees = [attendee];\n this.updateFreeBusy(attendee);\n }\n }\n };\n\n /**\n * @function hasAttendee\n * @memberof Component.prototype\n * @desc Verify if one of the email addresses of a Card instance matches an attendee.\n * @param {Object} card - an Card object instance\n * @returns true if the Card matches an attendee\n */\n Component.prototype.hasAttendee = function(card) {\n var attendee = _.find(this.attendees, function(attendee) {\n return _.find(card.emails, function(email) {\n return email.value == attendee.email;\n });\n });\n return angular.isDefined(attendee);\n };\n\n /**\n * @function canRemindAttendeesByEmail\n * @memberof Component.prototype\n * @desc Verify if the component's reminder must be send by email and if it has at least one attendee.\n * @returns true if attendees can receive a reminder by email\n */\n Component.prototype.canRemindAttendeesByEmail = function() {\n return this.alarm.action == 'email' &&\n !this.isReadOnly &&\n this.attendees && this.attendees.length > 0;\n };\n\n /**\n * @function addAttachUrl\n * @memberof Component.prototype\n * @desc Add a new attach URL if not already defined\n * @param {string} attachUrl - the URL\n * @returns the number of values in the list of attach URLs\n */\n Component.prototype.addAttachUrl = function(attachUrl) {\n if (angular.isUndefined(this.attachUrls)) {\n this.attachUrls = [{value: attachUrl}];\n }\n else {\n for (var i = 0; i < this.attachUrls.length; i++) {\n if (this.attachUrls[i].value == attachUrl) {\n break;\n }\n }\n if (i == this.attachUrls.length)\n this.attachUrls.push({value: attachUrl});\n }\n return this.attachUrls.length - 1;\n };\n\n /**\n * @function deleteAttachUrl\n * @memberof Component.prototype\n * @desc Remove an attach URL\n * @param {number} index - the URL index in the list of attach URLs\n */\n Component.prototype.deleteAttachUrl = function(index) {\n if (index > -1 && this.attachUrls.length > index) {\n this.attachUrls.splice(index, 1);\n }\n };\n\n /**\n * @function $reset\n * @memberof Component.prototype\n * @desc Reset the original state the component's data.\n */\n Component.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function reply\n * @memberof Component.prototype\n * @desc Reply to an invitation.\n * @returns a promise of the HTTP operation\n */\n Component.prototype.$reply = function() {\n var _this = this, data, path = [this.pid, this.id];\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n data = {\n reply: this.reply,\n delegatedTo: this.delegatedTo,\n alarm: this.$hasAlarm? this.alarm : {}\n };\n\n return Component.$$resource.save(path.join('/'), data, { action: 'rsvpAppointment' })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $save\n * @memberof Component.prototype\n * @desc Save the component to the server.\n */\n Component.prototype.$save = function() {\n var _this = this, options, path = [this.pid, this.id];\n\n if (this.isNew)\n options = { action: 'saveAs' + this.type.capitalize() };\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n return Component.$$resource.save(path.join('/'), this.$omit(), options)\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof Component.prototype\n * @desc Unwrap a promise.\n * @param {promise} futureComponentData - a promise of some of the Component's data\n */\n Component.prototype.$unwrap = function(futureComponentData) {\n var _this = this;\n\n // Expose the promise\n this.$futureComponentData = futureComponentData;\n\n // Resolve the promise\n this.$futureComponentData.then(function(data) {\n _this.init(data);\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Component.$log.error(_this.error);\n });\n };\n\n /**\n * @function $omit\n * @memberof Component.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Component instance\n */\n Component.prototype.$omit = function() {\n var component = {}, date;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n component[key] = angular.copy(value);\n }\n });\n\n // Format times\n component.startTime = component.startDate ? formatTime(component.startDate) : '';\n component.endTime = component.endDate ? formatTime(component.endDate) : '';\n\n // Update recurrence definition depending on selections\n if (this.$hasCustomRepeat) {\n if (this.repeat.frequency == 'monthly' && this.repeat.month.type && this.repeat.month.type == 'byday' ||\n this.repeat.frequency == 'yearly' && this.repeat.year.byday) {\n // BYDAY mask for a monthly or yearly recurrence\n delete component.repeat.monthdays;\n component.repeat.days = [{ day: this.repeat.month.day, occurrence: this.repeat.month.occurrence.toString() }];\n }\n else if (this.repeat.month.type) {\n // montly recurrence by month days or yearly by month\n delete component.repeat.days;\n }\n }\n else if (this.repeat.frequency) {\n component.repeat = { frequency: this.repeat.frequency };\n }\n if (this.repeat.frequency) {\n if (this.repeat.end == 'until' && this.repeat.until)\n component.repeat.until = this.repeat.until.stringWithSeparator('-');\n else if (this.repeat.end == 'count' && this.repeat.count)\n component.repeat.count = this.repeat.count;\n else {\n delete component.repeat.until;\n delete component.repeat.count;\n }\n }\n else {\n delete component.repeat;\n }\n\n if (this.$hasAlarm) {\n if (this.alarm.action && this.alarm.action == 'email' &&\n !(this.attendees && this.attendees.length > 0)) {\n // No attendees; email reminder must be sent to organizer only\n this.alarm.attendees = 0;\n this.alarm.organizer = 1;\n }\n }\n else {\n component.alarm = {};\n }\n\n function formatTime(dateString) {\n // YYYY-MM-DDTHH:MM-ZZ:00 => YYYY-MM-DD HH:MM\n var date = new Date(dateString.substring(0,10) + ' ' + dateString.substring(11,16)),\n hours = date.getHours(),\n minutes = date.getMinutes();\n\n if (hours < 10) hours = '0' + hours;\n if (minutes < 10) minutes = '0' + minutes;\n\n return hours + ':' + minutes;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/vendor/angular-animate.js b/UI/WebServerResources/js/vendor/angular-animate.js new file mode 100644 index 0000000000..168aa57a0b --- /dev/null +++ b/UI/WebServerResources/js/vendor/angular-animate.js @@ -0,0 +1,2139 @@ +/** + * @license AngularJS v1.3.17 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/* jshint maxlen: false */ + +/** + * @ngdoc module + * @name ngAnimate + * @description + * + * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives. + * + *
+ * + * # Usage + * + * To see animations in action, all that is required is to define the appropriate CSS classes + * or to register a JavaScript animation via the `myModule.animation()` function. The directives that support animation automatically are: + * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation + * by using the `$animate` service. + * + * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: + * + * | Directive | Supported Animations | + * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------| + * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | + * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave | + * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave | + * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave | + * | {@link ng.directive:ngIf#animations ngIf} | enter and leave | + * | {@link ng.directive:ngClass#animations ngClass} | add and remove (the CSS class(es) present) | + * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide} | add and remove (the ng-hide class value) | + * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) | + * | {@link module:ngMessages#animations ngMessages} | add and remove (ng-active & ng-inactive) | + * | {@link module:ngMessages#animations ngMessage} | enter and leave | + * + * You can find out more information about animations upon visiting each directive page. + * + * Below is an example of how to apply animations to a directive that supports animation hooks: + * + * ```html + * + * + * + * + * ``` + * + * Keep in mind that, by default, if an animation is running, any child elements cannot be animated + * until the parent element's animation has completed. This blocking feature can be overridden by + * placing the `ng-animate-children` attribute on a parent container tag. + * + * ```html + *
+ *
+ *
+ * ... + *
+ *
+ *
+ * ``` + * + * When the `on` expression value changes and an animation is triggered then each of the elements within + * will all animate without the block being applied to child elements. + * + * ## Are animations run when the application starts? + * No they are not. When an application is bootstrapped Angular will disable animations from running to avoid + * a frenzy of animations from being triggered as soon as the browser has rendered the screen. For this to work, + * Angular will wait for two digest cycles until enabling animations. From there on, any animation-triggering + * layout changes in the application will trigger animations as normal. + * + * In addition, upon bootstrap, if the routing system or any directives or load remote data (via $http) then Angular + * will automatically extend the wait time to enable animations once **all** of the outbound HTTP requests + * are complete. + * + * ## CSS-defined Animations + * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes + * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported + * and can be used to play along with this naming structure. + * + * The following code below demonstrates how to perform animations using **CSS transitions** with Angular: + * + * ```html + * + * + *
+ *
+ *
+ * ``` + * + * The following code below demonstrates how to perform animations using **CSS animations** with Angular: + * + * ```html + * + * + *
+ *
+ *
+ * ``` + * + * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing. + * + * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add + * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically + * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be + * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end + * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element + * has no CSS transition/animation classes applied to it. + * + * ### Structural transition animations + * + * Structural transitions (such as enter, leave and move) will always apply a `0s none` transition + * value to force the browser into rendering the styles defined in the setup (`.ng-enter`, `.ng-leave` + * or `.ng-move`) class. This means that any active transition animations operating on the element + * will be cut off to make way for the enter, leave or move animation. + * + * ### Class-based transition animations + * + * Class-based transitions refer to transition animations that are triggered when a CSS class is + * added to or removed from the element (via `$animate.addClass`, `$animate.removeClass`, + * `$animate.setClass`, or by directives such as `ngClass`, `ngModel` and `form`). + * They are different when compared to structural animations since they **do not cancel existing + * animations** nor do they **block successive transitions** from rendering on the same element. + * This distinction allows for **multiple class-based transitions** to be performed on the same element. + * + * In addition to ngAnimate supporting the default (natural) functionality of class-based transition + * animations, ngAnimate also decorates the element with starting and ending CSS classes to aid the + * developer in further styling the element throughout the transition animation. Earlier versions + * of ngAnimate may have caused natural CSS transitions to break and not render properly due to + * $animate temporarily blocking transitions using `0s none` in order to allow the setup CSS class + * (the `-add` or `-remove` class) to be applied without triggering an animation. However, as of + * **version 1.3**, this workaround has been removed with ngAnimate and all non-ngAnimate CSS + * class transitions are compatible with ngAnimate. + * + * There is, however, one special case when dealing with class-based transitions in ngAnimate. + * When rendering class-based transitions that make use of the setup and active CSS classes + * (e.g. `.fade-add` and `.fade-add-active` for when `.fade` is added) be sure to define + * the transition value **on the active CSS class** and not the setup class. + * + * ```css + * .fade-add { + * /* remember to place a 0s transition here + * to ensure that the styles are applied instantly + * even if the element already has a transition style */ + * transition:0s linear all; + * + * /* starting CSS styles */ + * opacity:1; + * } + * .fade-add.fade-add-active { + * /* this will be the length of the animation */ + * transition:1s linear all; + * opacity:0; + * } + * ``` + * + * The setup CSS class (in this case `.fade-add`) also has a transition style property, however, it + * has a duration of zero. This may not be required, however, incase the browser is unable to render + * the styling present in this CSS class instantly then it could be that the browser is attempting + * to perform an unnecessary transition. + * + * This workaround, however, does not apply to standard class-based transitions that are rendered + * when a CSS class containing a transition is applied to an element: + * + * ```css + * /* this works as expected */ + * .fade { + * transition:1s linear all; + * opacity:0; + * } + * ``` + * + * Please keep this in mind when coding the CSS markup that will be used within class-based transitions. + * Also, try not to mix the two class-based animation flavors together since the CSS code may become + * overly complex. + * + * + * ### Preventing Collisions With Third Party Libraries + * + * Some third-party frameworks place animation duration defaults across many element or className + * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which + * is expecting actual animations on these elements and has to wait for their completion. + * + * You can prevent this unwanted behavior by using a prefix on all your animation classes: + * + * ```css + * /* prefixed with animate- */ + * .animate-fade-add.animate-fade-add-active { + * transition:1s linear all; + * opacity:0; + * } + * ``` + * + * You then configure `$animate` to enforce this prefix: + * + * ```js + * $animateProvider.classNameFilter(/animate-/); + * ``` + * + * + * ### CSS Staggering Animations + * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a + * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be + * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for + * the animation. The style property expected within the stagger class can either be a **transition-delay** or an + * **animation-delay** property (or both if your animation contains both transitions and keyframe animations). + * + * ```css + * .my-animation.ng-enter { + * /* standard transition code */ + * -webkit-transition: 1s linear all; + * transition: 1s linear all; + * opacity:0; + * } + * .my-animation.ng-enter-stagger { + * /* this will have a 100ms delay between each successive leave animation */ + * -webkit-transition-delay: 0.1s; + * transition-delay: 0.1s; + * + * /* in case the stagger doesn't work then these two values + * must be set to 0 to avoid an accidental CSS inheritance */ + * -webkit-transition-duration: 0s; + * transition-duration: 0s; + * } + * .my-animation.ng-enter.ng-enter-active { + * /* standard transition styles */ + * opacity:1; + * } + * ``` + * + * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations + * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this + * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation + * will also be reset if more than 10ms has passed after the last animation has been fired. + * + * The following code will issue the **ng-leave-stagger** event on the element provided: + * + * ```js + * var kids = parent.children(); + * + * $animate.leave(kids[0]); //stagger index=0 + * $animate.leave(kids[1]); //stagger index=1 + * $animate.leave(kids[2]); //stagger index=2 + * $animate.leave(kids[3]); //stagger index=3 + * $animate.leave(kids[4]); //stagger index=4 + * + * $timeout(function() { + * //stagger has reset itself + * $animate.leave(kids[5]); //stagger index=0 + * $animate.leave(kids[6]); //stagger index=1 + * }, 100, false); + * ``` + * + * Stagger animations are currently only supported within CSS-defined animations. + * + * ## JavaScript-defined Animations + * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not + * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module. + * + * ```js + * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application. + * var ngModule = angular.module('YourApp', ['ngAnimate']); + * ngModule.animation('.my-crazy-animation', function() { + * return { + * enter: function(element, done) { + * //run the animation here and call done when the animation is complete + * return function(cancelled) { + * //this (optional) function will be called when the animation + * //completes or when the animation is cancelled (the cancelled + * //flag will be set to true if cancelled). + * }; + * }, + * leave: function(element, done) { }, + * move: function(element, done) { }, + * + * //animation that can be triggered before the class is added + * beforeAddClass: function(element, className, done) { }, + * + * //animation that can be triggered after the class is added + * addClass: function(element, className, done) { }, + * + * //animation that can be triggered before the class is removed + * beforeRemoveClass: function(element, className, done) { }, + * + * //animation that can be triggered after the class is removed + * removeClass: function(element, className, done) { } + * }; + * }); + * ``` + * + * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run + * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits + * the element's CSS class attribute value and then run the matching animation event function (if found). + * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will + * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported). + * + * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. + * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, + * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation + * or transition code that is defined via a stylesheet). + * + * + * ### Applying Directive-specific Styles to an Animation + * In some cases a directive or service may want to provide `$animate` with extra details that the animation will + * include into its animation. Let's say for example we wanted to render an animation that animates an element + * towards the mouse coordinates as to where the user clicked last. By collecting the X/Y coordinates of the click + * (via the event parameter) we can set the `top` and `left` styles into an object and pass that into our function + * call to `$animate.addClass`. + * + * ```js + * canvas.on('click', function(e) { + * $animate.addClass(element, 'on', { + * to: { + * left : e.client.x + 'px', + * top : e.client.y + 'px' + * } + * }): + * }); + * ``` + * + * Now when the animation runs, and a transition or keyframe animation is picked up, then the animation itself will + * also include and transition the styling of the `left` and `top` properties into its running animation. If we want + * to provide some starting animation values then we can do so by placing the starting animations styles into an object + * called `from` in the same object as the `to` animations. + * + * ```js + * canvas.on('click', function(e) { + * $animate.addClass(element, 'on', { + * from: { + * position: 'absolute', + * left: '0px', + * top: '0px' + * }, + * to: { + * left : e.client.x + 'px', + * top : e.client.y + 'px' + * } + * }): + * }); + * ``` + * + * Once the animation is complete or cancelled then the union of both the before and after styles are applied to the + * element. If `ngAnimate` is not present then the styles will be applied immediately. + * + */ + +angular.module('ngAnimate', ['ng']) + + /** + * @ngdoc provider + * @name $animateProvider + * @description + * + * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module. + * When an animation is triggered, the $animate service will query the $animate service to find any animations that match + * the provided name value. + * + * Requires the {@link ngAnimate `ngAnimate`} module to be installed. + * + * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. + * + */ + .directive('ngAnimateChildren', function() { + var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren'; + return function(scope, element, attrs) { + var val = attrs.ngAnimateChildren; + if (angular.isString(val) && val.length === 0) { //empty attribute + element.data(NG_ANIMATE_CHILDREN, true); + } else { + scope.$watch(val, function(value) { + element.data(NG_ANIMATE_CHILDREN, !!value); + }); + } + }; + }) + + //this private service is only used within CSS-enabled animations + //IE8 + IE9 do not support rAF natively, but that is fine since they + //also don't support transitions and keyframes which means that the code + //below will never be used by the two browsers. + .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) { + var bod = $document[0].body; + return function(fn) { + //the returned function acts as the cancellation function + return $$rAF(function() { + //the line below will force the browser to perform a repaint + //so that all the animated elements within the animation frame + //will be properly updated and drawn on screen. This is + //required to perform multi-class CSS based animations with + //Firefox. DO NOT REMOVE THIS LINE. DO NOT OPTIMIZE THIS LINE. + //THE MINIFIER WILL REMOVE IT OTHERWISE WHICH WILL RESULT IN AN + //UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND WILL + //TAKE YEARS AWAY FROM YOUR LIFE! + fn(bod.offsetWidth); + }); + }; + }]) + + .config(['$provide', '$animateProvider', function($provide, $animateProvider) { + var noop = angular.noop; + var forEach = angular.forEach; + var selectors = $animateProvider.$$selectors; + var isArray = angular.isArray; + var isString = angular.isString; + var isObject = angular.isObject; + + var ELEMENT_NODE = 1; + var NG_ANIMATE_STATE = '$$ngAnimateState'; + var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren'; + var NG_ANIMATE_CLASS_NAME = 'ng-animate'; + var rootAnimateState = {running: true}; + + function extractElementNode(element) { + for (var i = 0; i < element.length; i++) { + var elm = element[i]; + if (elm.nodeType == ELEMENT_NODE) { + return elm; + } + } + } + + function prepareElement(element) { + return element && angular.element(element); + } + + function stripCommentsFromElement(element) { + return angular.element(extractElementNode(element)); + } + + function isMatchingElement(elm1, elm2) { + return extractElementNode(elm1) == extractElementNode(elm2); + } + var $$jqLite; + $provide.decorator('$animate', + ['$delegate', '$$q', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document', '$templateRequest', '$$jqLite', + function($delegate, $$q, $injector, $sniffer, $rootElement, $$asyncCallback, $rootScope, $document, $templateRequest, $$$jqLite) { + + $$jqLite = $$$jqLite; + $rootElement.data(NG_ANIMATE_STATE, rootAnimateState); + + // Wait until all directive and route-related templates are downloaded and + // compiled. The $templateRequest.totalPendingRequests variable keeps track of + // all of the remote templates being currently downloaded. If there are no + // templates currently downloading then the watcher will still fire anyway. + var deregisterWatch = $rootScope.$watch( + function() { return $templateRequest.totalPendingRequests; }, + function(val, oldVal) { + if (val !== 0) return; + deregisterWatch(); + + // Now that all templates have been downloaded, $animate will wait until + // the post digest queue is empty before enabling animations. By having two + // calls to $postDigest calls we can ensure that the flag is enabled at the + // very end of the post digest queue. Since all of the animations in $animate + // use $postDigest, it's important that the code below executes at the end. + // This basically means that the page is fully downloaded and compiled before + // any animations are triggered. + $rootScope.$$postDigest(function() { + $rootScope.$$postDigest(function() { + rootAnimateState.running = false; + }); + }); + } + ); + + var globalAnimationCounter = 0; + var classNameFilter = $animateProvider.classNameFilter(); + var isAnimatableClassName = !classNameFilter + ? function() { return true; } + : function(className) { + return classNameFilter.test(className); + }; + + function classBasedAnimationsBlocked(element, setter) { + var data = element.data(NG_ANIMATE_STATE) || {}; + if (setter) { + data.running = true; + data.structural = true; + element.data(NG_ANIMATE_STATE, data); + } + return data.disabled || (data.running && data.structural); + } + + function runAnimationPostDigest(fn) { + var cancelFn, defer = $$q.defer(); + defer.promise.$$cancelFn = function() { + cancelFn && cancelFn(); + }; + $rootScope.$$postDigest(function() { + cancelFn = fn(function() { + defer.resolve(); + }); + }); + return defer.promise; + } + + function parseAnimateOptions(options) { + // some plugin code may still be passing in the callback + // function as the last param for the $animate methods so + // it's best to only allow string or array values for now + if (isObject(options)) { + if (options.tempClasses && isString(options.tempClasses)) { + options.tempClasses = options.tempClasses.split(/\s+/); + } + return options; + } + } + + function resolveElementClasses(element, cache, runningAnimations) { + runningAnimations = runningAnimations || {}; + + var lookup = {}; + forEach(runningAnimations, function(data, selector) { + forEach(selector.split(' '), function(s) { + lookup[s]=data; + }); + }); + + var hasClasses = Object.create(null); + forEach((element.attr('class') || '').split(/\s+/), function(className) { + hasClasses[className] = true; + }); + + var toAdd = [], toRemove = []; + forEach((cache && cache.classes) || [], function(status, className) { + var hasClass = hasClasses[className]; + var matchingAnimation = lookup[className] || {}; + + // When addClass and removeClass is called then $animate will check to + // see if addClass and removeClass cancel each other out. When there are + // more calls to removeClass than addClass then the count falls below 0 + // and then the removeClass animation will be allowed. Otherwise if the + // count is above 0 then that means an addClass animation will commence. + // Once an animation is allowed then the code will also check to see if + // there exists any on-going animation that is already adding or remvoing + // the matching CSS class. + if (status === false) { + //does it have the class or will it have the class + if (hasClass || matchingAnimation.event == 'addClass') { + toRemove.push(className); + } + } else if (status === true) { + //is the class missing or will it be removed? + if (!hasClass || matchingAnimation.event == 'removeClass') { + toAdd.push(className); + } + } + }); + + return (toAdd.length + toRemove.length) > 0 && [toAdd.join(' '), toRemove.join(' ')]; + } + + function lookup(name) { + if (name) { + var matches = [], + flagMap = {}, + classes = name.substr(1).split('.'); + + //the empty string value is the default animation + //operation which performs CSS transition and keyframe + //animations sniffing. This is always included for each + //element animation procedure if the browser supports + //transitions and/or keyframe animations. The default + //animation is added to the top of the list to prevent + //any previous animations from affecting the element styling + //prior to the element being animated. + if ($sniffer.transitions || $sniffer.animations) { + matches.push($injector.get(selectors[''])); + } + + for (var i=0; i < classes.length; i++) { + var klass = classes[i], + selectorFactoryName = selectors[klass]; + if (selectorFactoryName && !flagMap[klass]) { + matches.push($injector.get(selectorFactoryName)); + flagMap[klass] = true; + } + } + return matches; + } + } + + function animationRunner(element, animationEvent, className, options) { + //transcluded directives may sometimes fire an animation using only comment nodes + //best to catch this early on to prevent any animation operations from occurring + var node = element[0]; + if (!node) { + return; + } + + if (options) { + options.to = options.to || {}; + options.from = options.from || {}; + } + + var classNameAdd; + var classNameRemove; + if (isArray(className)) { + classNameAdd = className[0]; + classNameRemove = className[1]; + if (!classNameAdd) { + className = classNameRemove; + animationEvent = 'removeClass'; + } else if (!classNameRemove) { + className = classNameAdd; + animationEvent = 'addClass'; + } else { + className = classNameAdd + ' ' + classNameRemove; + } + } + + var isSetClassOperation = animationEvent == 'setClass'; + var isClassBased = isSetClassOperation + || animationEvent == 'addClass' + || animationEvent == 'removeClass' + || animationEvent == 'animate'; + + var currentClassName = element.attr('class'); + var classes = currentClassName + ' ' + className; + if (!isAnimatableClassName(classes)) { + return; + } + + var beforeComplete = noop, + beforeCancel = [], + before = [], + afterComplete = noop, + afterCancel = [], + after = []; + + var animationLookup = (' ' + classes).replace(/\s+/g,'.'); + forEach(lookup(animationLookup), function(animationFactory) { + var created = registerAnimation(animationFactory, animationEvent); + if (!created && isSetClassOperation) { + registerAnimation(animationFactory, 'addClass'); + registerAnimation(animationFactory, 'removeClass'); + } + }); + + function registerAnimation(animationFactory, event) { + var afterFn = animationFactory[event]; + var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)]; + if (afterFn || beforeFn) { + if (event == 'leave') { + beforeFn = afterFn; + //when set as null then animation knows to skip this phase + afterFn = null; + } + after.push({ + event: event, fn: afterFn + }); + before.push({ + event: event, fn: beforeFn + }); + return true; + } + } + + function run(fns, cancellations, allCompleteFn) { + var animations = []; + forEach(fns, function(animation) { + animation.fn && animations.push(animation); + }); + + var count = 0; + function afterAnimationComplete(index) { + if (cancellations) { + (cancellations[index] || noop)(); + if (++count < animations.length) return; + cancellations = null; + } + allCompleteFn(); + } + + //The code below adds directly to the array in order to work with + //both sync and async animations. Sync animations are when the done() + //operation is called right away. DO NOT REFACTOR! + forEach(animations, function(animation, index) { + var progress = function() { + afterAnimationComplete(index); + }; + switch (animation.event) { + case 'setClass': + cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress, options)); + break; + case 'animate': + cancellations.push(animation.fn(element, className, options.from, options.to, progress)); + break; + case 'addClass': + cancellations.push(animation.fn(element, classNameAdd || className, progress, options)); + break; + case 'removeClass': + cancellations.push(animation.fn(element, classNameRemove || className, progress, options)); + break; + default: + cancellations.push(animation.fn(element, progress, options)); + break; + } + }); + + if (cancellations && cancellations.length === 0) { + allCompleteFn(); + } + } + + return { + node: node, + event: animationEvent, + className: className, + isClassBased: isClassBased, + isSetClassOperation: isSetClassOperation, + applyStyles: function() { + if (options) { + element.css(angular.extend(options.from || {}, options.to || {})); + } + }, + before: function(allCompleteFn) { + beforeComplete = allCompleteFn; + run(before, beforeCancel, function() { + beforeComplete = noop; + allCompleteFn(); + }); + }, + after: function(allCompleteFn) { + afterComplete = allCompleteFn; + run(after, afterCancel, function() { + afterComplete = noop; + allCompleteFn(); + }); + }, + cancel: function() { + if (beforeCancel) { + forEach(beforeCancel, function(cancelFn) { + (cancelFn || noop)(true); + }); + beforeComplete(true); + } + if (afterCancel) { + forEach(afterCancel, function(cancelFn) { + (cancelFn || noop)(true); + }); + afterComplete(true); + } + } + }; + } + + /** + * @ngdoc service + * @name $animate + * @kind object + * + * @description + * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations. + * When any of these operations are run, the $animate service + * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) + * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run. + * + * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives + * will work out of the box without any extra configuration. + * + * Requires the {@link ngAnimate `ngAnimate`} module to be installed. + * + * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. + * ## Callback Promises + * With AngularJS 1.3, each of the animation methods, on the `$animate` service, return a promise when called. The + * promise itself is then resolved once the animation has completed itself, has been cancelled or has been + * skipped due to animations being disabled. (Note that even if the animation is cancelled it will still + * call the resolve function of the animation.) + * + * ```js + * $animate.enter(element, container).then(function() { + * //...this is called once the animation is complete... + * }); + * ``` + * + * Also note that, due to the nature of the callback promise, if any Angular-specific code (like changing the scope, + * location of the page, etc...) is executed within the callback promise then be sure to wrap the code using + * `$scope.$apply(...)`; + * + * ```js + * $animate.leave(element).then(function() { + * $scope.$apply(function() { + * $location.path('/new-page'); + * }); + * }); + * ``` + * + * An animation can also be cancelled by calling the `$animate.cancel(promise)` method with the provided + * promise that was returned when the animation was started. + * + * ```js + * var promise = $animate.addClass(element, 'super-long-animation'); + * promise.then(function() { + * //this will still be called even if cancelled + * }); + * + * element.on('click', function() { + * //tooo lazy to wait for the animation to end + * $animate.cancel(promise); + * }); + * ``` + * + * (Keep in mind that the promise cancellation is unique to `$animate` since promises in + * general cannot be cancelled.) + * + */ + return { + /** + * @ngdoc method + * @name $animate#animate + * @kind function + * + * @description + * Performs an inline animation on the element which applies the provided `to` and `from` CSS styles to the element. + * If any detected CSS transition, keyframe or JavaScript matches the provided `className` value then the animation + * will take on the provided styles. For example, if a transition animation is set for the given className then the + * provided `from` and `to` styles will be applied alongside the given transition. If a JavaScript animation is + * detected then the provided styles will be given in as function paramters. + * + * ```js + * ngModule.animation('.my-inline-animation', function() { + * return { + * animate : function(element, className, from, to, done) { + * //styles + * } + * } + * }); + * ``` + * + * Below is a breakdown of each step that occurs during the `animate` animation: + * + * | Animation Step | What the element class attribute looks like | + * |-----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| + * | 1. `$animate.animate(...)` is called | `class="my-animation"` | + * | 2. `$animate` waits for the next digest to start the animation | `class="my-animation ng-animate"` | + * | 3. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate"` | + * | 4. the `className` class value is added to the element | `class="my-animation ng-animate className"` | + * | 5. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate className"` | + * | 6. `$animate` blocks all CSS transitions on the element to ensure the `.className` class styling is applied right away| `class="my-animation ng-animate className"` | + * | 7. `$animate` applies the provided collection of `from` CSS styles to the element | `class="my-animation ng-animate className"` | + * | 8. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate className"` | + * | 9. `$animate` removes the CSS transition block placed on the element | `class="my-animation ng-animate className"` | + * | 10. the `className-active` class is added (this triggers the CSS transition/animation) | `class="my-animation ng-animate className className-active"` | + * | 11. `$animate` applies the collection of `to` CSS styles to the element which are then handled by the transition | `class="my-animation ng-animate className className-active"` | + * | 12. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate className className-active"` | + * | 13. The animation ends and all generated CSS classes are removed from the element | `class="my-animation"` | + * | 14. The returned promise is resolved. | `class="my-animation"` | + * + * @param {DOMElement} element the element that will be the focus of the enter animation + * @param {object} from a collection of CSS styles that will be applied to the element at the start of the animation + * @param {object} to a collection of CSS styles that the element will animate towards + * @param {string=} className an optional CSS class that will be added to the element for the duration of the animation (the default class is `ng-inline-animate`) + * @param {object=} options an optional collection of options that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + animate: function(element, from, to, className, options) { + className = className || 'ng-inline-animate'; + options = parseAnimateOptions(options) || {}; + options.from = to ? from : null; + options.to = to ? to : from; + + return runAnimationPostDigest(function(done) { + return performAnimation('animate', className, stripCommentsFromElement(element), null, null, noop, options, done); + }); + }, + + /** + * @ngdoc method + * @name $animate#enter + * @kind function + * + * @description + * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once + * the animation is started, the following CSS classes will be present on the element for the duration of the animation: + * + * Below is a breakdown of each step that occurs during enter animation: + * + * | Animation Step | What the element class attribute looks like | + * |-----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------| + * | 1. `$animate.enter(...)` is called | `class="my-animation"` | + * | 2. element is inserted into the `parentElement` element or beside the `afterElement` element | `class="my-animation"` | + * | 3. `$animate` waits for the next digest to start the animation | `class="my-animation ng-animate"` | + * | 4. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate"` | + * | 5. the `.ng-enter` class is added to the element | `class="my-animation ng-animate ng-enter"` | + * | 6. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate ng-enter"` | + * | 7. `$animate` blocks all CSS transitions on the element to ensure the `.ng-enter` class styling is applied right away | `class="my-animation ng-animate ng-enter"` | + * | 8. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate ng-enter"` | + * | 9. `$animate` removes the CSS transition block placed on the element | `class="my-animation ng-animate ng-enter"` | + * | 10. the `.ng-enter-active` class is added (this triggers the CSS transition/animation) | `class="my-animation ng-animate ng-enter ng-enter-active"` | + * | 11. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate ng-enter ng-enter-active"` | + * | 12. The animation ends and all generated CSS classes are removed from the element | `class="my-animation"` | + * | 13. The returned promise is resolved. | `class="my-animation"` | + * + * @param {DOMElement} element the element that will be the focus of the enter animation + * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation + * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation + * @param {object=} options an optional collection of options that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + enter: function(element, parentElement, afterElement, options) { + options = parseAnimateOptions(options); + element = angular.element(element); + parentElement = prepareElement(parentElement); + afterElement = prepareElement(afterElement); + + classBasedAnimationsBlocked(element, true); + $delegate.enter(element, parentElement, afterElement); + return runAnimationPostDigest(function(done) { + return performAnimation('enter', 'ng-enter', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done); + }); + }, + + /** + * @ngdoc method + * @name $animate#leave + * @kind function + * + * @description + * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during leave animation: + * + * | Animation Step | What the element class attribute looks like | + * |-----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------| + * | 1. `$animate.leave(...)` is called | `class="my-animation"` | + * | 2. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate"` | + * | 3. `$animate` waits for the next digest to start the animation | `class="my-animation ng-animate"` | + * | 4. the `.ng-leave` class is added to the element | `class="my-animation ng-animate ng-leave"` | + * | 5. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate ng-leave"` | + * | 6. `$animate` blocks all CSS transitions on the element to ensure the `.ng-leave` class styling is applied right away | `class="my-animation ng-animate ng-leave"` | + * | 7. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate ng-leave"` | + * | 8. `$animate` removes the CSS transition block placed on the element | `class="my-animation ng-animate ng-leave"` | + * | 9. the `.ng-leave-active` class is added (this triggers the CSS transition/animation) | `class="my-animation ng-animate ng-leave ng-leave-active"` | + * | 10. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate ng-leave ng-leave-active"` | + * | 11. The animation ends and all generated CSS classes are removed from the element | `class="my-animation"` | + * | 12. The element is removed from the DOM | ... | + * | 13. The returned promise is resolved. | ... | + * + * @param {DOMElement} element the element that will be the focus of the leave animation + * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + leave: function(element, options) { + options = parseAnimateOptions(options); + element = angular.element(element); + + cancelChildAnimations(element); + classBasedAnimationsBlocked(element, true); + return runAnimationPostDigest(function(done) { + return performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() { + $delegate.leave(element); + }, options, done); + }); + }, + + /** + * @ngdoc method + * @name $animate#move + * @kind function + * + * @description + * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or + * add the element directly after the afterElement element if present. Then the move animation will be run. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during move animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------| + * | 1. `$animate.move(...)` is called | `class="my-animation"` | + * | 2. element is moved into the parentElement element or beside the afterElement element | `class="my-animation"` | + * | 3. `$animate` waits for the next digest to start the animation | `class="my-animation ng-animate"` | + * | 4. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate"` | + * | 5. the `.ng-move` class is added to the element | `class="my-animation ng-animate ng-move"` | + * | 6. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate ng-move"` | + * | 7. `$animate` blocks all CSS transitions on the element to ensure the `.ng-move` class styling is applied right away | `class="my-animation ng-animate ng-move"` | + * | 8. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate ng-move"` | + * | 9. `$animate` removes the CSS transition block placed on the element | `class="my-animation ng-animate ng-move"` | + * | 10. the `.ng-move-active` class is added (this triggers the CSS transition/animation) | `class="my-animation ng-animate ng-move ng-move-active"` | + * | 11. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate ng-move ng-move-active"` | + * | 12. The animation ends and all generated CSS classes are removed from the element | `class="my-animation"` | + * | 13. The returned promise is resolved. | `class="my-animation"` | + * + * @param {DOMElement} element the element that will be the focus of the move animation + * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation + * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation + * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + move: function(element, parentElement, afterElement, options) { + options = parseAnimateOptions(options); + element = angular.element(element); + parentElement = prepareElement(parentElement); + afterElement = prepareElement(afterElement); + + cancelChildAnimations(element); + classBasedAnimationsBlocked(element, true); + $delegate.move(element, parentElement, afterElement); + return runAnimationPostDigest(function(done) { + return performAnimation('move', 'ng-move', stripCommentsFromElement(element), parentElement, afterElement, noop, options, done); + }); + }, + + /** + * @ngdoc method + * @name $animate#addClass + * + * @description + * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. + * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide + * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions + * or keyframes are defined on the -add-active or base CSS class). + * + * Below is a breakdown of each step that occurs during addClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| + * | 1. `$animate.addClass(element, 'super')` is called | `class="my-animation"` | + * | 2. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate"` | + * | 3. the `.super-add` class is added to the element | `class="my-animation ng-animate super-add"` | + * | 4. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate super-add"` | + * | 5. the `.super` and `.super-add-active` classes are added (this triggers the CSS transition/animation) | `class="my-animation ng-animate super super-add super-add-active"` | + * | 6. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate super super-add super-add-active"` | + * | 7. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate super super-add super-add-active"` | + * | 8. The animation ends and all generated CSS classes are removed from the element | `class="my-animation super"` | + * | 9. The super class is kept on the element | `class="my-animation super"` | + * | 10. The returned promise is resolved. | `class="my-animation super"` | + * + * @param {DOMElement} element the element that will be animated + * @param {string} className the CSS class that will be added to the element and then animated + * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + addClass: function(element, className, options) { + return this.setClass(element, className, [], options); + }, + + /** + * @ngdoc method + * @name $animate#removeClass + * + * @description + * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value + * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in + * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if + * no CSS transitions or keyframes are defined on the -remove or base CSS classes). + * + * Below is a breakdown of each step that occurs during removeClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| + * | 1. `$animate.removeClass(element, 'super')` is called | `class="my-animation super"` | + * | 2. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation super ng-animate"` | + * | 3. the `.super-remove` class is added to the element | `class="my-animation super ng-animate super-remove"` | + * | 4. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation super ng-animate super-remove"` | + * | 5. the `.super-remove-active` classes are added and `.super` is removed (this triggers the CSS transition/animation) | `class="my-animation ng-animate super-remove super-remove-active"` | + * | 6. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate super-remove super-remove-active"` | + * | 7. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate super-remove super-remove-active"` | + * | 8. The animation ends and all generated CSS classes are removed from the element | `class="my-animation"` | + * | 9. The returned promise is resolved. | `class="my-animation"` | + * + * + * @param {DOMElement} element the element that will be animated + * @param {string} className the CSS class that will be animated and then removed from the element + * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + removeClass: function(element, className, options) { + return this.setClass(element, [], className, options); + }, + + /** + * + * @ngdoc method + * @name $animate#setClass + * + * @description Adds and/or removes the given CSS classes to and from the element. + * Once complete, the `done()` callback will be fired (if provided). + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------| + * | 1. `$animate.setClass(element, 'on', 'off')` is called | `class="my-animation off"` | + * | 2. `$animate` runs the JavaScript-defined animations detected on the element | `class="my-animation ng-animate off"` | + * | 3. the `.on-add` and `.off-remove` classes are added to the element | `class="my-animation ng-animate on-add off-remove off"` | + * | 4. `$animate` waits for a single animation frame (this performs a reflow) | `class="my-animation ng-animate on-add off-remove off"` | + * | 5. the `.on`, `.on-add-active` and `.off-remove-active` classes are added and `.off` is removed (this triggers the CSS transition/animation) | `class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"` | + * | 6. `$animate` scans the element styles to get the CSS transition/animation duration and delay | `class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"` | + * | 7. `$animate` waits for the animation to complete (via events and timeout) | `class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"` | + * | 8. The animation ends and all generated CSS classes are removed from the element | `class="my-animation on"` | + * | 9. The returned promise is resolved. | `class="my-animation on"` | + * + * @param {DOMElement} element the element which will have its CSS classes changed + * removed from it + * @param {string} add the CSS classes which will be added to the element + * @param {string} remove the CSS class which will be removed from the element + * CSS classes have been set on the element + * @param {object=} options an optional collection of styles that will be picked up by the CSS transition/animation + * @return {Promise} the animation callback promise + */ + setClass: function(element, add, remove, options) { + options = parseAnimateOptions(options); + + var STORAGE_KEY = '$$animateClasses'; + element = angular.element(element); + element = stripCommentsFromElement(element); + + if (classBasedAnimationsBlocked(element)) { + return $delegate.$$setClassImmediately(element, add, remove, options); + } + + // we're using a combined array for both the add and remove + // operations since the ORDER OF addClass and removeClass matters + var classes, cache = element.data(STORAGE_KEY); + var hasCache = !!cache; + if (!cache) { + cache = {}; + cache.classes = {}; + } + classes = cache.classes; + + add = isArray(add) ? add : add.split(' '); + forEach(add, function(c) { + if (c && c.length) { + classes[c] = true; + } + }); + + remove = isArray(remove) ? remove : remove.split(' '); + forEach(remove, function(c) { + if (c && c.length) { + classes[c] = false; + } + }); + + if (hasCache) { + if (options && cache.options) { + cache.options = angular.extend(cache.options || {}, options); + } + + //the digest cycle will combine all the animations into one function + return cache.promise; + } else { + element.data(STORAGE_KEY, cache = { + classes: classes, + options: options + }); + } + + return cache.promise = runAnimationPostDigest(function(done) { + var parentElement = element.parent(); + var elementNode = extractElementNode(element); + var parentNode = elementNode.parentNode; + // TODO(matsko): move this code into the animationsDisabled() function once #8092 is fixed + if (!parentNode || parentNode['$$NG_REMOVED'] || elementNode['$$NG_REMOVED']) { + done(); + return; + } + + var cache = element.data(STORAGE_KEY); + element.removeData(STORAGE_KEY); + + var state = element.data(NG_ANIMATE_STATE) || {}; + var classes = resolveElementClasses(element, cache, state.active); + return !classes + ? done() + : performAnimation('setClass', classes, element, parentElement, null, function() { + if (classes[0]) $delegate.$$addClassImmediately(element, classes[0]); + if (classes[1]) $delegate.$$removeClassImmediately(element, classes[1]); + }, cache.options, done); + }); + }, + + /** + * @ngdoc method + * @name $animate#cancel + * @kind function + * + * @param {Promise} animationPromise The animation promise that is returned when an animation is started. + * + * @description + * Cancels the provided animation. + */ + cancel: function(promise) { + promise.$$cancelFn(); + }, + + /** + * @ngdoc method + * @name $animate#enabled + * @kind function + * + * @param {boolean=} value If provided then set the animation on or off. + * @param {DOMElement=} element If provided then the element will be used to represent the enable/disable operation + * @return {boolean} Current animation state. + * + * @description + * Globally enables/disables animations. + * + */ + enabled: function(value, element) { + switch (arguments.length) { + case 2: + if (value) { + cleanup(element); + } else { + var data = element.data(NG_ANIMATE_STATE) || {}; + data.disabled = true; + element.data(NG_ANIMATE_STATE, data); + } + break; + + case 1: + rootAnimateState.disabled = !value; + break; + + default: + value = !rootAnimateState.disabled; + break; + } + return !!value; + } + }; + + /* + all animations call this shared animation triggering function internally. + The animationEvent variable refers to the JavaScript animation event that will be triggered + and the className value is the name of the animation that will be applied within the + CSS code. Element, `parentElement` and `afterElement` are provided DOM elements for the animation + and the onComplete callback will be fired once the animation is fully complete. + */ + function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, options, doneCallback) { + var noopCancel = noop; + var runner = animationRunner(element, animationEvent, className, options); + if (!runner) { + fireDOMOperation(); + fireBeforeCallbackAsync(); + fireAfterCallbackAsync(); + closeAnimation(); + return noopCancel; + } + + animationEvent = runner.event; + className = runner.className; + var elementEvents = angular.element._data(runner.node); + elementEvents = elementEvents && elementEvents.events; + + if (!parentElement) { + parentElement = afterElement ? afterElement.parent() : element.parent(); + } + + //skip the animation if animations are disabled, a parent is already being animated, + //the element is not currently attached to the document body or then completely close + //the animation if any matching animations are not found at all. + //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found. + if (animationsDisabled(element, parentElement)) { + fireDOMOperation(); + fireBeforeCallbackAsync(); + fireAfterCallbackAsync(); + closeAnimation(); + return noopCancel; + } + + var ngAnimateState = element.data(NG_ANIMATE_STATE) || {}; + var runningAnimations = ngAnimateState.active || {}; + var totalActiveAnimations = ngAnimateState.totalActive || 0; + var lastAnimation = ngAnimateState.last; + var skipAnimation = false; + + if (totalActiveAnimations > 0) { + var animationsToCancel = []; + if (!runner.isClassBased) { + if (animationEvent == 'leave' && runningAnimations['ng-leave']) { + skipAnimation = true; + } else { + //cancel all animations when a structural animation takes place + for (var klass in runningAnimations) { + animationsToCancel.push(runningAnimations[klass]); + } + ngAnimateState = {}; + cleanup(element, true); + } + } else if (lastAnimation.event == 'setClass') { + animationsToCancel.push(lastAnimation); + cleanup(element, className); + } else if (runningAnimations[className]) { + var current = runningAnimations[className]; + if (current.event == animationEvent) { + skipAnimation = true; + } else { + animationsToCancel.push(current); + cleanup(element, className); + } + } + + if (animationsToCancel.length > 0) { + forEach(animationsToCancel, function(operation) { + operation.cancel(); + }); + } + } + + if (runner.isClassBased + && !runner.isSetClassOperation + && animationEvent != 'animate' + && !skipAnimation) { + skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR + } + + if (skipAnimation) { + fireDOMOperation(); + fireBeforeCallbackAsync(); + fireAfterCallbackAsync(); + fireDoneCallbackAsync(); + return noopCancel; + } + + runningAnimations = ngAnimateState.active || {}; + totalActiveAnimations = ngAnimateState.totalActive || 0; + + if (animationEvent == 'leave') { + //there's no need to ever remove the listener since the element + //will be removed (destroyed) after the leave animation ends or + //is cancelled midway + element.one('$destroy', function(e) { + var element = angular.element(this); + var state = element.data(NG_ANIMATE_STATE); + if (state) { + var activeLeaveAnimation = state.active['ng-leave']; + if (activeLeaveAnimation) { + activeLeaveAnimation.cancel(); + cleanup(element, 'ng-leave'); + } + } + }); + } + + //the ng-animate class does nothing, but it's here to allow for + //parent animations to find and cancel child animations when needed + $$jqLite.addClass(element, NG_ANIMATE_CLASS_NAME); + if (options && options.tempClasses) { + forEach(options.tempClasses, function(className) { + $$jqLite.addClass(element, className); + }); + } + + var localAnimationCount = globalAnimationCounter++; + totalActiveAnimations++; + runningAnimations[className] = runner; + + element.data(NG_ANIMATE_STATE, { + last: runner, + active: runningAnimations, + index: localAnimationCount, + totalActive: totalActiveAnimations + }); + + //first we run the before animations and when all of those are complete + //then we perform the DOM operation and run the next set of animations + fireBeforeCallbackAsync(); + runner.before(function(cancelled) { + var data = element.data(NG_ANIMATE_STATE); + cancelled = cancelled || + !data || !data.active[className] || + (runner.isClassBased && data.active[className].event != animationEvent); + + fireDOMOperation(); + if (cancelled === true) { + closeAnimation(); + } else { + fireAfterCallbackAsync(); + runner.after(closeAnimation); + } + }); + + return runner.cancel; + + function fireDOMCallback(animationPhase) { + var eventName = '$animate:' + animationPhase; + if (elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) { + $$asyncCallback(function() { + element.triggerHandler(eventName, { + event: animationEvent, + className: className + }); + }); + } + } + + function fireBeforeCallbackAsync() { + fireDOMCallback('before'); + } + + function fireAfterCallbackAsync() { + fireDOMCallback('after'); + } + + function fireDoneCallbackAsync() { + fireDOMCallback('close'); + doneCallback(); + } + + //it is less complicated to use a flag than managing and canceling + //timeouts containing multiple callbacks. + function fireDOMOperation() { + if (!fireDOMOperation.hasBeenRun) { + fireDOMOperation.hasBeenRun = true; + domOperation(); + } + } + + function closeAnimation() { + if (!closeAnimation.hasBeenRun) { + if (runner) { //the runner doesn't exist if it fails to instantiate + runner.applyStyles(); + } + + closeAnimation.hasBeenRun = true; + if (options && options.tempClasses) { + forEach(options.tempClasses, function(className) { + $$jqLite.removeClass(element, className); + }); + } + + var data = element.data(NG_ANIMATE_STATE); + if (data) { + + /* only structural animations wait for reflow before removing an + animation, but class-based animations don't. An example of this + failing would be when a parent HTML tag has a ng-class attribute + causing ALL directives below to skip animations during the digest */ + if (runner && runner.isClassBased) { + cleanup(element, className); + } else { + $$asyncCallback(function() { + var data = element.data(NG_ANIMATE_STATE) || {}; + if (localAnimationCount == data.index) { + cleanup(element, className, animationEvent); + } + }); + element.data(NG_ANIMATE_STATE, data); + } + } + fireDoneCallbackAsync(); + } + } + } + + function cancelChildAnimations(element) { + var node = extractElementNode(element); + if (node) { + var nodes = angular.isFunction(node.getElementsByClassName) ? + node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) : + node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME); + forEach(nodes, function(element) { + element = angular.element(element); + var data = element.data(NG_ANIMATE_STATE); + if (data && data.active) { + forEach(data.active, function(runner) { + runner.cancel(); + }); + } + }); + } + } + + function cleanup(element, className) { + if (isMatchingElement(element, $rootElement)) { + if (!rootAnimateState.disabled) { + rootAnimateState.running = false; + rootAnimateState.structural = false; + } + } else if (className) { + var data = element.data(NG_ANIMATE_STATE) || {}; + + var removeAnimations = className === true; + if (!removeAnimations && data.active && data.active[className]) { + data.totalActive--; + delete data.active[className]; + } + + if (removeAnimations || !data.totalActive) { + $$jqLite.removeClass(element, NG_ANIMATE_CLASS_NAME); + element.removeData(NG_ANIMATE_STATE); + } + } + } + + function animationsDisabled(element, parentElement) { + if (rootAnimateState.disabled) { + return true; + } + + if (isMatchingElement(element, $rootElement)) { + return rootAnimateState.running; + } + + var allowChildAnimations, parentRunningAnimation, hasParent; + do { + //the element did not reach the root element which means that it + //is not apart of the DOM. Therefore there is no reason to do + //any animations on it + if (parentElement.length === 0) break; + + var isRoot = isMatchingElement(parentElement, $rootElement); + var state = isRoot ? rootAnimateState : (parentElement.data(NG_ANIMATE_STATE) || {}); + if (state.disabled) { + return true; + } + + //no matter what, for an animation to work it must reach the root element + //this implies that the element is attached to the DOM when the animation is run + if (isRoot) { + hasParent = true; + } + + //once a flag is found that is strictly false then everything before + //it will be discarded and all child animations will be restricted + if (allowChildAnimations !== false) { + var animateChildrenFlag = parentElement.data(NG_ANIMATE_CHILDREN); + if (angular.isDefined(animateChildrenFlag)) { + allowChildAnimations = animateChildrenFlag; + } + } + + parentRunningAnimation = parentRunningAnimation || + state.running || + (state.last && !state.last.isClassBased); + } + while (parentElement = parentElement.parent()); + + return !hasParent || (!allowChildAnimations && parentRunningAnimation); + } + }]); + + $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow', + function($window, $sniffer, $timeout, $$animateReflow) { + // Detect proper transitionend/animationend event names. + var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; + + // If unprefixed events are not supported but webkit-prefixed are, use the latter. + // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. + // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` + // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. + // Register both events in case `window.onanimationend` is not supported because of that, + // do the same for `transitionend` as Safari is likely to exhibit similar behavior. + // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit + // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition + if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { + CSS_PREFIX = '-webkit-'; + TRANSITION_PROP = 'WebkitTransition'; + TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; + } else { + TRANSITION_PROP = 'transition'; + TRANSITIONEND_EVENT = 'transitionend'; + } + + if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { + CSS_PREFIX = '-webkit-'; + ANIMATION_PROP = 'WebkitAnimation'; + ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; + } else { + ANIMATION_PROP = 'animation'; + ANIMATIONEND_EVENT = 'animationend'; + } + + var DURATION_KEY = 'Duration'; + var PROPERTY_KEY = 'Property'; + var DELAY_KEY = 'Delay'; + var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; + var ANIMATION_PLAYSTATE_KEY = 'PlayState'; + var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey'; + var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data'; + var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; + var CLOSING_TIME_BUFFER = 1.5; + var ONE_SECOND = 1000; + + var lookupCache = {}; + var parentCounter = 0; + var animationReflowQueue = []; + var cancelAnimationReflow; + function clearCacheAfterReflow() { + if (!cancelAnimationReflow) { + cancelAnimationReflow = $$animateReflow(function() { + animationReflowQueue = []; + cancelAnimationReflow = null; + lookupCache = {}; + }); + } + } + + function afterReflow(element, callback) { + if (cancelAnimationReflow) { + cancelAnimationReflow(); + } + animationReflowQueue.push(callback); + cancelAnimationReflow = $$animateReflow(function() { + forEach(animationReflowQueue, function(fn) { + fn(); + }); + + animationReflowQueue = []; + cancelAnimationReflow = null; + lookupCache = {}; + }); + } + + var closingTimer = null; + var closingTimestamp = 0; + var animationElementQueue = []; + function animationCloseHandler(element, totalTime) { + var node = extractElementNode(element); + element = angular.element(node); + + //this item will be garbage collected by the closing + //animation timeout + animationElementQueue.push(element); + + //but it may not need to cancel out the existing timeout + //if the timestamp is less than the previous one + var futureTimestamp = Date.now() + totalTime; + if (futureTimestamp <= closingTimestamp) { + return; + } + + $timeout.cancel(closingTimer); + + closingTimestamp = futureTimestamp; + closingTimer = $timeout(function() { + closeAllAnimations(animationElementQueue); + animationElementQueue = []; + }, totalTime, false); + } + + function closeAllAnimations(elements) { + forEach(elements, function(element) { + var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); + if (elementData) { + forEach(elementData.closeAnimationFns, function(fn) { + fn(); + }); + } + }); + } + + function getElementAnimationDetails(element, cacheKey) { + var data = cacheKey ? lookupCache[cacheKey] : null; + if (!data) { + var transitionDuration = 0; + var transitionDelay = 0; + var animationDuration = 0; + var animationDelay = 0; + + //we want all the styles defined before and after + forEach(element, function(element) { + if (element.nodeType == ELEMENT_NODE) { + var elementStyles = $window.getComputedStyle(element) || {}; + + var transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY]; + transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration); + + var transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY]; + transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay); + + var animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY]; + animationDelay = Math.max(parseMaxTime(elementStyles[ANIMATION_PROP + DELAY_KEY]), animationDelay); + + var aDuration = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]); + + if (aDuration > 0) { + aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1; + } + animationDuration = Math.max(aDuration, animationDuration); + } + }); + data = { + total: 0, + transitionDelay: transitionDelay, + transitionDuration: transitionDuration, + animationDelay: animationDelay, + animationDuration: animationDuration + }; + if (cacheKey) { + lookupCache[cacheKey] = data; + } + } + return data; + } + + function parseMaxTime(str) { + var maxValue = 0; + var values = isString(str) ? + str.split(/\s*,\s*/) : + []; + forEach(values, function(value) { + maxValue = Math.max(parseFloat(value) || 0, maxValue); + }); + return maxValue; + } + + function getCacheKey(element) { + var parentElement = element.parent(); + var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY); + if (!parentID) { + parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter); + parentID = parentCounter; + } + return parentID + '-' + extractElementNode(element).getAttribute('class'); + } + + function animateSetup(animationEvent, element, className, styles) { + var structural = ['ng-enter','ng-leave','ng-move'].indexOf(className) >= 0; + + var cacheKey = getCacheKey(element); + var eventCacheKey = cacheKey + ' ' + className; + var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0; + + var stagger = {}; + if (itemIndex > 0) { + var staggerClassName = className + '-stagger'; + var staggerCacheKey = cacheKey + ' ' + staggerClassName; + var applyClasses = !lookupCache[staggerCacheKey]; + + applyClasses && $$jqLite.addClass(element, staggerClassName); + + stagger = getElementAnimationDetails(element, staggerCacheKey); + + applyClasses && $$jqLite.removeClass(element, staggerClassName); + } + + $$jqLite.addClass(element, className); + + var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {}; + var timings = getElementAnimationDetails(element, eventCacheKey); + var transitionDuration = timings.transitionDuration; + var animationDuration = timings.animationDuration; + + if (structural && transitionDuration === 0 && animationDuration === 0) { + $$jqLite.removeClass(element, className); + return false; + } + + var blockTransition = styles || (structural && transitionDuration > 0); + var blockAnimation = animationDuration > 0 && + stagger.animationDelay > 0 && + stagger.animationDuration === 0; + + var closeAnimationFns = formerData.closeAnimationFns || []; + element.data(NG_ANIMATE_CSS_DATA_KEY, { + stagger: stagger, + cacheKey: eventCacheKey, + running: formerData.running || 0, + itemIndex: itemIndex, + blockTransition: blockTransition, + closeAnimationFns: closeAnimationFns + }); + + var node = extractElementNode(element); + + if (blockTransition) { + blockTransitions(node, true); + if (styles) { + element.css(styles); + } + } + + if (blockAnimation) { + blockAnimations(node, true); + } + + return true; + } + + function animateRun(animationEvent, element, className, activeAnimationComplete, styles) { + var node = extractElementNode(element); + var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY); + if (node.getAttribute('class').indexOf(className) == -1 || !elementData) { + activeAnimationComplete(); + return; + } + + var activeClassName = ''; + var pendingClassName = ''; + forEach(className.split(' '), function(klass, i) { + var prefix = (i > 0 ? ' ' : '') + klass; + activeClassName += prefix + '-active'; + pendingClassName += prefix + '-pending'; + }); + + var style = ''; + var appliedStyles = []; + var itemIndex = elementData.itemIndex; + var stagger = elementData.stagger; + var staggerTime = 0; + if (itemIndex > 0) { + var transitionStaggerDelay = 0; + if (stagger.transitionDelay > 0 && stagger.transitionDuration === 0) { + transitionStaggerDelay = stagger.transitionDelay * itemIndex; + } + + var animationStaggerDelay = 0; + if (stagger.animationDelay > 0 && stagger.animationDuration === 0) { + animationStaggerDelay = stagger.animationDelay * itemIndex; + appliedStyles.push(CSS_PREFIX + 'animation-play-state'); + } + + staggerTime = Math.round(Math.max(transitionStaggerDelay, animationStaggerDelay) * 100) / 100; + } + + if (!staggerTime) { + $$jqLite.addClass(element, activeClassName); + if (elementData.blockTransition) { + blockTransitions(node, false); + } + } + + var eventCacheKey = elementData.cacheKey + ' ' + activeClassName; + var timings = getElementAnimationDetails(element, eventCacheKey); + var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration); + if (maxDuration === 0) { + $$jqLite.removeClass(element, activeClassName); + animateClose(element, className); + activeAnimationComplete(); + return; + } + + if (!staggerTime && styles && Object.keys(styles).length > 0) { + if (!timings.transitionDuration) { + element.css('transition', timings.animationDuration + 's linear all'); + appliedStyles.push('transition'); + } + element.css(styles); + } + + var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay); + var maxDelayTime = maxDelay * ONE_SECOND; + + if (appliedStyles.length > 0) { + //the element being animated may sometimes contain comment nodes in + //the jqLite object, so we're safe to use a single variable to house + //the styles since there is always only one element being animated + var oldStyle = node.getAttribute('style') || ''; + if (oldStyle.charAt(oldStyle.length - 1) !== ';') { + oldStyle += ';'; + } + node.setAttribute('style', oldStyle + ' ' + style); + } + + var startTime = Date.now(); + var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT; + var animationTime = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER; + var totalTime = (staggerTime + animationTime) * ONE_SECOND; + + var staggerTimeout; + if (staggerTime > 0) { + $$jqLite.addClass(element, pendingClassName); + staggerTimeout = $timeout(function() { + staggerTimeout = null; + + if (timings.transitionDuration > 0) { + blockTransitions(node, false); + } + if (timings.animationDuration > 0) { + blockAnimations(node, false); + } + + $$jqLite.addClass(element, activeClassName); + $$jqLite.removeClass(element, pendingClassName); + + if (styles) { + if (timings.transitionDuration === 0) { + element.css('transition', timings.animationDuration + 's linear all'); + } + element.css(styles); + appliedStyles.push('transition'); + } + }, staggerTime * ONE_SECOND, false); + } + + element.on(css3AnimationEvents, onAnimationProgress); + elementData.closeAnimationFns.push(function() { + onEnd(); + activeAnimationComplete(); + }); + + elementData.running++; + animationCloseHandler(element, totalTime); + return onEnd; + + // This will automatically be called by $animate so + // there is no need to attach this internally to the + // timeout done method. + function onEnd() { + element.off(css3AnimationEvents, onAnimationProgress); + $$jqLite.removeClass(element, activeClassName); + $$jqLite.removeClass(element, pendingClassName); + if (staggerTimeout) { + $timeout.cancel(staggerTimeout); + } + animateClose(element, className); + var node = extractElementNode(element); + for (var i in appliedStyles) { + node.style.removeProperty(appliedStyles[i]); + } + } + + function onAnimationProgress(event) { + event.stopPropagation(); + var ev = event.originalEvent || event; + var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now(); + + /* Firefox (or possibly just Gecko) likes to not round values up + * when a ms measurement is used for the animation */ + var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); + + /* $manualTimeStamp is a mocked timeStamp value which is set + * within browserTrigger(). This is only here so that tests can + * mock animations properly. Real events fallback to event.timeStamp, + * or, if they don't, then a timeStamp is automatically created for them. + * We're checking to see if the timeStamp surpasses the expected delay, + * but we're using elapsedTime instead of the timeStamp on the 2nd + * pre-condition since animations sometimes close off early */ + if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { + activeAnimationComplete(); + } + } + } + + function blockTransitions(node, bool) { + node.style[TRANSITION_PROP + PROPERTY_KEY] = bool ? 'none' : ''; + } + + function blockAnimations(node, bool) { + node.style[ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY] = bool ? 'paused' : ''; + } + + function animateBefore(animationEvent, element, className, styles) { + if (animateSetup(animationEvent, element, className, styles)) { + return function(cancelled) { + cancelled && animateClose(element, className); + }; + } + } + + function animateAfter(animationEvent, element, className, afterAnimationComplete, styles) { + if (element.data(NG_ANIMATE_CSS_DATA_KEY)) { + return animateRun(animationEvent, element, className, afterAnimationComplete, styles); + } else { + animateClose(element, className); + afterAnimationComplete(); + } + } + + function animate(animationEvent, element, className, animationComplete, options) { + //If the animateSetup function doesn't bother returning a + //cancellation function then it means that there is no animation + //to perform at all + var preReflowCancellation = animateBefore(animationEvent, element, className, options.from); + if (!preReflowCancellation) { + clearCacheAfterReflow(); + animationComplete(); + return; + } + + //There are two cancellation functions: one is before the first + //reflow animation and the second is during the active state + //animation. The first function will take care of removing the + //data from the element which will not make the 2nd animation + //happen in the first place + var cancel = preReflowCancellation; + afterReflow(element, function() { + //once the reflow is complete then we point cancel to + //the new cancellation function which will remove all of the + //animation properties from the active animation + cancel = animateAfter(animationEvent, element, className, animationComplete, options.to); + }); + + return function(cancelled) { + (cancel || noop)(cancelled); + }; + } + + function animateClose(element, className) { + $$jqLite.removeClass(element, className); + var data = element.data(NG_ANIMATE_CSS_DATA_KEY); + if (data) { + if (data.running) { + data.running--; + } + if (!data.running || data.running === 0) { + element.removeData(NG_ANIMATE_CSS_DATA_KEY); + } + } + } + + return { + animate: function(element, className, from, to, animationCompleted, options) { + options = options || {}; + options.from = from; + options.to = to; + return animate('animate', element, className, animationCompleted, options); + }, + + enter: function(element, animationCompleted, options) { + options = options || {}; + return animate('enter', element, 'ng-enter', animationCompleted, options); + }, + + leave: function(element, animationCompleted, options) { + options = options || {}; + return animate('leave', element, 'ng-leave', animationCompleted, options); + }, + + move: function(element, animationCompleted, options) { + options = options || {}; + return animate('move', element, 'ng-move', animationCompleted, options); + }, + + beforeSetClass: function(element, add, remove, animationCompleted, options) { + options = options || {}; + var className = suffixClasses(remove, '-remove') + ' ' + + suffixClasses(add, '-add'); + var cancellationMethod = animateBefore('setClass', element, className, options.from); + if (cancellationMethod) { + afterReflow(element, animationCompleted); + return cancellationMethod; + } + clearCacheAfterReflow(); + animationCompleted(); + }, + + beforeAddClass: function(element, className, animationCompleted, options) { + options = options || {}; + var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), options.from); + if (cancellationMethod) { + afterReflow(element, animationCompleted); + return cancellationMethod; + } + clearCacheAfterReflow(); + animationCompleted(); + }, + + beforeRemoveClass: function(element, className, animationCompleted, options) { + options = options || {}; + var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), options.from); + if (cancellationMethod) { + afterReflow(element, animationCompleted); + return cancellationMethod; + } + clearCacheAfterReflow(); + animationCompleted(); + }, + + setClass: function(element, add, remove, animationCompleted, options) { + options = options || {}; + remove = suffixClasses(remove, '-remove'); + add = suffixClasses(add, '-add'); + var className = remove + ' ' + add; + return animateAfter('setClass', element, className, animationCompleted, options.to); + }, + + addClass: function(element, className, animationCompleted, options) { + options = options || {}; + return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted, options.to); + }, + + removeClass: function(element, className, animationCompleted, options) { + options = options || {}; + return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted, options.to); + } + }; + + function suffixClasses(classes, suffix) { + var className = ''; + classes = isArray(classes) ? classes : classes.split(/\s+/); + forEach(classes, function(klass, i) { + if (klass && klass.length > 0) { + className += (i > 0 ? ' ' : '') + klass + suffix; + } + }); + return className; + } + }]); + }]); + + +})(window, window.angular); diff --git a/UI/WebServerResources/js/vendor/angular-animate.min.js b/UI/WebServerResources/js/vendor/angular-animate.min.js new file mode 100644 index 0000000000..0b5b881470 --- /dev/null +++ b/UI/WebServerResources/js/vendor/angular-animate.min.js @@ -0,0 +1,33 @@ +/* + AngularJS v1.3.17 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(N,f,W){'use strict';f.module("ngAnimate",["ng"]).directive("ngAnimateChildren",function(){return function(X,r,g){g=g.ngAnimateChildren;f.isString(g)&&0===g.length?r.data("$$ngAnimateChildren",!0):X.$watch(g,function(f){r.data("$$ngAnimateChildren",!!f)})}}).factory("$$animateReflow",["$$rAF","$document",function(f,r){var g=r[0].body;return function(r){return f(function(){r(g.offsetWidth)})}}]).config(["$provide","$animateProvider",function(X,r){function g(f){for(var n=0;n=B&&b>=y&&c()}var m=g(e);a=e.data("$$ngAnimateCSS3Data");if(-1!=m.getAttribute("class").indexOf(b)&&a){var k= +"",t="";n(b.split(" "),function(a,b){var e=(0ARIA](http://www.w3.org/TR/wai-aria/) + * attributes that convey state or semantic information about the application for users + * of assistive technologies, such as screen readers. + * + *
+ * + * ## Usage + * + * For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following + * directives are supported: + * `ngModel`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`, `ngDblClick`, and `ngMessages`. + * + * Below is a more detailed breakdown of the attributes handled by ngAria: + * + * | Directive | Supported Attributes | + * |---------------------------------------------|----------------------------------------------------------------------------------------| + * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled | + * | {@link ng.directive:ngShow ngShow} | aria-hidden | + * | {@link ng.directive:ngHide ngHide} | aria-hidden | + * | {@link ng.directive:ngDblclick ngDblclick} | tabindex | + * | {@link module:ngMessages ngMessages} | aria-live | + * | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles | + * | {@link ng.directive:ngClick ngClick} | tabindex, keypress event, button role | + * + * Find out more information about each directive by reading the + * {@link guide/accessibility ngAria Developer Guide}. + * + * ##Example + * Using ngDisabled with ngAria: + * ```html + * + * ``` + * Becomes: + * ```html + * + * ``` + * + * ##Disabling Attributes + * It's possible to disable individual attributes added by ngAria with the + * {@link ngAria.$ariaProvider#config config} method. For more details, see the + * {@link guide/accessibility Developer Guide}. + */ + /* global -ngAriaModule */ +var ngAriaModule = angular.module('ngAria', ['ng']). + provider('$aria', $AriaProvider); + +/** + * @ngdoc provider + * @name $ariaProvider + * + * @description + * + * Used for configuring the ARIA attributes injected and managed by ngAria. + * + * ```js + * angular.module('myApp', ['ngAria'], function config($ariaProvider) { + * $ariaProvider.config({ + * ariaValue: true, + * tabindex: false + * }); + * }); + *``` + * + * ## Dependencies + * Requires the {@link ngAria} module to be installed. + * + */ +function $AriaProvider() { + var config = { + ariaHidden: true, + ariaChecked: true, + ariaDisabled: true, + ariaRequired: true, + ariaInvalid: true, + ariaMultiline: true, + ariaValue: true, + tabindex: true, + bindKeypress: true, + bindRoleForClick: true + }; + + /** + * @ngdoc method + * @name $ariaProvider#config + * + * @param {object} config object to enable/disable specific ARIA attributes + * + * - **ariaHidden** – `{boolean}` – Enables/disables aria-hidden tags + * - **ariaChecked** – `{boolean}` – Enables/disables aria-checked tags + * - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags + * - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags + * - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags + * - **ariaMultiline** – `{boolean}` – Enables/disables aria-multiline tags + * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags + * - **tabindex** – `{boolean}` – Enables/disables tabindex tags + * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on `<div>` and + * `<li>` elements with ng-click + * - **bindRoleForClick** – `{boolean}` – Adds role=button to non-interactive elements like `div` + * using ng-click, making them more accessible to users of assistive technologies + * + * @description + * Enables/disables various ARIA attributes + */ + this.config = function(newConfig) { + config = angular.extend(config, newConfig); + }; + + function watchExpr(attrName, ariaAttr, negate) { + return function(scope, elem, attr) { + var ariaCamelName = attr.$normalize(ariaAttr); + if (config[ariaCamelName] && !attr[ariaCamelName]) { + scope.$watch(attr[attrName], function(boolVal) { + // ensure boolean value + boolVal = negate ? !boolVal : !!boolVal; + elem.attr(ariaAttr, boolVal); + }); + } + }; + } + + /** + * @ngdoc service + * @name $aria + * + * @description + * @priority 200 + * + * The $aria service contains helper methods for applying common + * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives. + * + * ngAria injects common accessibility attributes that tell assistive technologies when HTML + * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria, + * let's review a code snippet from ngAria itself: + * + *```js + * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) { + * return $aria.$$watchExpr('ngDisabled', 'aria-disabled'); + * }]) + *``` + * Shown above, the ngAria module creates a directive with the same signature as the + * traditional `ng-disabled` directive. But this ngAria version is dedicated to + * solely managing accessibility attributes. The internal `$aria` service is used to watch the + * boolean attribute `ngDisabled`. If it has not been explicitly set by the developer, + * `aria-disabled` is injected as an attribute with its value synchronized to the value in + * `ngDisabled`. + * + * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do + * anything to enable this feature. The `aria-disabled` attribute is automatically managed + * simply as a silent side-effect of using `ng-disabled` with the ngAria module. + * + * The full list of directives that interface with ngAria: + * * **ngModel** + * * **ngShow** + * * **ngHide** + * * **ngClick** + * * **ngDblclick** + * * **ngMessages** + * * **ngDisabled** + * + * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each + * directive. + * + * + * ## Dependencies + * Requires the {@link ngAria} module to be installed. + */ + this.$get = function() { + return { + config: function(key) { + return config[key]; + }, + $$watchExpr: watchExpr + }; + }; +} + + +ngAriaModule.directive('ngShow', ['$aria', function($aria) { + return $aria.$$watchExpr('ngShow', 'aria-hidden', true); +}]) +.directive('ngHide', ['$aria', function($aria) { + return $aria.$$watchExpr('ngHide', 'aria-hidden', false); +}]) +.directive('ngModel', ['$aria', function($aria) { + + function shouldAttachAttr(attr, normalizedAttr, elem) { + return $aria.config(normalizedAttr) && !elem.attr(attr); + } + + function shouldAttachRole(role, elem) { + return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT'); + } + + function getShape(attr, elem) { + var type = attr.type, + role = attr.role; + + return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' : + ((type || role) === 'radio' || role === 'menuitemradio') ? 'radio' : + (type === 'range' || role === 'progressbar' || role === 'slider') ? 'range' : + (type || role) === 'textbox' || elem[0].nodeName === 'TEXTAREA' ? 'multiline' : ''; + } + + return { + restrict: 'A', + require: '?ngModel', + priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value + compile: function(elem, attr) { + var shape = getShape(attr, elem); + + return { + pre: function(scope, elem, attr, ngModel) { + if (shape === 'checkbox' && attr.type !== 'checkbox') { + //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles + ngModel.$isEmpty = function(value) { + return value === false; + }; + } + }, + post: function(scope, elem, attr, ngModel) { + var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem); + + function ngAriaWatchModelValue() { + return ngModel.$modelValue; + } + + function getRadioReaction() { + if (needsTabIndex) { + needsTabIndex = false; + return function ngAriaRadioReaction(newVal) { + var boolVal = (attr.value == ngModel.$viewValue); + elem.attr('aria-checked', boolVal); + elem.attr('tabindex', 0 - !boolVal); + }; + } else { + return function ngAriaRadioReaction(newVal) { + elem.attr('aria-checked', (attr.value == ngModel.$viewValue)); + }; + } + } + + function ngAriaCheckboxReaction() { + elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue)); + } + + switch (shape) { + case 'radio': + case 'checkbox': + if (shouldAttachRole(shape, elem)) { + elem.attr('role', shape); + } + if (shouldAttachAttr('aria-checked', 'ariaChecked', elem)) { + scope.$watch(ngAriaWatchModelValue, shape === 'radio' ? + getRadioReaction() : ngAriaCheckboxReaction); + } + break; + case 'range': + if (shouldAttachRole(shape, elem)) { + elem.attr('role', 'slider'); + } + if ($aria.config('ariaValue')) { + var needsAriaValuemin = !elem.attr('aria-valuemin') && + (attr.hasOwnProperty('min') || attr.hasOwnProperty('ngMin')); + var needsAriaValuemax = !elem.attr('aria-valuemax') && + (attr.hasOwnProperty('max') || attr.hasOwnProperty('ngMax')); + var needsAriaValuenow = !elem.attr('aria-valuenow'); + + if (needsAriaValuemin) { + attr.$observe('min', function ngAriaValueMinReaction(newVal) { + elem.attr('aria-valuemin', newVal); + }); + } + if (needsAriaValuemax) { + attr.$observe('max', function ngAriaValueMinReaction(newVal) { + elem.attr('aria-valuemax', newVal); + }); + } + if (needsAriaValuenow) { + scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) { + elem.attr('aria-valuenow', newVal); + }); + } + } + break; + case 'multiline': + if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) { + elem.attr('aria-multiline', true); + } + break; + } + + if (needsTabIndex) { + elem.attr('tabindex', 0); + } + + if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) { + scope.$watch(function ngAriaRequiredWatch() { + return ngModel.$error.required; + }, function ngAriaRequiredReaction(newVal) { + elem.attr('aria-required', !!newVal); + }); + } + + if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem)) { + scope.$watch(function ngAriaInvalidWatch() { + return ngModel.$invalid; + }, function ngAriaInvalidReaction(newVal) { + elem.attr('aria-invalid', !!newVal); + }); + } + } + }; + } + }; +}]) +.directive('ngDisabled', ['$aria', function($aria) { + return $aria.$$watchExpr('ngDisabled', 'aria-disabled'); +}]) +.directive('ngMessages', function() { + return { + restrict: 'A', + require: '?ngMessages', + link: function(scope, elem, attr, ngMessages) { + if (!elem.attr('aria-live')) { + elem.attr('aria-live', 'assertive'); + } + } + }; +}) +.directive('ngClick',['$aria', '$parse', function($aria, $parse) { + return { + restrict: 'A', + compile: function(elem, attr) { + var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true); + return function(scope, elem, attr) { + + var nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA']; + + function isNodeOneOf(elem, nodeTypeArray) { + if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) { + return true; + } + } + + if ($aria.config('bindRoleForClick') + && !elem.attr('role') + && !isNodeOneOf(elem, nodeBlackList)) { + elem.attr('role', 'button'); + } + + if ($aria.config('tabindex') && !elem.attr('tabindex')) { + elem.attr('tabindex', 0); + } + + if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) { + elem.on('keypress', function(event) { + var keyCode = event.which || event.keyCode; + if (keyCode === 32 || keyCode === 13) { + scope.$apply(callback); + } + + function callback() { + fn(scope, { $event: event }); + } + }); + } + }; + } + }; +}]) +.directive('ngDblclick', ['$aria', function($aria) { + return function(scope, elem, attr) { + if ($aria.config('tabindex') && !elem.attr('tabindex')) { + elem.attr('tabindex', 0); + } + }; +}]); + + +})(window, window.angular); diff --git a/UI/WebServerResources/js/vendor/angular-aria.min.js b/UI/WebServerResources/js/vendor/angular-aria.min.js new file mode 100644 index 0000000000..945b89761c --- /dev/null +++ b/UI/WebServerResources/js/vendor/angular-aria.min.js @@ -0,0 +1,13 @@ +/* + AngularJS v1.4.3 + (c) 2010-2015 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(s,n,t){'use strict';n.module("ngAria",["ng"]).provider("$aria",function(){function a(a,f,l){return function(m,d,e){var b=e.$normalize(f);c[b]&&!e[b]&&m.$watch(e[a],function(b){b=l?!b:!!b;d.attr(f,b)})}}var c={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaMultiline:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0,bindRoleForClick:!0};this.config=function(a){c=n.extend(c,a)};this.$get=function(){return{config:function(a){return c[a]},$$watchExpr:a}}}).directive("ngShow", +["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",!1)}]).directive("ngModel",["$aria",function(a){function c(c,m,d){return a.config(m)&&!d.attr(c)}function k(a,c){return!c.attr("role")&&c.attr("type")===a&&"INPUT"!==c[0].nodeName}function f(a,c){var d=a.type,e=a.role;return"checkbox"===(d||e)||"menuitemcheckbox"===e?"checkbox":"radio"===(d||e)||"menuitemradio"===e?"radio":"range"===d||"progressbar"=== +e||"slider"===e?"range":"textbox"===(d||e)||"TEXTAREA"===c[0].nodeName?"multiline":""}return{restrict:"A",require:"?ngModel",priority:200,compile:function(l,m){var d=f(m,l);return{pre:function(a,b,c,g){"checkbox"===d&&"checkbox"!==c.type&&(g.$isEmpty=function(b){return!1===b})},post:function(e,b,h,g){function f(){return g.$modelValue}function m(){return p?(p=!1,function(a){a=h.value==g.$viewValue;b.attr("aria-checked",a);b.attr("tabindex",0-!a)}):function(a){b.attr("aria-checked",h.value==g.$viewValue)}} +function l(){b.attr("aria-checked",!g.$isEmpty(g.$viewValue))}var p=c("tabindex","tabindex",b);switch(d){case "radio":case "checkbox":k(d,b)&&b.attr("role",d);c("aria-checked","ariaChecked",b)&&e.$watch(f,"radio"===d?m():l);break;case "range":k(d,b)&&b.attr("role","slider");if(a.config("ariaValue")){var n=!b.attr("aria-valuemin")&&(h.hasOwnProperty("min")||h.hasOwnProperty("ngMin")),q=!b.attr("aria-valuemax")&&(h.hasOwnProperty("max")||h.hasOwnProperty("ngMax")),r=!b.attr("aria-valuenow");n&&h.$observe("min", +function(a){b.attr("aria-valuemin",a)});q&&h.$observe("max",function(a){b.attr("aria-valuemax",a)});r&&e.$watch(f,function(a){b.attr("aria-valuenow",a)})}break;case "multiline":c("aria-multiline","ariaMultiline",b)&&b.attr("aria-multiline",!0)}p&&b.attr("tabindex",0);g.$validators.required&&c("aria-required","ariaRequired",b)&&e.$watch(function(){return g.$error.required},function(a){b.attr("aria-required",!!a)});c("aria-invalid","ariaInvalid",b)&&e.$watch(function(){return g.$invalid},function(a){b.attr("aria-invalid", +!!a)})}}}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled")}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,c,k,f){c.attr("aria-live")||c.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse",function(a,c){return{restrict:"A",compile:function(k,f){var l=c(f.ngClick,null,!0);return function(c,d,e){function b(a,b){if(-1!==b.indexOf(a[0].nodeName))return!0}var f=["BUTTON","A","INPUT","TEXTAREA"]; +!a.config("bindRoleForClick")||d.attr("role")||b(d,f)||d.attr("role","button");a.config("tabindex")&&!d.attr("tabindex")&&d.attr("tabindex",0);if(a.config("bindKeypress")&&!e.ngKeypress&&!b(d,f))d.on("keypress",function(a){function b(){l(c,{$event:a})}var d=a.which||a.keyCode;32!==d&&13!==d||c.$apply(b)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(c,k,f){a.config("tabindex")&&!k.attr("tabindex")&&k.attr("tabindex",0)}}])})(window,window.angular); +//# sourceMappingURL=angular-aria.min.js.map diff --git a/UI/WebServerResources/js/vendor/angular-aria.min.js.map b/UI/WebServerResources/js/vendor/angular-aria.min.js.map new file mode 100644 index 0000000000..a3e785f42f --- /dev/null +++ b/UI/WebServerResources/js/vendor/angular-aria.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-aria.min.js", +"lineCount":12, +"mappings":"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", +"sources":["angular-aria.js"], +"names":["window","angular","undefined","module","provider","ngAriaModule","$AriaProvider","watchExpr","attrName","ariaAttr","negate","scope","elem","attr","ariaCamelName","$normalize","config","$watch","boolVal","ariaHidden","ariaChecked","ariaDisabled","ariaRequired","ariaInvalid","ariaMultiline","ariaValue","tabindex","bindKeypress","bindRoleForClick","this.config","newConfig","extend","$get","this.$get","key","$$watchExpr","directive","$aria","shouldAttachAttr","normalizedAttr","shouldAttachRole","role","nodeName","getShape","type","restrict","require","priority","compile","shape","pre","ngModel","$isEmpty","ngModel.$isEmpty","value","post","ngAriaWatchModelValue","$modelValue","getRadioReaction","needsTabIndex","ngAriaRadioReaction","newVal","$viewValue","ngAriaCheckboxReaction","needsAriaValuemin","hasOwnProperty","needsAriaValuemax","needsAriaValuenow","$observe","ngAriaValueMinReaction","ngAriaValueNowReaction","$validators","required","ngAriaRequiredWatch","$error","ngAriaRequiredReaction","ngAriaInvalidWatch","$invalid","ngAriaInvalidReaction","link","ngMessages","$parse","fn","ngClick","isNodeOneOf","nodeTypeArray","indexOf","nodeBlackList","ngKeypress","on","event","callback","$event","keyCode","which","$apply"] +} diff --git a/UI/WebServerResources/js/vendor/angular-file-upload.min.js b/UI/WebServerResources/js/vendor/angular-file-upload.min.js new file mode 100644 index 0000000000..fff0e666d8 --- /dev/null +++ b/UI/WebServerResources/js/vendor/angular-file-upload.min.js @@ -0,0 +1,7 @@ +/* + angular-file-upload v1.2.0 + https://github.com/nervgh/angular-file-upload +*/ + +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=r(n(2)),o=r(n(3)),s=r(n(4)),a=r(n(5)),u=r(n(6)),l=r(n(7)),c=r(n(1)),f=r(n(8)),p=r(n(9)),d=r(n(10)),h=r(n(11)),v=r(n(12));angular.module(i.name,[]).value("fileUploaderOptions",o).factory("FileUploader",s).factory("FileLikeObject",a).factory("FileItem",u).factory("FileDirective",l).factory("FileSelect",c).factory("FileDrop",f).factory("FileOver",p).directive("nvFileSelect",d).directive("nvFileDrop",h).directive("nvFileOver",v).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver",function(e,t,n,r,i,o,s){e.FileLikeObject=t,e.FileItem=n,e.FileDirective=r,e.FileSelect=i,e.FileDrop=o,e.FileOver=s}])},function(e,t,n){"use strict";function r(e){var t=function(e){function t(e){u(this,t),this.events={$destroy:"destroy",change:"onChange"},this.prop="select",s(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return a(t,e),o(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},isEmptyAfterSelection:{value:function(){return!!this.element.attr("multiple")}},onChange:{value:function(){var e=this.uploader.isHTML5?this.element[0].files:this.element[0],t=this.getOptions(),n=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(e,t,n),this.isEmptyAfterSelection()&&this.element.prop("value",null)}}}),t}(e);return t}var i=function(e){return e&&e.__esModule?e["default"]:e},o=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},a=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},u=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};e.exports=r;i(n(2));r.$inject=["FileDirective"]},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){"use strict";e.exports={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}},function(e,t,n){"use strict";function r(e,t,n,r,i,v){var m=r.File,_=r.FormData,g=function(){function r(t){s(this,r);var n=a(e);u(this,n,t,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}return o(r,{addToQueue:{value:function(e,t,n){var r=this.isArrayLikeObject(e)?e:[e],o=this._getFilters(n),s=this.queue.length,a=[];l(r,function(e){var n=new i(e);if(this._isValidFile(n,o,t)){var r=new v(this,e,t);a.push(r),this.queue.push(r),this._onAfterAddingFile(r)}else{var s=o[this._failFilterIndex];this._onWhenAddingFileFailed(n,s,t)}},this),this.queue.length!==s&&(this._onAfterAddingAll(a),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()}},removeFromQueue:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t];n.isUploading&&n.cancel(),this.queue.splice(t,1),n._destroy(),this.progress=this._getTotalProgress()}},clearQueue:{value:function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}},uploadItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhrTransport":"_iframeTransport";n._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[r](n))}},cancelItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhr":"_form";n&&n.isUploading&&n[r].abort()}},uploadAll:{value:function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(l(e,function(e){e._prepareToUploading()}),e[0].upload())}},cancelAll:{value:function(){var e=this.getNotUploadedItems();l(e,function(e){e.cancel()})}},isFile:{value:function(e){return this.constructor.isFile(e)}},isFileLikeObject:{value:function(e){return this.constructor.isFileLikeObject(e)}},isArrayLikeObject:{value:function(e){return this.constructor.isArrayLikeObject(e)}},getIndexOfItem:{value:function(e){return f(e)?e:this.queue.indexOf(e)}},getNotUploadedItems:{value:function(){return this.queue.filter(function(e){return!e.isUploaded})}},getReadyItems:{value:function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})}},destroy:{value:function(){l(this._directives,function(e){l(this._directives[e],function(e){e.destroy()},this)},this)}},onAfterAddingAll:{value:function(e){}},onAfterAddingFile:{value:function(e){}},onWhenAddingFileFailed:{value:function(e,t,n){}},onBeforeUploadItem:{value:function(e){}},onProgressItem:{value:function(e,t){}},onProgressAll:{value:function(e){}},onSuccessItem:{value:function(e,t,n,r){}},onErrorItem:{value:function(e,t,n,r){}},onCancelItem:{value:function(e,t,n,r){}},onCompleteItem:{value:function(e,t,n,r){}},onCompleteAll:{value:function(){}},_getTotalProgress:{value:function(e){if(this.removeAfterUpload)return e||0;var t=this.getNotUploadedItems().length,n=t?this.queue.length-t:this.queue.length,r=100/this.queue.length,i=(e||0)*r/100;return Math.round(n*r+i)}},_getFilters:{value:function(e){if(!e)return this.filters;if(d(e))return e;var t=e.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==t.indexOf(e.name)},this)}},_render:{value:function(){t.$$phase||t.$apply()}},_folderFilter:{value:function(e){return!(!e.size&&!e.type)}},_queueLimitFilter:{value:function(){return this.queue.length=200&&300>e||304===e}},_transformResponse:{value:function(e,t){var r=this._headersGetter(t);return l(n.defaults.transformResponse,function(t){e=t(e,r)}),e}},_parseHeaders:{value:function(e){var t,n,r,i={};return e?(l(e.split("\n"),function(e){r=e.indexOf(":"),t=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim(),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},_headersGetter:{value:function(e){return function(t){return t?e[t.toLowerCase()]||null:e}}},_xhrTransport:{value:function(e){var t=e._xhr=new XMLHttpRequest,n=new _,r=this;if(r._onBeforeUploadItem(e),l(e.formData,function(e){l(e,function(e,t){n.append(t,e)})}),"number"!=typeof e._file.size)throw new TypeError("The file specified is no longer valid");n.append(e.alias,e._file,e.file.name),t.upload.onprogress=function(t){var n=Math.round(t.lengthComputable?100*t.loaded/t.total:0);r._onProgressItem(e,n)},t.onload=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n),o=r._isSuccessCode(t.status)?"Success":"Error",s="_on"+o+"Item";r[s](e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.onerror=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n);r._onErrorItem(e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.onabort=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n);r._onCancelItem(e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.open(e.method,e.url,!0),t.withCredentials=e.withCredentials,l(e.headers,function(e,n){t.setRequestHeader(n,e)}),t.send(n),this._render()}},_iframeTransport:{value:function(e){var t=h('
'),n=h('