From 624833eca9c83f6743d309d6269fae4a26a412e6 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 28 Aug 2015 14:09:20 -0400 Subject: [PATCH] (fix) updates for new packages --- UI/WebServerResources/css/styles.css | 2221 ++++++++++++++--- UI/WebServerResources/css/styles.css.map | 2 +- UI/WebServerResources/js/Common.js | 4 +- UI/WebServerResources/js/Common.js.map | 2 +- UI/WebServerResources/js/Contacts.js | 2 +- UI/WebServerResources/js/Contacts.js.map | 2 +- UI/WebServerResources/js/Contacts.services.js | 2 +- .../js/Contacts.services.js.map | 2 +- UI/WebServerResources/js/Mailer.js | 2 +- UI/WebServerResources/js/Mailer.js.map | 2 +- UI/WebServerResources/js/Mailer.services.js | 3 +- .../js/Mailer.services.js.map | 2 +- .../js/Scheduler.services.js | 2 +- .../js/Scheduler.services.js.map | 2 +- .../js/vendor/angular-material.js | 459 ++-- .../js/vendor/angular-material.min.js | 17 +- 16 files changed, 2168 insertions(+), 558 deletions(-) diff --git a/UI/WebServerResources/css/styles.css b/UI/WebServerResources/css/styles.css index 172aa6fae..0634e924b 100644 --- a/UI/WebServerResources/css/styles.css +++ b/UI/WebServerResources/css/styles.css @@ -6114,6 +6114,10 @@ md-autocomplete { .md-autocomplete-suggestions { border: 1px solid #fff; } } +@media (max-width: 600px) { + .md-autocomplete-suggestions-container { + right: 16px; } } + /*! _extends.scss - */ md-backdrop { z-index: 50; @@ -6865,6 +6869,15 @@ md-chips.sg-readonly .md-chips { md-chips.sg-readonly .md-chips .md-chip-content { max-width: initial; } +.sg-chips-autocomplete { + width: 360px; } + +.md-contact-suggestion .md-contact-name { + width: auto; } + +.md-contact-suggestion .md-contact-email { + margin-left: 8px; } + /*! content/_extends.scss - */ md-content { display: block; @@ -7231,7 +7244,8 @@ md-dialog { border: 1px solid #fff; } } @media (max-width: 600px) { - [flex-sm="100"] { + [flex-sm="100"], + .flex-sm-100 { max-width: 100%; max-height: 100%; width: 100%; @@ -8482,262 +8496,1666 @@ md-toolbar .md-menu { 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); } +/*! progressCircular/_extends.scss - */ +@-webkit-keyframes outer-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } +@keyframes outer-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } -md-progress-linear[md-mode="indeterminate"] { +@-webkit-keyframes left-wobble { + 0%, 100% { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } } + +@keyframes left-wobble { + 0%, 100% { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } } + +@-webkit-keyframes right-wobble { + 0%, 100% { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } } + +@keyframes right-wobble { + 0%, 100% { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } } + +@-webkit-keyframes sporadic-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + 100% { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +@keyframes sporadic-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + 100% { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +md-progress-circular { + width: 50px; + height: 50px; 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: relative; + padding-top: 0 !important; + margin-bottom: 0 !important; + overflow: hidden; } + md-progress-circular .md-inner { + width: 50px; + height: 50px; + position: relative; } + md-progress-circular .md-inner .md-gap { + position: absolute; + left: 24px; + right: 24px; + top: 0; + bottom: 0; + border-top-width: 5px; + border-top-style: solid; + box-sizing: border-box; } + md-progress-circular .md-inner .md-left, md-progress-circular .md-inner .md-right { 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; } + height: 50px; + width: 25px; + overflow: hidden; } + md-progress-circular .md-inner .md-left .md-half-circle, md-progress-circular .md-inner .md-right .md-half-circle { + position: absolute; + top: 0; + width: 50px; + height: 50px; + box-sizing: border-box; + border-width: 5px; + border-style: solid; + border-bottom-color: transparent; + border-radius: 50%; } + md-progress-circular .md-inner .md-left { + left: 0; } + md-progress-circular .md-inner .md-left .md-half-circle { + left: 0; + border-right-color: transparent; } + md-progress-circular .md-inner .md-right { + right: 0; } + md-progress-circular .md-inner .md-right .md-half-circle { + right: 0; + border-left-color: transparent; } + md-progress-circular[value="0"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="0"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); } + md-progress-circular[value="0"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="1"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="1"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-131.4deg); + -ms-transform: rotate(-131.4deg); + transform: rotate(-131.4deg); } + md-progress-circular[value="1"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="2"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="2"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-127.8deg); + -ms-transform: rotate(-127.8deg); + transform: rotate(-127.8deg); } + md-progress-circular[value="2"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="3"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="3"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-124.2deg); + -ms-transform: rotate(-124.2deg); + transform: rotate(-124.2deg); } + md-progress-circular[value="3"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="4"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="4"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-120.6deg); + -ms-transform: rotate(-120.6deg); + transform: rotate(-120.6deg); } + md-progress-circular[value="4"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="5"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="5"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-117deg); + -ms-transform: rotate(-117deg); + transform: rotate(-117deg); } + md-progress-circular[value="5"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="6"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="6"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-113.4deg); + -ms-transform: rotate(-113.4deg); + transform: rotate(-113.4deg); } + md-progress-circular[value="6"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="7"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="7"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-109.8deg); + -ms-transform: rotate(-109.8deg); + transform: rotate(-109.8deg); } + md-progress-circular[value="7"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="8"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="8"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-106.2deg); + -ms-transform: rotate(-106.2deg); + transform: rotate(-106.2deg); } + md-progress-circular[value="8"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="9"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="9"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-102.6deg); + -ms-transform: rotate(-102.6deg); + transform: rotate(-102.6deg); } + md-progress-circular[value="9"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="10"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="10"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-99deg); + -ms-transform: rotate(-99deg); + transform: rotate(-99deg); } + md-progress-circular[value="10"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="11"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="11"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-95.4deg); + -ms-transform: rotate(-95.4deg); + transform: rotate(-95.4deg); } + md-progress-circular[value="11"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="12"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="12"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-91.8deg); + -ms-transform: rotate(-91.8deg); + transform: rotate(-91.8deg); } + md-progress-circular[value="12"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="13"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="13"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-88.2deg); + -ms-transform: rotate(-88.2deg); + transform: rotate(-88.2deg); } + md-progress-circular[value="13"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="14"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="14"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-84.6deg); + -ms-transform: rotate(-84.6deg); + transform: rotate(-84.6deg); } + md-progress-circular[value="14"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="15"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="15"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-81deg); + -ms-transform: rotate(-81deg); + transform: rotate(-81deg); } + md-progress-circular[value="15"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="16"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="16"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-77.4deg); + -ms-transform: rotate(-77.4deg); + transform: rotate(-77.4deg); } + md-progress-circular[value="16"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="17"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="17"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-73.8deg); + -ms-transform: rotate(-73.8deg); + transform: rotate(-73.8deg); } + md-progress-circular[value="17"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="18"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="18"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-70.2deg); + -ms-transform: rotate(-70.2deg); + transform: rotate(-70.2deg); } + md-progress-circular[value="18"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="19"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="19"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-66.6deg); + -ms-transform: rotate(-66.6deg); + transform: rotate(-66.6deg); } + md-progress-circular[value="19"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="20"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="20"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-63deg); + -ms-transform: rotate(-63deg); + transform: rotate(-63deg); } + md-progress-circular[value="20"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="21"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="21"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-59.4deg); + -ms-transform: rotate(-59.4deg); + transform: rotate(-59.4deg); } + md-progress-circular[value="21"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="22"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="22"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-55.8deg); + -ms-transform: rotate(-55.8deg); + transform: rotate(-55.8deg); } + md-progress-circular[value="22"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="23"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="23"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-52.2deg); + -ms-transform: rotate(-52.2deg); + transform: rotate(-52.2deg); } + md-progress-circular[value="23"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="24"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="24"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-48.6deg); + -ms-transform: rotate(-48.6deg); + transform: rotate(-48.6deg); } + md-progress-circular[value="24"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="25"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="25"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); } + md-progress-circular[value="25"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="26"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="26"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-41.4deg); + -ms-transform: rotate(-41.4deg); + transform: rotate(-41.4deg); } + md-progress-circular[value="26"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="27"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="27"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-37.8deg); + -ms-transform: rotate(-37.8deg); + transform: rotate(-37.8deg); } + md-progress-circular[value="27"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="28"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="28"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-34.2deg); + -ms-transform: rotate(-34.2deg); + transform: rotate(-34.2deg); } + md-progress-circular[value="28"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="29"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="29"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-30.6deg); + -ms-transform: rotate(-30.6deg); + transform: rotate(-30.6deg); } + md-progress-circular[value="29"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="30"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="30"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-27deg); + -ms-transform: rotate(-27deg); + transform: rotate(-27deg); } + md-progress-circular[value="30"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="31"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="31"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-23.4deg); + -ms-transform: rotate(-23.4deg); + transform: rotate(-23.4deg); } + md-progress-circular[value="31"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="32"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="32"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-19.8deg); + -ms-transform: rotate(-19.8deg); + transform: rotate(-19.8deg); } + md-progress-circular[value="32"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="33"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="33"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-16.2deg); + -ms-transform: rotate(-16.2deg); + transform: rotate(-16.2deg); } + md-progress-circular[value="33"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="34"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="34"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-12.6deg); + -ms-transform: rotate(-12.6deg); + transform: rotate(-12.6deg); } + md-progress-circular[value="34"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="35"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="35"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-9deg); + -ms-transform: rotate(-9deg); + transform: rotate(-9deg); } + md-progress-circular[value="35"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="36"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="36"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-5.4deg); + -ms-transform: rotate(-5.4deg); + transform: rotate(-5.4deg); } + md-progress-circular[value="36"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="37"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="37"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(-1.8deg); + -ms-transform: rotate(-1.8deg); + transform: rotate(-1.8deg); } + md-progress-circular[value="37"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="38"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="38"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(1.8deg); + -ms-transform: rotate(1.8deg); + transform: rotate(1.8deg); } + md-progress-circular[value="38"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="39"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="39"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(5.4deg); + -ms-transform: rotate(5.4deg); + transform: rotate(5.4deg); } + md-progress-circular[value="39"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="40"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="40"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(9deg); + -ms-transform: rotate(9deg); + transform: rotate(9deg); } + md-progress-circular[value="40"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="41"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="41"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(12.6deg); + -ms-transform: rotate(12.6deg); + transform: rotate(12.6deg); } + md-progress-circular[value="41"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="42"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="42"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(16.2deg); + -ms-transform: rotate(16.2deg); + transform: rotate(16.2deg); } + md-progress-circular[value="42"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="43"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="43"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(19.8deg); + -ms-transform: rotate(19.8deg); + transform: rotate(19.8deg); } + md-progress-circular[value="43"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="44"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="44"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(23.4deg); + -ms-transform: rotate(23.4deg); + transform: rotate(23.4deg); } + md-progress-circular[value="44"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="45"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="45"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(27deg); + -ms-transform: rotate(27deg); + transform: rotate(27deg); } + md-progress-circular[value="45"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="46"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="46"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(30.6deg); + -ms-transform: rotate(30.6deg); + transform: rotate(30.6deg); } + md-progress-circular[value="46"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="47"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="47"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(34.2deg); + -ms-transform: rotate(34.2deg); + transform: rotate(34.2deg); } + md-progress-circular[value="47"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="48"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="48"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(37.8deg); + -ms-transform: rotate(37.8deg); + transform: rotate(37.8deg); } + md-progress-circular[value="48"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="49"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="49"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(41.4deg); + -ms-transform: rotate(41.4deg); + transform: rotate(41.4deg); } + md-progress-circular[value="49"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="50"] .md-inner .md-left .md-half-circle { + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); } + md-progress-circular[value="50"] .md-inner .md-right .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="50"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + border-bottom-color: transparent !important; } + md-progress-circular[value="51"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(138.6deg); + -ms-transform: rotate(138.6deg); + transform: rotate(138.6deg); } + md-progress-circular[value="51"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="51"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="52"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(142.2deg); + -ms-transform: rotate(142.2deg); + transform: rotate(142.2deg); } + md-progress-circular[value="52"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="52"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="53"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(145.8deg); + -ms-transform: rotate(145.8deg); + transform: rotate(145.8deg); } + md-progress-circular[value="53"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="53"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="54"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(149.4deg); + -ms-transform: rotate(149.4deg); + transform: rotate(149.4deg); } + md-progress-circular[value="54"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="54"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="55"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(153deg); + -ms-transform: rotate(153deg); + transform: rotate(153deg); } + md-progress-circular[value="55"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="55"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="56"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(156.6deg); + -ms-transform: rotate(156.6deg); + transform: rotate(156.6deg); } + md-progress-circular[value="56"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="56"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="57"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(160.2deg); + -ms-transform: rotate(160.2deg); + transform: rotate(160.2deg); } + md-progress-circular[value="57"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="57"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="58"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(163.8deg); + -ms-transform: rotate(163.8deg); + transform: rotate(163.8deg); } + md-progress-circular[value="58"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="58"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="59"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(167.4deg); + -ms-transform: rotate(167.4deg); + transform: rotate(167.4deg); } + md-progress-circular[value="59"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="59"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="60"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(171deg); + -ms-transform: rotate(171deg); + transform: rotate(171deg); } + md-progress-circular[value="60"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="60"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="61"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(174.6deg); + -ms-transform: rotate(174.6deg); + transform: rotate(174.6deg); } + md-progress-circular[value="61"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="61"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="62"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(178.2deg); + -ms-transform: rotate(178.2deg); + transform: rotate(178.2deg); } + md-progress-circular[value="62"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="62"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="63"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(181.8deg); + -ms-transform: rotate(181.8deg); + transform: rotate(181.8deg); } + md-progress-circular[value="63"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="63"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="64"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(185.4deg); + -ms-transform: rotate(185.4deg); + transform: rotate(185.4deg); } + md-progress-circular[value="64"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="64"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="65"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(189deg); + -ms-transform: rotate(189deg); + transform: rotate(189deg); } + md-progress-circular[value="65"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="65"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="66"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(192.6deg); + -ms-transform: rotate(192.6deg); + transform: rotate(192.6deg); } + md-progress-circular[value="66"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="66"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="67"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(196.2deg); + -ms-transform: rotate(196.2deg); + transform: rotate(196.2deg); } + md-progress-circular[value="67"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="67"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="68"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(199.8deg); + -ms-transform: rotate(199.8deg); + transform: rotate(199.8deg); } + md-progress-circular[value="68"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="68"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="69"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(203.4deg); + -ms-transform: rotate(203.4deg); + transform: rotate(203.4deg); } + md-progress-circular[value="69"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="69"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="70"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(207deg); + -ms-transform: rotate(207deg); + transform: rotate(207deg); } + md-progress-circular[value="70"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="70"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="71"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(210.6deg); + -ms-transform: rotate(210.6deg); + transform: rotate(210.6deg); } + md-progress-circular[value="71"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="71"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="72"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(214.2deg); + -ms-transform: rotate(214.2deg); + transform: rotate(214.2deg); } + md-progress-circular[value="72"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="72"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="73"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(217.8deg); + -ms-transform: rotate(217.8deg); + transform: rotate(217.8deg); } + md-progress-circular[value="73"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="73"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="74"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(221.4deg); + -ms-transform: rotate(221.4deg); + transform: rotate(221.4deg); } + md-progress-circular[value="74"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="74"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="75"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(225deg); + -ms-transform: rotate(225deg); + transform: rotate(225deg); } + md-progress-circular[value="75"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="75"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="76"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(228.6deg); + -ms-transform: rotate(228.6deg); + transform: rotate(228.6deg); } + md-progress-circular[value="76"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="76"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="77"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(232.2deg); + -ms-transform: rotate(232.2deg); + transform: rotate(232.2deg); } + md-progress-circular[value="77"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="77"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="78"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(235.8deg); + -ms-transform: rotate(235.8deg); + transform: rotate(235.8deg); } + md-progress-circular[value="78"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="78"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="79"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(239.4deg); + -ms-transform: rotate(239.4deg); + transform: rotate(239.4deg); } + md-progress-circular[value="79"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="79"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="80"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(243deg); + -ms-transform: rotate(243deg); + transform: rotate(243deg); } + md-progress-circular[value="80"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="80"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="81"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(246.6deg); + -ms-transform: rotate(246.6deg); + transform: rotate(246.6deg); } + md-progress-circular[value="81"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="81"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="82"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(250.2deg); + -ms-transform: rotate(250.2deg); + transform: rotate(250.2deg); } + md-progress-circular[value="82"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="82"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="83"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(253.8deg); + -ms-transform: rotate(253.8deg); + transform: rotate(253.8deg); } + md-progress-circular[value="83"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="83"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="84"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(257.4deg); + -ms-transform: rotate(257.4deg); + transform: rotate(257.4deg); } + md-progress-circular[value="84"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="84"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="85"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(261deg); + -ms-transform: rotate(261deg); + transform: rotate(261deg); } + md-progress-circular[value="85"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="85"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="86"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(264.6deg); + -ms-transform: rotate(264.6deg); + transform: rotate(264.6deg); } + md-progress-circular[value="86"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="86"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="87"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(268.2deg); + -ms-transform: rotate(268.2deg); + transform: rotate(268.2deg); } + md-progress-circular[value="87"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="87"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="88"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(271.8deg); + -ms-transform: rotate(271.8deg); + transform: rotate(271.8deg); } + md-progress-circular[value="88"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="88"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="89"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(275.4deg); + -ms-transform: rotate(275.4deg); + transform: rotate(275.4deg); } + md-progress-circular[value="89"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="89"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="90"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(279deg); + -ms-transform: rotate(279deg); + transform: rotate(279deg); } + md-progress-circular[value="90"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="90"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="91"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(282.6deg); + -ms-transform: rotate(282.6deg); + transform: rotate(282.6deg); } + md-progress-circular[value="91"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="91"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="92"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(286.2deg); + -ms-transform: rotate(286.2deg); + transform: rotate(286.2deg); } + md-progress-circular[value="92"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="92"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="93"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(289.8deg); + -ms-transform: rotate(289.8deg); + transform: rotate(289.8deg); } + md-progress-circular[value="93"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="93"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="94"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(293.4deg); + -ms-transform: rotate(293.4deg); + transform: rotate(293.4deg); } + md-progress-circular[value="94"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="94"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="95"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(297deg); + -ms-transform: rotate(297deg); + transform: rotate(297deg); } + md-progress-circular[value="95"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="95"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="96"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(300.6deg); + -ms-transform: rotate(300.6deg); + transform: rotate(300.6deg); } + md-progress-circular[value="96"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="96"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="97"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(304.2deg); + -ms-transform: rotate(304.2deg); + transform: rotate(304.2deg); } + md-progress-circular[value="97"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="97"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="98"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(307.8deg); + -ms-transform: rotate(307.8deg); + transform: rotate(307.8deg); } + md-progress-circular[value="98"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="98"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="99"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(311.4deg); + -ms-transform: rotate(311.4deg); + transform: rotate(311.4deg); } + md-progress-circular[value="99"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="99"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[value="100"] .md-inner .md-left .md-half-circle { + -webkit-transition: -webkit-transform 0.1s linear; + transition: transform 0.1s linear; + -webkit-transform: rotate(315deg); + -ms-transform: rotate(315deg); + transform: rotate(315deg); } + md-progress-circular[value="100"] .md-inner .md-right .md-half-circle { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } + md-progress-circular[value="100"] .md-inner .md-gap { + border-bottom-width: 5px; + border-bottom-style: solid; + -webkit-transition: border-bottom-color 0.1s linear; + transition: border-bottom-color 0.1s linear; } + md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper { + -webkit-animation: outer-rotate 2.9166666667s linear infinite; + animation: outer-rotate 2.9166666667s linear infinite; } + md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner { + -webkit-animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; + animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; } + md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-duration: 1.3125s; + animation-duration: 1.3125s; + -webkit-animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); + animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); } + md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle { + -webkit-animation-name: left-wobble; + animation-name: left-wobble; } + md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle { + -webkit-animation-name: right-wobble; + animation-name: right-wobble; } -@-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); } } +.ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper, +md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper { + -webkit-animation: none; + animation: none; } + .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner, + md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner { + -webkit-animation: none; + animation: none; } + .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, + md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } + .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, + md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } -@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%; } } +.sg-progress-circular-floating { + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28); + transition: transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28); + position: absolute; + top: 80px; + left: 50%; + -webkit-transform: translate(-50%, 0) scale(1); + -ms-transform: translate(-50%, 0) scale(1); + transform: translate(-50%, 0) scale(1); + bottom: auto; + background-color: white; + border-radius: 50%; + padding: 4px; + 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); } + .sg-progress-circular-floating.ng-hide { + -webkit-transform: translate(-50%, 0) scale(0); + -ms-transform: translate(-50%, 0) scale(0); + transform: translate(-50%, 0) scale(0); } /*! radioButton/_extends.scss - */ md-radio-button, @@ -9147,10 +10565,8 @@ md-sidenav { 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; } + -webkit-transition: 0.2s ease-in all; + transition: 0.2s ease-in 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); @@ -9793,9 +11209,6 @@ md-tabs { -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 { @@ -10537,6 +11950,174 @@ md-tooltip { md-whiteframe { border: 1px solid #fff; } } +/** Styles for sgTimePane. */ +sg-time-pane { + font-size: 13px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.hours-pane { + border-bottom: solid 1px #e0e0e0; } + +.toggle-pane { + border-top: solid 1px #e0e0e0; } + +.md-button.md-fab.hourBtn, +.md-button.md-fab.minuteBtn, +.md-button.md-fab.toggleBtn, +.md-button.md-fab.hourBtn.md-focused, +.md-button.md-fab.minuteBtn.md-focused, +.md-button.md-fab.toggleBtn.md-focused, +.md-button.md-fab.hourBtn.md-focus, +.md-button.md-fab.minuteBtn.md-focus, +.md-button.md-fab.toggleBtn.md-focus { + min-width: 10px; + min-height: 10px; + background-color: transparent; + border-color: transparent; + font-family: Roboto, 'Helvetica Neue', sans-serif; + font-size: 16px; + font-weight: normal; + color: rgba(0, 0, 0, 0.5); + height: 40px; + width: 40px; + line-height: 40px; + box-shadow: none; + margin: 2px; } + +.md-button.md-fab.toggleBtn { + background-color: #3f51b5; + color: white; + margin: 5px; } + +.md-button.md-fab.hourBtn:hover, .md-button.md-fab.minuteBtn:hover { + background-color: lightgrey; + color: #666666; } + +.md-button.md-fab.hourBtn.md-primary, .md-button.md-fab.minuteBtn.md-primary, +.md-button.md-fab.hourBtn.md-primary:hover, .md-button.md-fab.minuteBtn.md-primary:hover, +.md-button.md-fab.hourBtn.md-primary.md-focus, .md-button.md-fab.minuteBtn.md-primary.md-focus, +.md-button.md-fab.hourBtn.md-primary.md-focused, .md-button.md-fab.minuteBtn.md-primary.md-focused { + background-color: lightgrey; + color: #3f51b5; } + +/** Styles for sgTimepicker. */ +sg-timepicker { + white-space: nowrap; } + +.sg-timepicker-button { + display: inline-block; + box-sizing: border-box; + background: none; } + +.sg-timepicker-input { + min-width: 120px; + max-width: 328px; + background: inherit; + border: none; } + +.sg-timepicker-input-container { + position: relative; + padding-bottom: 5px; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #e0e0e0; + display: inline-block; + width: auto; + margin-left: 12px; } + .sg-timepicker-input-container.sg-timepicker-focused { + border-bottom-width: 2px; } + +.sg-timepicker-time-pane { + position: absolute; + top: 0; + left: 0; + z-index: 99; + border-width: 1px; + border-style: solid; + background: inherit; + border-color: #e0e0e0; + box-shadow: rgba(0, 0, 0, 0.137255) 0 3px 1px -2px, rgba(0, 0, 0, 0.0980392) 0 2px 2px 0, rgba(0, 0, 0, 0.0823529) 0 1px 5px 0; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; } + .sg-timepicker-time-pane.md-pane-open { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); } + +.sg-timepicker-input-mask { + height: 40px; + width: 340px; + position: relative; + background: transparent; + pointer-events: none; + cursor: text; } + +.sg-timepicker-input-mask-opaque { + position: absolute; + right: 0; + left: 120px; + background: white; + height: 100%; } + +.sg-timepicker-time { + opacity: 0; + -webkit-transition: opacity 0.2s cubic-bezier(0.5, 0, 0.25, 1); + transition: opacity 0.2s cubic-bezier(0.5, 0, 0.25, 1); } + .md-pane-open .sg-timepicker-time { + opacity: 1; } + .sg-timepicker-time sg-time:focus { + outline: none; } + +.sg-timepicker-expand-triangle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid rgba(0, 0, 0, 0.2); } + +.sg-timepicker-triangle-button { + position: absolute; + right: 0; + top: 0; + -webkit-transform: translateY(-25%) translateX(45%); + -ms-transform: translateY(-25%) translateX(45%); + transform: translateY(-25%) translateX(45%); } + +.sg-timepicker-triangle-button.md-button.md-icon-button { + height: 100%; + width: 36px; + position: absolute; } + +sg-timepicker[disabled] .sg-timepicker-input-container { + border-bottom-color: transparent; } + +sg-timepicker[disabled] .sg-timepicker-triangle-button { + display: none; } + +.sg-timepicker-open .sg-timepicker-input-container { + margin-left: -12px; + border: none; } + +.sg-timepicker-open .sg-timepicker-input { + margin-left: 24px; + height: 40px; } + +.sg-timepicker-open .sg-timepicker-triangle-button { + display: none; } + .pseudo-input-container { display: block; padding: 0 2px; } @@ -10772,7 +12353,11 @@ md-input-container .bgroup { -webkit-box-pack: start; -webkit-justify-content: flex-start; -ms-flex-pack: start; - justify-content: flex-start; } + justify-content: flex-start; + overflow: hidden; } + .msg-header-content [class|="sg-md-display"] { + overflow: hidden; + text-overflow: ellipsis; } .msg-body { padding-top: 16px; } @@ -11462,8 +13047,7 @@ textarea.plain-text { .view-detail { z-index: 9; - overflow-x: hidden; - background-color: transparent; } + overflow-x: hidden; } @media (min-width: 601px) and (max-width: 1024px) { .view-detail { max-width: 56.25vw; @@ -11483,101 +13067,46 @@ textarea.plain-text { @media (min-width: 601px) { .view-detail .viewer { position: absolute; + top: 0; 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%); } } + max-width: 100%; } } @media (max-width: 600px) { .view-detail { + display: block; + background-color: transparent !important; 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%; + top: 128px; + bottom: 0; + left: 0; + right: 0; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(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.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, + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } .view-detail.ng-leave.ng-leave-active { - -webkit-transform: translateX(-100%) scale(0); - -ms-transform: translateX(-100%) scale(0); - transform: translateX(-100%) scale(0); } + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } .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); } } + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } + .view-detail.ng-enter.ng-enter-active { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); } + .view-detail .viewer { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } } main { background-color: #ede5ca; } diff --git a/UI/WebServerResources/css/styles.css.map b/UI/WebServerResources/css/styles.css.map index 70f63c92d..3adf24f79 100644 --- a/UI/WebServerResources/css/styles.css.map +++ b/UI/WebServerResources/css/styles.css.map @@ -1 +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/structure.scss","../angular-material/src/core/style/mixins.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/services/layout/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/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.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/datepicker/_extends-calendar.scss","../angular-material/src/components/datepicker/calendar.scss","../scss/components/datepicker/_extends-datePicker.scss","../angular-material/src/components/datepicker/datePicker.scss","../scss/components/datepicker/datePicker.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/grid-list.scss","../scss/components/gridList/grid-list.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","../angular-material/src/components/list/list.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/progress-linear.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/virtual-repeater.scss","../scss/components/virtualRepeat/virtual-repeat.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"],"names":[],"mappings":"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AAI,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,WA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","file":"styles.css"} \ No newline at end of file +{"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/structure.scss","../angular-material/src/core/style/mixins.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/services/layout/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/autocomplete/autocomplete.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.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/datepicker/_extends-calendar.scss","../angular-material/src/components/datepicker/calendar.scss","../scss/components/datepicker/_extends-datePicker.scss","../angular-material/src/components/datepicker/datePicker.scss","../scss/components/datepicker/datePicker.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/grid-list.scss","../scss/components/gridList/grid-list.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","../angular-material/src/components/list/list.scss","../scss/components/list/list.scss","../scss/components/menu/_extends.scss","../angular-material/src/components/menu/menu.scss","../scss/components/progressCircular/_extends.scss","../angular-material/src/components/progressCircular/progress-circular.scss","../scss/components/progressCircular/progress-circular.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/virtual-repeater.scss","../scss/components/virtualRepeat/virtual-repeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/timepicker/timepicker.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"],"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;I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","file":"styles.css"} \ No newline at end of file diff --git a/UI/WebServerResources/js/Common.js b/UI/WebServerResources/js/Common.js index b3214a9f6..d1b78e5e1 100644 --- a/UI/WebServerResources/js/Common.js +++ b/UI/WebServerResources/js/Common.js @@ -1,3 +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){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){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()}}_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},_this=this;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 sgTarget(){function sgTargetLink(scope,element,attrs){console.log("sgTargetLink...");var ensureTargetRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgTarget)},function(value){element.html(value),ensureTargetRunsOnce()})}return{priority:1,restrict:"A",link:sgTargetLink}}angular.module("SOGo.Common").directive("sgTarget",sgTarget)}(),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}; +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){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){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()}}_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},_this=this;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 sgTarget(){function sgTargetLink(scope,element,attrs){console.log("sgTargetLink...");var ensureTargetRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgTarget)},function(value){element.html(value),ensureTargetRunsOnce()})}return{priority:1,restrict:"A",link:sgTargetLink}}angular.module("SOGo.Common").directive("sgTarget",sgTarget)}(),function(){"use strict";function timePaneDirective(){ +return{template:'
{{hour.displayName}}
{{minute.displayName}}
{{minute.displayName}}
',scope:{},require:["ngModel","sgTimePane"],controller:TimePaneCtrl,controllerAs:"ctrl",bindToController:!0,link:function(scope,element,attrs,controllers){var ngModelCtrl=controllers[0],sgTimePaneCtrl=controllers[1];console.log(element);var timePaneElement=element;sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl,timePaneElement)}}}function TimePaneCtrl($element,$attrs,$scope,$animate,$q,$mdConstant,$mdTheming,$$mdDateUtil,$mdDateLocale,$mdInkRipple,$mdUtil){var m;this.$scope=$scope,this.$element=$element,this.timePaneElement=$element[0].querySelector(".sg-time-pane"),this.$animate=$animate,this.$q=$q,this.$mdInkRipple=$mdInkRipple,this.$mdUtil=$mdUtil,this.keyCode=$mdConstant.KEY_CODE,this.dateUtil=$$mdDateUtil,this.id=nextTimePaneUniqueId++,this.ngModelCtrl=null,this.selectedTime=null,this.displayTime=null,this.isInitialized=!1,$scope.hours=[],$scope.hours[0]=[],$scope.hours[0][0]=[],$scope.hours[0][1]=[],$scope.hours[1]=[],$scope.hours[1][0]=[],$scope.hours[1][1]=[];for(var i=0;6>i;i++)$scope.hours[0][0][i]={id:"tp-"+this.id+"-hour-"+i,displayName:10>i?"0"+i:""+i,selected:!1},$scope.hours[0][1][i]={id:"tp-"+this.id+"-hour-"+(i+6),displayName:10>i+6?"0"+(i+6):""+(i+6),selected:!1},$scope.hours[1][0][i]={id:"tp-"+this.id+"-hour-"+(i+12),displayName:""+(i+12),selected:!1},$scope.hours[1][1][i]={id:"tp-"+this.id+"-hour-"+(i+18),displayName:""+(i+18),selected:!1};for($scope.min5=[],$scope.min5[0]=[],$scope.min5[1]=[],i=0;6>i;i++)m=5*i,$scope.min5[0][i]={id:"tp-"+this.id+"-minute5-"+m,displayName:10>m?":0"+m:":"+m,selected:!0},$scope.min5[1][i]={id:"tp-"+this.id+"-minute5-"+(m+30),displayName:":"+(m+30),selected:!1};for($scope.min1=[],i=0;12>i;i++){$scope.min1[i]=[];for(var ii=0;5>ii;ii++)m=5*i+ii,$scope.min1[i][ii]={id:"tp-"+this.id+"-minute-"+m,displayName:10>m?":0"+m:":"+m,selected:!0}}$scope.show5min=!0,$scope.getToggleBtnLbl=function(){return $scope.is5min()?">>":"<<"},$scope.toggleManual5min=function(){$scope.manual5min=!$scope.is5min()},$scope.is5min=function(){return $scope.manual5min===!0||$scope.manual5min===!1?$scope.manual5min:$scope.show5min},$attrs.tabindex||$element.attr("tabindex","-1");var self=this;this.hourClickHandler=function(displayVal){var updated=new Date(self.displayTime).setHours(Number(displayVal));self.setNgModelValue(updated,"hours")},$scope.hourClickHandler=this.hourClickHandler,this.minuteClickHandler=function(displayVal){var val=displayVal.substr(1),updated=new Date(self.displayTime).setMinutes(Number(val));self.setNgModelValue(updated,"minutes")},$scope.minuteClickHandler=this.minuteClickHandler,this.attachTimePaneEventListeners()}angular.module("SOGo.Common").directive("sgTimePane",timePaneDirective);var SELECTED_TIME_CLASS2="md-primary",FOCUSED_TIME_CLASS="md-focus",nextTimePaneUniqueId=0;TimePaneCtrl.$inject=["$element","$attrs","$scope","$animate","$q","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil"],TimePaneCtrl.prototype.configureNgModel=function(ngModelCtrl,sgTimePaneCtrl,timePaneElement){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.changeSelectedTime(self.ngModelCtrl.$viewValue,sgTimePaneCtrl,timePaneElement)}},TimePaneCtrl.prototype.changeSelectedTime=function(date,sgTimePaneCtrl,timePaneElement){var previousSelectedTime=this.selectedTime;this.selectedTime=new Date(date),this.changeDisplayTime(date).then(function(){if(previousSelectedTime){var prevH=previousSelectedTime.getHours(),prevHCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+prevH);prevHCell&&(prevHCell.classList.remove(SELECTED_TIME_CLASS2),prevHCell.setAttribute("aria-selected","false"));var prevM=previousSelectedTime.getMinutes(),prevMCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+prevM);prevMCell&&(prevMCell.classList.remove(SELECTED_TIME_CLASS2),prevMCell.setAttribute("aria-selected","false"));var prevM5Cell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+prevM);prevM5Cell&&(prevM5Cell.classList.remove(SELECTED_TIME_CLASS2),prevM5Cell.setAttribute("aria-selected","false"))}if(date){var mCell,d=new Date(date),newH=d.getHours(),hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);hCell&&(hCell.classList.add(SELECTED_TIME_CLASS2),hCell.setAttribute("aria-selected","true"));var newM=d.getMinutes();newM%5===0?(sgTimePaneCtrl.$scope.show5min=!0,mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+newM),mCell&&(mCell.classList.add(SELECTED_TIME_CLASS2),mCell.setAttribute("aria-selected","true"))):sgTimePaneCtrl.$scope.show5min=!1,mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+newM),mCell&&(mCell.classList.add(SELECTED_TIME_CLASS2),mCell.setAttribute("aria-selected","true"))}})},TimePaneCtrl.prototype.changeDisplayTime=function(date){var d=new Date(date);return this.isInitialized?this.dateUtil.isValidDate(d)?(this.displayTime=d,this.$q.when()):this.$q.when():(this.buildInitialTimePaneDisplay(),this.$q.when())},TimePaneCtrl.prototype.buildInitialTimePaneDisplay=function(){this.displayTime=this.selectedTime||this.today,this.isInitialized=!0},TimePaneCtrl.prototype.attachTimePaneEventListeners=function(){this.$element.on("keydown",angular.bind(this,this.handleKeyEvent))},TimePaneCtrl.prototype.handleKeyEvent=function(event){var self=this;this.$scope.$apply(function(){return event.which==self.keyCode.ESCAPE||event.which==self.keyCode.TAB?(self.$scope.$emit("md-time-pane-close"),void(event.which==self.keyCode.TAB&&event.preventDefault())):event.which===self.keyCode.ENTER?(self.setNgModelValue(self.displayTime,"enter"),void event.preventDefault()):void 0})},TimePaneCtrl.prototype.setNgModelValue=function(date,mode){this.$scope.$emit("sg-time-pane-change",{date:date,changed:mode}),this.ngModelCtrl.$setViewValue(date),this.ngModelCtrl.$render()},TimePaneCtrl.prototype.focus=function(opt_date,sgTimePaneCtrl){var date=opt_date||this.selectedTime||this.today,previousFocus=this.timePaneElement.querySelector(".md-focus");if(previousFocus&&previousFocus.classList.remove(FOCUSED_TIME_CLASS),date){var newH=date.getHours(),hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);hCell&&(hCell.classList.add(FOCUSED_TIME_CLASS),hCell.focus())}}}(),function(){"use strict";function timePickerDirective(){return{template:'
',require:["ngModel","sgTimepicker"],scope:{placeholder:"@mdPlaceholder"},controller:TimePickerCtrl,controllerAs:"ctrl",bindToController:!0,link:function(scope,element,attr,controllers){var ngModelCtrl=controllers[0],mdTimePickerCtrl=controllers[1];mdTimePickerCtrl.configureNgModel(ngModelCtrl)}}}function TimePickerCtrl($scope,$element,$attrs,$compile,$timeout,$mdConstant,$mdTheming,$mdUtil,$mdDateLocale,$$mdDateUtil,$$rAF){this.$compile=$compile,this.$timeout=$timeout,this.dateLocale=$mdDateLocale,this.dateUtil=$$mdDateUtil,this.$mdConstant=$mdConstant,this.$mdUtil=$mdUtil,this.$$rAF=$$rAF,this.ngModelCtrl=null,this.inputElement=$element[0].querySelector("input"),this.inputContainer=$element[0].querySelector(".sg-timepicker-input-container"),this.timePane=$element[0].querySelector(".sg-timepicker-time-pane"),this.timeButton=$element[0].querySelector(".sg-timepicker-button"),this.inputMask=$element[0].querySelector(".sg-timepicker-input-mask-opaque"),this.$element=$element,this.$attrs=$attrs,this.$scope=$scope,this.date=null,this.isFocused=!1,this.isDisabled=!1,this.setDisabled($element[0].disabled||angular.isString($attrs.disabled)),this.isTimeOpen=!1,this.timePaneOpenedFrom=null,this.timePane.id="sg-time-pane"+$mdUtil.nextUid(),$mdTheming($element),this.bodyClickHandler=angular.bind(this,this.handleBodyClick),$attrs.tabindex||$element.attr("tabindex","-1"),this.installPropertyInterceptors(),this.attachChangeListeners(),this.attachInteractionListeners();var self=this;$scope.$on("$destroy",function(){self.detachTimePane()})}angular.module("SOGo.Common").directive("sgTimepicker",timePickerDirective);var EXTRA_INPUT_SIZE=3,INVALID_CLASS="sg-timepicker-invalid",DEFAULT_DEBOUNCE_INTERVAL=500;TimePickerCtrl.$inject=["$scope","$element","$attrs","$compile","$timeout","$mdConstant","$mdTheming","$mdUtil","$mdDateLocale","$$mdDateUtil","$$rAF"],TimePickerCtrl.prototype.configureNgModel=function(ngModelCtrl){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.time=self.ngModelCtrl.$viewValue,self.inputElement.value=self.formatTime(self.time),self.resizeInputElement()}},TimePickerCtrl.prototype.formatTime=function(time){var t=new Date(time);if(t){var h=t.getHours(),m=t.getMinutes();return(10>h?"0"+h:h)+":"+(10>m?"0"+m:m)}return""},TimePickerCtrl.prototype.attachChangeListeners=function(){var self=this;self.$scope.$on("sg-time-pane-change",function(event,data){var time=new Date(data.date);self.ngModelCtrl.$setViewValue(time),self.time=time,self.inputElement.value=self.formatTime(self.time),"minutes"==data.changed&&self.closeTimePane(),self.resizeInputElement(),self.inputContainer.classList.remove(INVALID_CLASS)});var ngElement=angular.element(self.inputElement);ngElement.on("input",angular.bind(self,self.resizeInputElement)),ngElement.on("input",self.$mdUtil.debounce(self.handleInputEvent,DEFAULT_DEBOUNCE_INTERVAL,self))},TimePickerCtrl.prototype.attachInteractionListeners=function(){var self=this,$scope=this.$scope,keyCodes=this.$mdConstant.KEY_CODE;angular.element(self.inputElement).on("keydown",function(event){event.altKey&&event.keyCode==keyCodes.DOWN_ARROW&&(self.openTimePane(event),$scope.$digest())}),$scope.$on("md-time-close",function(){self.closeTimePane()})},TimePickerCtrl.prototype.installPropertyInterceptors=function(){var self=this;this.$attrs.ngDisabled&&this.$element.scope().$watch(this.$attrs.ngDisabled,function(isDisabled){self.setDisabled(isDisabled)}),Object.defineProperty(this,"placeholder",{get:function(){return self.inputElement.placeholder},set:function(value){self.inputElement.placeholder=value||""}})},TimePickerCtrl.prototype.setDisabled=function(isDisabled){this.isDisabled=isDisabled,this.inputElement.disabled=isDisabled,this.timeButton.disabled=isDisabled},TimePickerCtrl.prototype.resizeInputElement=function(){this.inputElement.size=this.inputElement.value.length+EXTRA_INPUT_SIZE},TimePickerCtrl.prototype.handleInputEvent=function(self){var inputString=this.inputElement.value,arr=inputString.split(":");if(!(arr.length<2)){var h=Number(arr[0]),m=Number(arr[1]),newVal=new Date(this.time);h&&h>=0&&23>=h&&m&&m>=0&&59>=m&&angular.isDate(newVal)?(newVal.setHours(h),newVal.setMinutes(m),this.ngModelCtrl.$setViewValue(newVal),this.time=newVal,this.inputContainer.classList.remove(INVALID_CLASS)):this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}},TimePickerCtrl.prototype.attachTimePane=function(){var timePane=this.timePane;this.$element.addClass("sg-timepicker-open");var elementRect=this.inputContainer.getBoundingClientRect(),bodyRect=document.body.getBoundingClientRect();timePane.style.left=elementRect.left-bodyRect.left+"px",timePane.style.top=elementRect.top-bodyRect.top+"px",document.body.appendChild(this.timePane),this.inputMask.style.left=elementRect.width+"px",this.$$rAF(function(){timePane.classList.add("md-pane-open")})},TimePickerCtrl.prototype.detachTimePane=function(){this.$element.removeClass("sg-timepicker-open"),this.timePane.classList.remove("md-pane-open"),this.timePane.parentNode&&this.timePane.parentNode.removeChild(this.timePane)},TimePickerCtrl.prototype.openTimePane=function(event){if(!this.isTimeOpen&&!this.isDisabled){this.isTimeOpen=!0,this.timePaneOpenedFrom=event.target,this.attachTimePane(),this.focusTime(),this.$mdUtil.disableScrollAround(this.timePane);var self=this;this.$mdUtil.nextTick(function(){document.body.addEventListener("click",self.bodyClickHandler)},!1)}},TimePickerCtrl.prototype.closeTimePane=function(){this.isTimeOpen=!1,this.detachTimePane(),this.timePaneOpenedFrom.focus(),this.timePaneOpenedFrom=null,this.$mdUtil.enableScrolling(),document.body.removeEventListener("click",this.bodyClickHandler)},TimePickerCtrl.prototype.getTimePaneCtrl=function(){return angular.element(this.timePane.querySelector("sg-time-pane")).controller("sgTimePane")},TimePickerCtrl.prototype.focusTime=function(){var self=this;this.$mdUtil.nextTick(function(){var ctrl=self.getTimePaneCtrl();self.getTimePaneCtrl().focus(null,ctrl)},!1)},TimePickerCtrl.prototype.setFocused=function(isFocused){this.isFocused=isFocused},TimePickerCtrl.prototype.handleBodyClick=function(event){if(this.isTimeOpen){var isInTime=this.$mdUtil.getClosest(event.target,"sg-time-pane");isInTime||this.closeTimePane(),this.$scope.$digest()}}}(),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 index 5d36d1809..921c2e553 100644 --- a/UI/WebServerResources/js/Common.js.map +++ b/UI/WebServerResources/js/Common.js.map @@ -1 +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/sgTarget.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","email","UserEmail","language","UserLanguage","folderURL","UserFolderURL","isSuperUser","IsSuperUser","path","calendar","UserCalendarPath","contacts","UserContactsPath","mail","UserMailPath","preferences","UserPreferencesPath","administration","UserAdministrationPath","logoff","UserLogoffPath","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","summary","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","size","hash","s","substring","md5","_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","sgTarget","sgTargetLink","console","log","ensureTargetRunsOnce","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 email: UserEmail || null,\n language: UserLanguage || null,\n folderURL: UserFolderURL || null,\n isSuperUser: IsSuperUser || null,\n path: {\n calendar: UserCalendarPath || null,\n contacts: UserContactsPath || null,\n mail: UserMailPath || null,\n preferences: UserPreferencesPath || null,\n administration: (IsSuperUser ? UserAdministrationPath : null),\n logoff: UserLogoffPath || null\n }\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 $scope.baseURL = sgSettings.baseURL();\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').then(function(data) {\n _this.$toast.show({\n position: 'top right',\n hideDelay: 0,\n template: [\n '',\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 /**\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 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 /**\n * @ngInject\n */\n getService.$inject = ['$q', '$http', 'passwordPolicyConfig'];\n function getService($q, $http, passwordPolicyConfig) {\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 var _this = this;\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 * sgTarget - Replace target for in DOM.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgTarget - the expression to process\n * @ngInject\n * @example:\n\n
\n */\n function sgTarget() {\n return {\n priority: 1,\n restrict: 'A',\n link: sgTargetLink\n };\n\n function sgTargetLink(scope, element, attrs) {\n console.log(\"sgTargetLink...\");\n\n var ensureTargetRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-target expression for changes\n return scope.$eval(attrs.sgTarget);\n },\n function(value) {\n \n var onAnchorClick = function (event) {\n if (this.href)\n window.open(this.href);\n if (event) {\n if (event.preventDefault)\n event.preventDefault(); // W3C DOM\n else\n event.returnValue = false; // IE\n }\n };\n //var anchors = angular.element(value)[0].getElementsByTagName('a');\n //for (var i = 0; i < anchors.length; i++) {\n //var anchor = angular.element(anchors[i]);\n // if (!anchor.href && anchor.readAttribute(\"moz-do-not-send\")) {\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // anchor.removeClassName(\"moz-txt-link-abbreviated\");\n // anchor.href = \"mailto:\" + anchors[i].innerHTML;\n // }\n // if (anchor.href.substring(0,7) == \"mailto:\") {\n // anchor.observe(\"click\", onEmailTo);\n // if (typeof onEmailAddressClick == 'function')\n // anchor.observe(\"contextmenu\", onEmailAddressClick);\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // }\n // els\n //if (!anchor.id)\n // anchor.observe(\"click\", onAnchorClick);\n //}\n\n element.html(value);\n ensureTargetRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgTarget', sgTarget);\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 +{"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/sgTarget.directive.js","Common/sgTimepicker.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","email","UserEmail","language","UserLanguage","folderURL","UserFolderURL","isSuperUser","IsSuperUser","path","calendar","UserCalendarPath","contacts","UserContactsPath","mail","UserMailPath","preferences","UserPreferencesPath","administration","UserAdministrationPath","logoff","UserLogoffPath","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","summary","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","size","hash","s","substring","md5","_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","sgTarget","sgTargetLink","console","log","ensureTargetRunsOnce","timePaneDirective","TimePaneCtrl","controllers","ngModelCtrl","sgTimePaneCtrl","timePaneElement","configureNgModel","$attrs","$animate","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil","m","querySelector","KEY_CODE","dateUtil","nextTimePaneUniqueId","selectedTime","displayTime","isInitialized","hours","displayName","selected","min5","min1","ii","show5min","getToggleBtnLbl","is5min","toggleManual5min","manual5min","tabindex","self","hourClickHandler","displayVal","updated","setHours","Number","setNgModelValue","minuteClickHandler","val","setMinutes","attachTimePaneEventListeners","SELECTED_TIME_CLASS2","FOCUSED_TIME_CLASS","$render","changeSelectedTime","$viewValue","date","previousSelectedTime","changeDisplayTime","prevH","getHours","prevHCell","classList","setAttribute","prevM","getMinutes","prevMCell","prevM5Cell","mCell","newH","hCell","add","newM","isValidDate","buildInitialTimePaneDisplay","today","handleKeyEvent","ESCAPE","TAB","$emit","ENTER","mode","changed","$setViewValue","opt_date","previousFocus","timePickerDirective","placeholder","TimePickerCtrl","mdTimePickerCtrl","$$rAF","dateLocale","inputElement","inputContainer","timePane","timeButton","inputMask","isFocused","isDisabled","setDisabled","disabled","isTimeOpen","timePaneOpenedFrom","nextUid","bodyClickHandler","handleBodyClick","installPropertyInterceptors","attachChangeListeners","attachInteractionListeners","detachTimePane","EXTRA_INPUT_SIZE","INVALID_CLASS","DEFAULT_DEBOUNCE_INTERVAL","time","formatTime","resizeInputElement","t","h","closeTimePane","ngElement","handleInputEvent","keyCodes","altKey","DOWN_ARROW","openTimePane","$digest","ngDisabled","Object","defineProperty","set","inputString","arr","isDate","attachTimePane","addClass","elementRect","getBoundingClientRect","bodyRect","style","left","top","appendChild","width","removeClass","parentNode","removeChild","target","focusTime","disableScrollAround","nextTick","addEventListener","enableScrolling","removeEventListener","getTimePaneCtrl","ctrl","setFocused","isInTime","getClosest","sgToggleGrid","day","findIndex","modelDays","modelAttr","tile","ensureInitRunsOnce","tiles","days","isDefined","flattenedDays","sgToggleGridAttr","contains","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","Array","B","J","P","E","v","g","Y","X","W","V","C","S","Q","N","M","A","z","w","U","T","R","O","toLowerCase","capitalize","toUpperCase","slice","asDate","newDate","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","setSeconds","setMilliseconds","beginOfWeek","offset","firstDayOfWeek","getDay","endOfWeek","getDayString","getHourString"],"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 email: UserEmail || null,\n language: UserLanguage || null,\n folderURL: UserFolderURL || null,\n isSuperUser: IsSuperUser || null,\n path: {\n calendar: UserCalendarPath || null,\n contacts: UserContactsPath || null,\n mail: UserMailPath || null,\n preferences: UserPreferencesPath || null,\n administration: (IsSuperUser ? UserAdministrationPath : null),\n logoff: UserLogoffPath || null\n }\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 $scope.baseURL = sgSettings.baseURL();\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').then(function(data) {\n _this.$toast.show({\n position: 'top right',\n hideDelay: 0,\n template: [\n '',\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 /**\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 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 /**\n * @ngInject\n */\n getService.$inject = ['$q', '$http', 'passwordPolicyConfig'];\n function getService($q, $http, passwordPolicyConfig) {\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 var _this = this;\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 * sgTarget - Replace target for
in DOM.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgTarget - the expression to process\n * @ngInject\n * @example:\n\n
\n */\n function sgTarget() {\n return {\n priority: 1,\n restrict: 'A',\n link: sgTargetLink\n };\n\n function sgTargetLink(scope, element, attrs) {\n console.log(\"sgTargetLink...\");\n\n var ensureTargetRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-target expression for changes\n return scope.$eval(attrs.sgTarget);\n },\n function(value) {\n \n var onAnchorClick = function (event) {\n if (this.href)\n window.open(this.href);\n if (event) {\n if (event.preventDefault)\n event.preventDefault(); // W3C DOM\n else\n event.returnValue = false; // IE\n }\n };\n //var anchors = angular.element(value)[0].getElementsByTagName('a');\n //for (var i = 0; i < anchors.length; i++) {\n //var anchor = angular.element(anchors[i]);\n // if (!anchor.href && anchor.readAttribute(\"moz-do-not-send\")) {\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // anchor.removeClassName(\"moz-txt-link-abbreviated\");\n // anchor.href = \"mailto:\" + anchors[i].innerHTML;\n // }\n // if (anchor.href.substring(0,7) == \"mailto:\") {\n // anchor.observe(\"click\", onEmailTo);\n // if (typeof onEmailAddressClick == 'function')\n // anchor.observe(\"contextmenu\", onEmailAddressClick);\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // }\n // els\n //if (!anchor.id)\n // anchor.observe(\"click\", onAnchorClick);\n //}\n\n element.html(value);\n ensureTargetRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgTarget', sgTarget);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('SOGo.Common')\n .directive('sgTimePane', timePaneDirective);\n \n function timePaneDirective() {\n return {\n template:\n '
' +\n '
' +\n '
' +\n '{{hour.displayName}}'+\n '
' +\n '
' +\n '
' +\n '{{minute.displayName}}'+\n '
' +\n '
' +\n '
' +\n '{{minute.displayName}}' +\n '
' +\n '
',\n scope: {},\n require: ['ngModel', 'sgTimePane'],\n controller: TimePaneCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attrs, controllers) {\n var ngModelCtrl = controllers[0];\n var sgTimePaneCtrl = controllers[1];\n console.log(element);\n var timePaneElement = element;\n sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl, timePaneElement);\n }\n };\n }\n\n /** Class applied to the selected hour or minute cell/. */\n //var SELECTED_TIME_CLASS = 'md-calendar-selected-date';\n //var SELECTED_TIME_CLASS1 = 'md-raised';\n var SELECTED_TIME_CLASS2 = 'md-primary';\n\n /** Class applied to the focused hour or minute cell/. */\n var FOCUSED_TIME_CLASS = 'md-focus';\n\n /** Next identifier for calendar instance. */\n var nextTimePaneUniqueId = 0;\n\n function TimePaneCtrl($element, $attrs, $scope, $animate, $q, $mdConstant,\n $mdTheming, $$mdDateUtil, $mdDateLocale, $mdInkRipple, $mdUtil) {\n var m;\n this.$scope = $scope;\n this.$element = $element;\n this.timePaneElement = $element[0].querySelector('.sg-time-pane');\n this.$animate = $animate;\n this.$q = $q;\n this.$mdInkRipple = $mdInkRipple;\n this.$mdUtil = $mdUtil;\n this.keyCode = $mdConstant.KEY_CODE;\n this.dateUtil = $$mdDateUtil;\n this.id = nextTimePaneUniqueId++;\n this.ngModelCtrl = null;\n this.selectedTime = null;\n this.displayTime = null;\n this.isInitialized = false;\n\n $scope.hours=[];\n $scope.hours[0]=[];\n $scope.hours[0][0]=[];\n $scope.hours[0][1]=[];\n $scope.hours[1]=[];\n $scope.hours[1][0]=[];\n $scope.hours[1][1]=[];\n for(var i=0; i<6; i++){\n $scope.hours[0][0][i] = {id:'tp-'+this.id+'-hour-'+i, displayName:i<10?\"0\"+i:\"\"+i, selected:false};\n $scope.hours[0][1][i] = {id:'tp-'+this.id+'-hour-'+(i+6),displayName:(i+6)<10?\"0\"+(i+6):\"\"+(i+6), selected:false};\n $scope.hours[1][0][i] = {id:'tp-'+this.id+'-hour-'+(i+12), displayName:\"\"+(i+12), selected:false};\n $scope.hours[1][1][i] = {id:'tp-'+this.id+'-hour-'+(i+18), displayName:\"\"+(i+18), selected:false};\n }\n\n $scope.min5=[];\n $scope.min5[0]=[];\n $scope.min5[1]=[];\n for(i=0; i<6; i++){\n m=i*5;\n $scope.min5[0][i] = {id:'tp-'+this.id+'-minute5-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n $scope.min5[1][i] = {id:'tp-'+this.id+'-minute5-'+(m+30), displayName:\":\"+(m+30), selected:false};\n }\n\n $scope.min1=[];\n for(i=0; i<12; i++){\n $scope.min1[i]=[];\n for(var ii=0; ii<5; ii++){\n m=i*5 + ii;\n $scope.min1[i][ii] = {id:'tp-'+this.id+'-minute-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n }\n }\n\n $scope.show5min=true;\n $scope.getToggleBtnLbl = function() {\n return ($scope.is5min()) ? '>>' : '<<';\n };\n $scope.toggleManual5min = function() {\n $scope.manual5min = !$scope.is5min();\n };\n $scope.is5min=function(){\n if($scope.manual5min === true || $scope.manual5min === false) {\n return $scope.manual5min;\n }\n else {\n return $scope.show5min;\n }\n };\n\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n var self = this;\n\n this.hourClickHandler = function(displayVal) {\n var updated = new Date(self.displayTime).setHours(Number(displayVal));\n self.setNgModelValue(updated, 'hours');\n };\n $scope.hourClickHandler = this.hourClickHandler;\n\n this.minuteClickHandler = function(displayVal) {\n //remove leading ':'\n var val = displayVal.substr(1);\n var updated = new Date(self.displayTime).setMinutes(Number(val));\n self.setNgModelValue(updated, 'minutes');\n };\n $scope.minuteClickHandler = this.minuteClickHandler;\n\n this.attachTimePaneEventListeners();\n }\n TimePaneCtrl.$inject = [\"$element\", \"$attrs\", \"$scope\", \"$animate\", \"$q\", \"$mdConstant\", \"$mdTheming\", \"$$mdDateUtil\", \"$mdDateLocale\", \"$mdInkRipple\", \"$mdUtil\"];\n\n TimePaneCtrl.prototype.configureNgModel = function(ngModelCtrl, sgTimePaneCtrl, timePaneElement) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.changeSelectedTime(self.ngModelCtrl.$viewValue, sgTimePaneCtrl, timePaneElement);\n };\n };\n\n /**\n * Change the selected date in the time (ngModel value has already been changed).\n */\n TimePaneCtrl.prototype.changeSelectedTime = function(date, sgTimePaneCtrl, timePaneElement) {\n var self = this;\n var previousSelectedTime = this.selectedTime;\n this.selectedTime = new Date(date);\n this.changeDisplayTime(date).then(function() {\n // Remove the selected class from the previously selected date, if any.\n if (previousSelectedTime) {\n var prevH = previousSelectedTime.getHours();\n var prevHCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+prevH);\n if (prevHCell) {\n prevHCell.classList.remove(SELECTED_TIME_CLASS2);\n prevHCell.setAttribute('aria-selected', 'false');\n }\n var prevM = previousSelectedTime.getMinutes();\n var prevMCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+prevM);\n if (prevMCell) {\n prevMCell.classList.remove(SELECTED_TIME_CLASS2);\n prevMCell.setAttribute('aria-selected', 'false');\n }\n var prevM5Cell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+prevM);\n if (prevM5Cell) {\n prevM5Cell.classList.remove(SELECTED_TIME_CLASS2);\n prevM5Cell.setAttribute('aria-selected', 'false');\n }\n }\n\n // Apply the select class to the new selected date if it is set.\n if (date) {\n var d = new Date(date);\n var newH = d.getHours();\n var mCell, hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(SELECTED_TIME_CLASS2);\n hCell.setAttribute('aria-selected', 'true');\n }\n var newM = d.getMinutes();\n if (newM % 5 === 0) {\n sgTimePaneCtrl.$scope.show5min = true;\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS2);\n mCell.setAttribute('aria-selected', 'true');\n }\n }\n else {\n sgTimePaneCtrl.$scope.show5min = false;\n }\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS2);\n mCell.setAttribute('aria-selected', 'true');\n }\n\n }\n });\n };\n\n TimePaneCtrl.prototype.changeDisplayTime = function(date) {\n var d = new Date(date);\n if (!this.isInitialized) {\n this.buildInitialTimePaneDisplay();\n return this.$q.when();\n }\n if (!this.dateUtil.isValidDate(d)) {\n return this.$q.when();\n }\n\n this.displayTime = d;\n\n return this.$q.when();\n };\n TimePaneCtrl.prototype.buildInitialTimePaneDisplay = function() {\n this.displayTime = this.selectedTime || this.today;\n this.isInitialized = true;\n };\n\n TimePaneCtrl.prototype.attachTimePaneEventListeners = function() {\n // Keyboard interaction.\n this.$element.on('keydown', angular.bind(this, this.handleKeyEvent));\n };\n\n /*** User input handling ***/\n\n /**\n * Handles a key event in the calendar with the appropriate action. The action will either\n * be to select the focused date or to navigate to focus a new date.\n * @param {KeyboardEvent} event\n */\n TimePaneCtrl.prototype.handleKeyEvent = function(event) {\n var self = this;\n this.$scope.$apply(function() {\n // Capture escape and emit back up so that a wrapping component\n // (such as a time-picker) can decide to close.\n if (event.which == self.keyCode.ESCAPE || event.which == self.keyCode.TAB) {\n self.$scope.$emit('md-time-pane-close');\n\n if (event.which == self.keyCode.TAB) {\n event.preventDefault();\n }\n\n return;\n }\n\n // Remaining key events fall into two categories: selection and navigation.\n // Start by checking if this is a selection event.\n if (event.which === self.keyCode.ENTER) {\n self.setNgModelValue(self.displayTime, 'enter');\n event.preventDefault();\n return;\n }\n\n // Selection isn't occuring, so the key event is either navigation or nothing.\n /*var date = self.getFocusDateFromKeyEvent(event);\n if (date) {\n event.preventDefault();\n event.stopPropagation();\n\n // Since this is a keyboard interaction, actually give the newly focused date keyboard\n // focus after the been brought into view.\n self.changeDisplayTime(date).then(function () {\n self.focus(date);\n });\n }*/\n });\n };\n\n /**\n * Sets the ng-model value for the time pane and emits a change event.\n * @param {Date} date\n */\n TimePaneCtrl.prototype.setNgModelValue = function(date, mode) {\n this.$scope.$emit('sg-time-pane-change', {date:date, changed:mode});\n this.ngModelCtrl.$setViewValue(date);\n this.ngModelCtrl.$render();\n };\n\n /**\n * Focus the cell corresponding to the given date.\n * @param {Date=} opt_date\n */\n TimePaneCtrl.prototype.focus = function(opt_date, sgTimePaneCtrl) {\n var date = opt_date || this.selectedTime || this.today;\n\n var previousFocus = this.timePaneElement.querySelector('.md-focus');\n if (previousFocus) {\n previousFocus.classList.remove(FOCUSED_TIME_CLASS);\n }\n\n if (date) {\n var newH = date.getHours();\n var hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(FOCUSED_TIME_CLASS);\n hCell.focus();\n }\n }\n };\n})();\n\n(function() {\n 'use strict';\n \n angular.module('SOGo.Common')\n .directive('sgTimepicker', timePickerDirective);\n\n /**\n * @ngdoc directive\n * @name mdTimepicker\n * @module material.components.timepicker\n *\n * @param {Date} ng-model The component's model. Expects a JavaScript Date object.\n * @param {expression=} ng-change Expression evaluated when the model value changes.\n * @param {boolean=} disabled Whether the timepicker is disabled.\n *\n * @description\n * `` is a component used to select a single time.\n * For information on how to configure internationalization for the time picker,\n * see `$mdTimeLocaleProvider`.\n *\n * @usage\n * \n * \n * \n *\n */\n function timePickerDirective() {\n return {\n template:\n // Buttons are not in the tab order because users can open the hours pane via keyboard\n // interaction on the text input, and multiple tab stops for one component (picker)\n // may be confusing.\n '' +\n //'' +\n 'access_time' +\n '' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n // This pane will be detached from here and re-attached to the document body.\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '
' +\n '
',\n require: ['ngModel', 'sgTimepicker'],\n scope: {\n placeholder: '@mdPlaceholder'\n },\n controller: TimePickerCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attr, controllers) {\n var ngModelCtrl = controllers[0];\n var mdTimePickerCtrl = controllers[1];\n\n mdTimePickerCtrl.configureNgModel(ngModelCtrl);\n }\n };\n }\n\n /** Additional offset for the input's `size` attribute, which is updated based on its content. */\n var EXTRA_INPUT_SIZE = 3;\n\n /** Class applied to the container if the date is invalid. */\n var INVALID_CLASS = 'sg-timepicker-invalid';\n\n /** Default time in ms to debounce input event by. */\n var DEFAULT_DEBOUNCE_INTERVAL = 500;\n\n /**\n * Controller for sg-timepicker.\n *\n * ngInject @constructor\n */\n function TimePickerCtrl($scope, $element, $attrs, $compile, $timeout, $mdConstant, $mdTheming,\n $mdUtil, $mdDateLocale, $$mdDateUtil, $$rAF) {\n /** @final */\n this.$compile = $compile;\n\n /** @final */\n this.$timeout = $timeout;\n\n /** @final */\n this.dateLocale = $mdDateLocale;\n\n /** @final */\n this.dateUtil = $$mdDateUtil;\n\n /** @final */\n this.$mdConstant = $mdConstant;\n\n /* @final */\n this.$mdUtil = $mdUtil;\n\n /** @final */\n this.$$rAF = $$rAF;\n\n /** @type {!angular.NgModelController} */\n this.ngModelCtrl = null;\n\n /** @type {HTMLInputElement} */\n this.inputElement = $element[0].querySelector('input');\n\n /** @type {HTMLElement} */\n this.inputContainer = $element[0].querySelector('.sg-timepicker-input-container');\n\n /** @type {HTMLElement} Floating time pane. */\n this.timePane = $element[0].querySelector('.sg-timepicker-time-pane');\n\n /** @type {HTMLElement} Time icon button. */\n this.timeButton = $element[0].querySelector('.sg-timepicker-button');\n\n /**\n * Element covering everything but the input in the top of the floating calendar pane.\n * @type {HTMLElement}\n */\n this.inputMask = $element[0].querySelector('.sg-timepicker-input-mask-opaque');\n\n /** @final {!angular.JQLite} */\n this.$element = $element;\n\n /** @final {!angular.Attributes} */\n this.$attrs = $attrs;\n\n /** @final {!angular.Scope} */\n this.$scope = $scope;\n\n /** @type {Date} */\n this.date = null;\n\n /** @type {boolean} */\n this.isFocused = false;\n\n /** @type {boolean} */\n this.isDisabled = false;\n this.setDisabled($element[0].disabled || angular.isString($attrs.disabled));\n\n /** @type {boolean} Whether the date-picker's calendar pane is open. */\n this.isTimeOpen = false;\n\n /**\n * Element from which the calendar pane was opened. Keep track of this so that we can return\n * focus to it when the pane is closed.\n * @type {HTMLElement}\n */\n this.timePaneOpenedFrom = null;\n\n this.timePane.id = 'sg-time-pane' + $mdUtil.nextUid();\n\n $mdTheming($element);\n\n /** Pre-bound click handler is saved so that the event listener can be removed. */\n this.bodyClickHandler = angular.bind(this, this.handleBodyClick);\n\n // Unless the user specifies so, the datepicker should not be a tab stop.\n // This is necessary because ngAria might add a tabindex to anything with an ng-model\n // (based on whether or not the user has turned that particular feature on/off).\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n this.installPropertyInterceptors();\n this.attachChangeListeners();\n this.attachInteractionListeners();\n\n var self = this;\n $scope.$on('$destroy', function() {\n self.detachTimePane();\n });\n }\n\n TimePickerCtrl.$inject = [\"$scope\", \"$element\", \"$attrs\", \"$compile\", \"$timeout\", \"$mdConstant\", \"$mdTheming\",\n \"$mdUtil\", \"$mdDateLocale\", \"$$mdDateUtil\", \"$$rAF\"];\n\n /**\n * Sets up the controller's reference to ngModelController.\n * @param {!angular.NgModelController} ngModelCtrl\n */\n TimePickerCtrl.prototype.configureNgModel = function(ngModelCtrl) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.time = self.ngModelCtrl.$viewValue;\n self.inputElement.value = self.formatTime(self.time);\n self.resizeInputElement();\n };\n };\n\n TimePickerCtrl.prototype.formatTime = function(time) {\n var t = new Date(time);\n if(t) {\n var h= t.getHours();\n var m= t.getMinutes();\n return (h<10?('0'+ h) : h) + ':' + (m<10?'0'+ m : m);\n }\n else return '';\n };\n /**\n * Attach event listeners for both the text input and the md-time.\n * Events are used instead of ng-model so that updates don't infinitely update the other\n * on a change. This should also be more performant than using a $watch.\n */\n TimePickerCtrl.prototype.attachChangeListeners = function() {\n var self = this;\n\n self.$scope.$on('sg-time-pane-change', function(event, data) {\n var time = new Date(data.date);\n self.ngModelCtrl.$setViewValue(time);\n self.time = time;\n self.inputElement.value = self.formatTime(self.time);\n if(data.changed == 'minutes') {\n self.closeTimePane();\n }\n self.resizeInputElement();\n self.inputContainer.classList.remove(INVALID_CLASS);\n });\n\n var ngElement = angular.element(self.inputElement);\n ngElement.on('input', angular.bind(self, self.resizeInputElement));\n ngElement.on('input', self.$mdUtil.debounce(self.handleInputEvent,\n DEFAULT_DEBOUNCE_INTERVAL, self));\n };\n\n /** Attach event listeners for user interaction. */\n TimePickerCtrl.prototype.attachInteractionListeners = function() {\n var self = this;\n var $scope = this.$scope;\n var keyCodes = this.$mdConstant.KEY_CODE;\n\n // Add event listener through angular so that we can triggerHandler in unit tests.\n angular.element(self.inputElement).on('keydown', function(event) {\n if (event.altKey && event.keyCode == keyCodes.DOWN_ARROW) {\n self.openTimePane(event);\n $scope.$digest();\n }\n });\n\n $scope.$on('md-time-close', function() {\n self.closeTimePane();\n });\n };\n\n /**\n * Capture properties set to the time-picker and imperitively handle internal changes.\n * This is done to avoid setting up additional $watches.\n */\n TimePickerCtrl.prototype.installPropertyInterceptors = function() {\n var self = this;\n\n if (this.$attrs.ngDisabled) {\n // The expression is to be evaluated against the directive element's scope and not\n // the directive's isolate scope.\n this.$element.scope().$watch(this.$attrs.ngDisabled, function(isDisabled) {\n self.setDisabled(isDisabled);\n });\n }\n\n Object.defineProperty(this, 'placeholder', {\n get: function() { return self.inputElement.placeholder; },\n set: function(value) { self.inputElement.placeholder = value || ''; }\n });\n };\n\n /**\n * Sets whether the date-picker is disabled.\n * @param {boolean} isDisabled\n */\n TimePickerCtrl.prototype.setDisabled = function(isDisabled) {\n this.isDisabled = isDisabled;\n this.inputElement.disabled = isDisabled;\n this.timeButton.disabled = isDisabled;\n };\n\n /**\n * Resizes the input element based on the size of its content.\n */\n TimePickerCtrl.prototype.resizeInputElement = function() {\n this.inputElement.size = this.inputElement.value.length + EXTRA_INPUT_SIZE;\n };\n\n /**\n * Sets the model value if the user input is a valid time.\n * Adds an invalid class to the input element if not.\n */\n TimePickerCtrl.prototype.handleInputEvent = function(self) {\n var inputString = this.inputElement.value;\n var arr = inputString.split(':');\n if(arr.length < 2) {return;}\n var h=Number(arr[0]);\n var m=Number(arr[1]);\n var newVal = new Date(this.time);\n if (h && h>=0 && h<=23 && m && m>=0 && m<= 59 && angular.isDate(newVal)) {\n newVal.setHours(h);\n newVal.setMinutes(m);\n this.ngModelCtrl.$setViewValue(newVal);\n this.time = newVal;\n this.inputContainer.classList.remove(INVALID_CLASS);\n }\n else {\n // If there's an input string, it's an invalid time.\n this.inputContainer.classList.toggle(INVALID_CLASS, inputString);\n }\n };\n\n /** Position and attach the floating calendar to the document. */\n TimePickerCtrl.prototype.attachTimePane = function() {\n var timePane = this.timePane;\n this.$element.addClass('sg-timepicker-open');\n\n var elementRect = this.inputContainer.getBoundingClientRect();\n var bodyRect = document.body.getBoundingClientRect();\n\n timePane.style.left = (elementRect.left - bodyRect.left) + 'px';\n timePane.style.top = (elementRect.top - bodyRect.top) + 'px';\n document.body.appendChild(this.timePane);\n\n // The top of the calendar pane is a transparent box that shows the text input underneath.\n // Since the pane is flowing, though, the page underneath the pane *adjacent* to the input is\n // also shown unless we cover it up. The inputMask does this by filling up the remaining space\n // based on the width of the input.\n this.inputMask.style.left = elementRect.width + 'px';\n\n // Add CSS class after one frame to trigger open animation.\n this.$$rAF(function() {\n timePane.classList.add('md-pane-open');\n });\n };\n\n /** Detach the floating time pane from the document. */\n TimePickerCtrl.prototype.detachTimePane = function() {\n this.$element.removeClass('sg-timepicker-open');\n this.timePane.classList.remove('md-pane-open');\n\n if (this.timePane.parentNode) {\n // Use native DOM removal because we do not want any of the angular state of this element\n // to be disposed.\n this.timePane.parentNode.removeChild(this.timePane);\n }\n };\n\n /**\n * Open the floating time pane.\n * @param {Event} event\n */\n TimePickerCtrl.prototype.openTimePane = function(event) {\n if (!this.isTimeOpen && !this.isDisabled) {\n this.isTimeOpen = true;\n this.timePaneOpenedFrom = event.target;\n this.attachTimePane();\n this.focusTime();\n\n // Because the time pane is attached directly to the body, it is possible that the\n // rest of the component (input, etc) is in a different scrolling container, such as\n // an md-content. This means that, if the container is scrolled, the pane would remain\n // stationary. To remedy this, we disable scrolling while the time pane is open, which\n // also matches the native behavior for things like `'," ",' '+l("No file chosen")+"",' {{ uploader.queue[0].file.name }}'," "," ",'
',' '+l("Upload")+"","
",""].join(""),controller:CardsImportDialogController,locals:{folder:folder}}),CardsImportDialogController.$inject=["scope","$mdDialog","folder"]}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){function LinksDialogController($mdDialog,addressbook){function close(){$mdDialog.hide()}this.addressbook=addressbook,this.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}}),LinksDialogController.$inject=["$mdDialog","addressbook"]}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","$mdToast","FileUploader","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 addBirthday(){vm.card.birthday=new Date}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 exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}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.addBirthday=addBirthday,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.exportCard=exportCard,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)}(); +!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","angularFileUpload","ck","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).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,$q,$state,$timeout,$mdDialog,focus,Account,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 copySelectedCards(folder){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$copyCards(selectedCards,folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=!0})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return AddressBook.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter("")}function newMessage($event,recipients){Account.$findAll().then(function(accounts){var account=_.filter(accounts,function(o){return 0===o.id?o:void 0})[0];account.$getMailboxes().then(function(mailboxes){account.$newMessage().then(function(message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"../Mail/UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:accounts,stateMessage:message,stateRecipients:recipients}})})})})}function newMessageWithRecipient($event,recipient,fn){var recipients=[{full:fn+" <"+recipient+">"}];vm.newMessage($event,recipients)}function newMessageWithSelectedCards($event){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),promises=[],recipients=[];_.each(selectedCards,function(card){"vcard"==card.c_component&&card.c_mail.length?recipients.push({full:card.c_cn+" <"+card.c_mail+">"}):"vlist"==card.c_component&&(angular.isDefined(card.refs)&&card.refs.length?_.each(card.refs,function(ref){ref.email.length&&recipients.push({full:ref.c_cn+" <"+ref.email+">"})}):promises.push(vm.selectedFolder.$getCard(card.id).then(function(card){return card.$futureCardData.then(function(data){_.each(data.refs,function(ref){ref.email.length&&recipients.push({full:ref.c_cn+" <"+ref.email+">"})})})})))}),$q.all(promises).then(function(){recipients.length&&vm.newMessage($event,recipients)})}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.copySelectedCards=copySelectedCards,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.newMessage=newMessage,vm.newMessageWithSelectedCards=newMessageWithSelectedCards,vm.newMessageWithRecipient=newMessageWithRecipient,vm.mode={search:!1}}AddressBookController.$inject=["$scope","$q","$state","$timeout","$mdDialog","sgFocus","Account","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)}(),function(){"use strict";function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,$mdToast,FileUploader,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){function select(folder){vm.editMode=!1,AddressBook.$query.value="",$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($event,folder){function CardsImportDialogController(scope,$mdDialog,folder){scope.uploader=new FileUploader({url:ApplicationBaseURL+"/"+folder.id+"/import",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2)),$mdDialog.hide(),$mdToast.show($mdToast.simple().content(l("A total of %{0} cards were imported in the addressbook.",response.imported)).position("top right").hideDelay(3e3)),AddressBook.selectedFolder.$reload()},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2))},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),scope.close=function(){$mdDialog.hide()},scope.upload=function(){scope.uploader.uploadAll()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','
',' import_export','
','
'+l("Import Cards")+"
","
",' ',' close'," ","
","
"," ",'
','
'," "+l("Select a vCard or LDIF file.")+"",' ",' ',"
",' '+l("No file chosen")+"",' {{ uploader.queue[0].file.name }}',"
","
",'
',' '+l("Upload")+"","
","
"].join(""),controller:CardsImportDialogController,locals:{folder:folder}}),CardsImportDialogController.$inject=["scope","$mdDialog","folder"]}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){function LinksDialogController($mdDialog,addressbook){function close(){$mdDialog.hide()}this.addressbook=addressbook,this.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}}),LinksDialogController.$inject=["$mdDialog","addressbook"]}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","$mdToast","FileUploader","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 addBirthday(){vm.card.birthday=new Date}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 close(){$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id}).then(function(){vm.card=null,delete AddressBook.selectedFolder.selectedCard})}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 exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}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.addBirthday=addBirthday,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.close=close,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.exportCard=exportCard,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 index 4c7382628..24ab62e4d 100644 --- a/UI/WebServerResources/js/Contacts.js.map +++ b/UI/WebServerResources/js/Contacts.js.map @@ -1 +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","copySelectedCards","folder","$copyCards","alert","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","this","AddressBooksController","$mdToast","FileUploader","User","select","editMode","value","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","length","$rename","confirmDelete","service","isSubscription","$delete","importCards","$event","CardsImportDialogController","uploader","onProgressItem","item","progress","debug","onSuccessItem","response","headers","JSON","stringify","undefined","simple","content","imported","position","hideDelay","$reload","onCancelItem","onErrorItem","close","upload","uploadAll","exportCards","showLinks","LinksDialogController","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addBirthday","birthday","Date","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","o","exportCard","currentFolder","viewRawSource","$$resource","post","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', 'angularFileUpload', '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.copySelectedCards = copySelectedCards;\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 copySelectedCards(folder) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {\n // TODO: refresh target addressbook?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\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 AddressBook.$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', '$mdToast', 'FileUploader', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, $mdToast, FileUploader, 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 AddressBook.$query.value = '';\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($event, folder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' import_export',\n '
',\n '
' + l('Import Cards') + '
',\n '
',\n ' ',\n ' close',\n ' ',\n '
',\n '
',\n ' ',\n '
',\n '
',\n ' ' + l('Select a vCard or LDIF file.') + '',\n ' ',\n ' ',\n '
',\n ' ' + l('No file chosen') + '',\n ' 0\">{{ uploader.queue[0].file.name }}',\n '
',\n '
',\n '
',\n ' ' + l('Upload') + '',\n '
',\n '
'\n ].join(''),\n controller: CardsImportDialogController,\n locals: {\n folder: folder\n }\n });\n\n /**\n * @ngInject\n */\n CardsImportDialogController.$inject = ['scope', '$mdDialog', 'folder'];\n function CardsImportDialogController(scope, $mdDialog, folder) {\n\n scope.uploader = new FileUploader({\n url: ApplicationBaseURL + '/' + folder.id + '/import',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n $mdDialog.hide();\n $mdToast.show(\n $mdToast.simple()\n .content(l('A total of %{0} cards were imported in the addressbook.', response.imported))\n .position('top right')\n .hideDelay(3000));\n AddressBook.selectedFolder.$reload();\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n scope.close = function() {\n $mdDialog.hide();\n };\n scope.upload = function() {\n scope.uploader.uploadAll();\n };\n }\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(addressbook) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: addressbook.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n addressbook: addressbook\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'addressbook'];\n function LinksDialogController($mdDialog, addressbook) {\n var vm = this;\n this.addressbook = addressbook;\n this.close = close;\n\n function close() {\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.addBirthday = addBirthday;\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.exportCard = exportCard;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addBirthday() {\n vm.card.birthday = new Date();\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 exportCard() {\n window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;\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 +{"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","$q","$state","$timeout","$mdDialog","focus","Account","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","copySelectedCards","folder","$copyCards","alert","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","newMessage","$event","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","newMessageWithRecipient","recipient","fn","full","newMessageWithSelectedCards","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","this","AddressBooksController","$mdToast","FileUploader","User","select","editMode","value","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","$rename","confirmDelete","service","isSubscription","$delete","importCards","CardsImportDialogController","uploader","onProgressItem","item","progress","debug","onSuccessItem","response","headers","JSON","stringify","undefined","simple","content","imported","position","hideDelay","$reload","onCancelItem","onErrorItem","close","upload","uploadAll","exportCards","showLinks","LinksDialogController","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addBirthday","birthday","Date","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","exportCard","currentFolder","viewRawSource","$$resource","post","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"CAGA,WACE,YAUA,SAASA,WAAUC,eAAgBC,oBACjCD,eACGE,MAAM,OACLC,IAAK,gBACLC,YAAU,EACVC,OACEC,cACEC,YAAa,wBACbC,WAAY,yBACZC,aAAc,QAGlBC,SACEC,kBAAmBA,qBAGtBT,MAAM,mBACLC,IAAK,kBACLE,OACEO,aACEL,YAAa,cACbC,WAAY,wBACZC,aAAc,gBAGlBC,SACEG,iBAAkBA,oBAGrBX,MAAM,uBACLC,IAAK,mCACLE,OACES,MACEP,YAAa,2BACbC,WAAY,iBACZC,aAAc,WAGlBC,SACEK,UAAWC,gBAGdd,MAAM,wBACLC,IAAK,WACLC,YAAU,EACVC,OACES,MACEG,SAAU,eAGdP,SACEK,UAAWA,aAGdb,MAAM,6BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,yBACbC,WAAY,iBACZC,aAAc,aAInBP,MAAM,+BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,2BACbC,WAAY,iBACZC,aAAc,aAMtBR,mBAAmBkB,UAAU,0BAO/B,QAASR,mBAAkBS,aACzB,MAAOA,aAAYC,SAASC,OAAOC,gBAOrC,QAASV,kBAAiBW,aAAcJ,aACtC,MAAOA,aAAYK,MAAMD,aAAaE,eAAeC,uBAOvD,QAASX,cAAaQ,aAAcX,iBAAkBe,MACpD,GAAIC,KAAM,IAAML,aAAaM,YACzBhB,KAAO,GAAIc,OAAOG,IAAKP,aAAaE,cAAeM,YAAaH,KAEpE,OADAhB,kBAAiBoB,cAAe,EACzBnB,KAOT,QAASC,WAAUS,aAAcX,kBAE/B,MADAA,kBAAiBoB,aAAeT,aAAaU,OACtCrB,iBAAiBsB,SAASX,aAAaU,QAOhD,QAASE,UAASC,YAChBA,WAAWC,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,WACrEC,QAAQC,MAAML,MAAOC,QAASC,SAAUC,aAjI5CG,QAAQC,OAAO,mBAAoB,aAAc,YAAa,oBAAqB,KAAM,cAAe,qBAAsB,kBAC3HC,OAAOhD,WACPiD,IAAIZ,UAKPrC,UAAUkD,SAAW,iBAAkB,sBAmFvCtC,kBAAkBsC,SAAW,eAQ7BpC,iBAAiBoC,SAAW,eAAgB,eAQ5CjC,aAAaiC,SAAW,eAAgB,mBAAoB,QAW5DlC,UAAUkC,SAAW,eAAgB,oBASrCb,SAASa,SAAW,iBClItB,WACE,YAMA,SAASC,uBAAsBC,OAAQC,GAAIC,OAAQC,SAAUC,UAAWC,MAAOC,QAAS7B,KAAMR,YAAasC,OAAQC,SAAUhD,kBAAmBE,kBAsB9I,QAAS+C,YAAW9C,MAClBuC,OAAOQ,GAAG,6BAA8BnC,cAAeb,iBAAiBiD,GAAI5B,OAAQpB,KAAKgD,KAG3F,QAASC,cAAaC,IA8BpB,QAASC,2BAA0BC,MAAOX,UAAWF,OAAQ3B,eAC3DwC,MAAMC,OAAS,SAASC,MACtBb,UAAUc,OACVhB,OAAOQ,GAAG,uBAAyBnC,cAAeA,cAAeI,YAAasC,QAhClFb,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAaX,GACbY,qBAAqB,EACrBC,eAAe,EACf5D,UACE,0BAA4B6D,EAAE,oBAAsB,KACpD,wBACA,4BACA,gDACA,WAAaA,EAAE,WACf,qBACA,gDACA,WAAaA,EAAE,QACf,qBACA,aACA,yBACA,gBACAC,KAAK,IACPC,QACEtD,cAAeuD,GAAGC,eAAepB,IAEnCtD,WAAYyD,4BAMdA,0BAA0BhB,SAAW,QAAS,YAAa,SAAU,iBASvE,QAASkC,sBAAqBC,YAAahB,MACzC,MAAQgB,cAAeA,YAAYpD,aAAeoC,OAASgB,YAAYC,SAGzE,QAASC,iBACPC,EAAEC,KAAKP,GAAGC,eAAeO,MAAO,SAAS3E,MAAQA,KAAKuE,UAAW,IAGnE,QAASK,8BACPhC,OAAOiC,QAAQb,EAAE,WACFA,EAAE,2DACdc,KAAK,WAEJ,GAAIC,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,UACnFJ,IAAGC,eAAea,aAAaF,qBACxBZ,IAAGC,eAAejD,cACvB,SAAS+D,KAAMC,WAKvB,QAASC,qBACP,GAAIL,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,WAC/Ec,aAAeZ,EAAEa,MAAMP,cAAe,KAC1CvE,QAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGC,eAAepB,GAAK,eAAiBqC,aAAapB,KAAK,SAG9G,QAASyB,mBAAkBC,QACzB,GAAIZ,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,UACnFJ,IAAGC,eAAewB,WAAWb,cAAeY,QAAQb,KAAK,aAEtD,SAAShD,OACVc,OAAOiD,MAAM7B,EAAE,SAAUlC,SAI7B,QAASgE,aACPrB,EAAEC,KAAKP,GAAGC,eAAeO,MAAO,SAAS3E,MACvCA,KAAKuE,UAAW,IAIpB,QAASwB,MAAKC,OACZ7B,GAAGC,eAAe6B,QAAQ,IAAMF,KAAMC,QAGxC,QAASE,UAASF,OAChB,MAAO1F,aAAY6F,OAAOJ,MAAQC,MAGpC,QAASI,gBACPjC,GAAGkC,KAAKC,QAAS,EACjBnC,GAAGC,eAAe6B,QAAQ,IAG5B,QAASM,YAAWC,OAAQC,YAC1B9D,QAAQpC,WAAWuE,KAAK,SAAS4B,UAC/B,GAAIC,SAAUlC,EAAEO,OAAO0B,SAAU,SAASE,GACxC,MAAa,KAATA,EAAE5D,GACG4D,EADT,SAEC,EAIHD,SAAQE,gBAAgB/B,KAAK,SAASgC,WACpCH,QAAQI,cAAcjC,KAAK,SAASkC,SAClCvE,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACftE,YAAa,wBACbC,WAAY,0BACZC,aAAc,SACduE,QACE+C,cAAeP,SACfQ,aAAcF,QACdG,gBAAiBV,oBAQ7B,QAASW,yBAAwBZ,OAAQa,UAAWC,IAClD,GAAIb,cAAec,KAAMD,GAAK,KAAOD,UAAY,KACjDlD,IAAGoC,WAAWC,OAAQC,YAGxB,QAASe,6BAA4BhB,QACnC,GAAIzB,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,WAC/EkD,YAAehB,aAEnBhC,GAAEC,KAAKK,cAAe,SAAS/E,MACL,SAApBA,KAAKkB,aAA0BlB,KAAK0H,OAAOC,OAC7ClB,WAAWmB,MAAML,KAAMvH,KAAK6H,KAAO,KAAO7H,KAAK0H,OAAS,MAE7B,SAApB1H,KAAKkB,cAERa,QAAQ+F,UAAU9H,KAAK+H,OAAS/H,KAAK+H,KAAKJ,OAC5ClD,EAAEC,KAAK1E,KAAK+H,KAAM,SAASC,KACrBA,IAAIC,MAAMN,QACZlB,WAAWmB,MAAML,KAAMS,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,QAIzDR,SAASG,KAAKzD,GAAGC,eAAe/C,SAASrB,KAAKgD,IAAI8B,KAAK,SAAS9E,MAC9D,MAAOA,MAAKkI,gBAAgBpD,KAAK,SAASI,MACxCT,EAAEC,KAAKQ,KAAK6C,KAAM,SAASC,KACrBA,IAAIC,MAAMN,QACZlB,WAAWmB,MAAML,KAAMS,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,gBAQnE3F,GAAG6F,IAAIV,UAAU3C,KAAK,WAChB2B,WAAWkB,QACbxD,GAAGoC,WAAWC,OAAQC,cAxL5B,GAAItC,IAAKiE,IAET9H,aAAY8D,eAAiBrE,iBAE7BoE,GAAGC,eAAiBrE,iBACpBoE,GAAGrB,WAAaA,WAChBqB,GAAGlB,aAAeA,aAClBkB,GAAGE,qBAAuBA,qBAC1BF,GAAGK,cAAgBA,cACnBL,GAAGS,2BAA6BA,2BAChCT,GAAGiB,kBAAoBA,kBACvBjB,GAAGuB,kBAAoBA,kBACvBvB,GAAG2B,UAAYA,UACf3B,GAAG4B,KAAOA,KACV5B,GAAG+B,SAAWA,SACd/B,GAAGiC,aAAeA,aAClBjC,GAAGoC,WAAaA,WAChBpC,GAAGqD,4BAA8BA,4BACjCrD,GAAGiD,wBAA0BA,wBAC7BjD,GAAGkC,MAASC,QAAQ,GArBtBlE,sBAAsBD,SAAW,SAAU,KAAM,SAAU,WAAY,YAAa,UAAW,UAAW,OAAQ,cAAe,SAAU,aAAc,oBAAqB,oBA+L9KJ,QACGC,OAAO,mBACPtC,WAAW,wBAAyB0C,0BCvMzC,WACE,YAMA,SAASiG,wBAAuB9F,OAAQF,OAAQd,WAAYb,aAAc8B,SAAUC,UAAW6F,SAAUC,aAAc7F,MAAO5B,KAAMR,YAAasC,OAAQC,SAAU2F,KAAM3I,mBAiBvK,QAAS4I,QAAO9C,QACdxB,GAAGuE,UAAW,EACdpI,YAAY6F,OAAOwC,MAAQ,GAC3BpG,OAAOQ,GAAG,mBAAoBnC,cAAe+E,OAAO3C,KAGtD,QAAS4F,kBACPhG,OAAOiG,OAAO7E,EAAE,mBACFA,EAAE,4BACbc,KAAK,SAASgE,MACb,GAAIhJ,aAAc,GAAIQ,cAElBwI,KAAMA,KACNC,YAAY,EACZC,UAAU,EACVC,MAAOC,WAGX5I,aAAY6I,KAAKrJ,eAIvB,QAASsJ,MAAKzD,QACPA,OAAOqD,WACV7E,GAAGuE,SAAW/C,OAAO3C,GACrBmB,GAAGkF,oBAAsBtH,QAAQuH,UAAW3D,OAAO4D,SACnD7G,MAAM,mBAAqBiD,OAAO3C,KAItC,QAASwG,eAAc7D,QACrBA,OAAOmD,KAAO3E,GAAGkF,oBAAoBP,KACrC3E,GAAGuE,UAAW,EAGhB,QAASe,MAAK9D,QACZ,GAAImD,MAAOnD,OAAOmD,IACdA,OAAQA,KAAKnB,OAAS,GAAKmB,MAAQ3E,GAAGkF,oBAAoBP,MAC5DnD,OAAO+D,QAAQZ,MACZhE,KAAK,SAASI,MACbf,GAAGuE,UAAW,GACb,SAASxD,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,WAAYkB,QAKnC,QAASyE,iBACHxF,GAAGyF,QAAQxF,eAAeyF,eAE5B1F,GAAGyF,QAAQxF,eAAe0F,UACvBhF,KAAK,WACJX,GAAGyF,QAAQxF,eAAiB,KAC5B7B,OAAOQ,GAAG,mBAAqBnC,cAAe,cAC7C,SAASsE,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,0DACAG,GAAGyF,QAAQxF,eAAe0E,MAC5B9E,EAAEkB,KAAKpD,UAIxBc,OAAOiC,QAAQb,EAAE,WAAYA,EAAE,iEACAG,GAAGyF,QAAQxF,eAAe0E,OACtDhE,KAAK,WACJ,MAAOX,IAAGyF,QAAQxF,eAAe0F,YAElChF,KAAK,WAEJ,MADAX,IAAGyF,QAAQxF,eAAiB,MACrB,IAPXxB,SASS,SAASsC,KAAMC,QACpBvC,OAAOiD,MAAM7B,EAAE,0DACAG,GAAGyF,QAAQxF,eAAe0E,MAC5B9E,EAAEkB,KAAKpD,UAK5B,QAASiI,aAAYvD,OAAQb,QA+C3B,QAASqE,6BAA4B5G,MAAOX,UAAWkD,QAErDvC,MAAM6G,SAAW,GAAI1B,eACnBlJ,IAAKoG,mBAAqB,IAAME,OAAO3C,GAAK,UAC5CkH,eAAgB,SAASC,KAAMC,UAC7BvI,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAMD,WAErCE,cAAe,SAASH,KAAMI,SAAUpF,OAAQqF,SAC9C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,aAAeI,KAAKC,UAAUH,SAAUI,OAAW,IACtFlI,UAAUc,OACV+E,SAAS9E,KACP8E,SAASsC,SACNC,QAAQ7G,EAAE,0DAA2DuG,SAASO,WAC9EC,SAAS,aACTC,UAAU,MACf1K,YAAY8D,eAAe6G,WAE7BC,aAAc,SAASf,KAAMI,SAAUpF,OAAQqF,SAC7C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,YAAcI,KAAKC,UAAUH,SAAUI,OAAW,KAEvFQ,YAAa,SAAShB,KAAMI,SAAUpF,OAAQqF,SAC5C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,WAAaI,KAAKC,UAAUH,SAAUI,OAAW,OAIxFvH,MAAMgI,MAAQ,WACZ3I,UAAUc,QAEZH,MAAMiI,OAAS,WACbjI,MAAM6G,SAASqB,aA3EnB7I,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACf5D,UACE,kDAAoD6D,EAAE,gBAAkB,KACxE,mCACA,qCACA,mFACA,8BACA,oCAAsCA,EAAE,gBAAkB,SAC1D,eACA,8DACA,6DACA,qBACA,aACA,kBACA,wBACA,4BACA,uDACA,iBAAmBA,EAAE,gCAAkC,UACvD,qDACA,mBAAqBA,EAAE,eAAiB,UACxC,mBACA,mHACA,eACA,oDAAsDA,EAAE,kBAAoB,UAC5E,2FACA,aACA,yBACA,6BACA,+EAAiFA,EAAE,UAAY,eAC/F,WACA,gBACAC,KAAK,IACPvE,WAAYsK,4BACZ9F,QACEyB,OAAQA,UAOZqE,4BAA4B7H,SAAW,QAAS,YAAa,UAmC/D,QAASoJ,eACP/K,OAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGyF,QAAQxF,eAAepB,GAAK,gBAGnF,QAASwI,WAAU1L,aAiBjB,QAAS2L,uBAAsBhJ,UAAW3C,aAKxC,QAASsL,SACP3I,UAAUc,OAJZ6E,KAAKtI,YAAcA,YACnBsI,KAAKgD,MAAQA,MAnBf3I,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCE,qBAAqB,EACrBC,eAAe,EACftE,YAAaK,YAAYkD,GAAK,SAC9BtD,WAAY+L,sBACZ9L,aAAc,QACduE,QACEpE,YAAaA,eAOjB2L,sBAAsBtJ,SAAW,YAAa,eAYhD,QAASuJ,OAAM5L,aAEbA,YAAY6L,KAAKC,SAAS9G,KAAK,WAE7BrC,UAAUe,MACR/D,YAAaK,YAAYkD,GAAK,gBAC9BtD,WAAY,gBACZC,aAAc,MACdmE,qBAAqB,EACrBC,eAAe,EACfG,QACE2H,aAAc/L,YAAY6L,KAAKG,MAC/BtD,KAAMA,KACN7C,OAAQ7F,iBAShB,QAASiM,mBAAkBC,iBACzBnK,QAAQwI,MAAM,qBAAuB2B,gBAAgB/C,MAAQ+C,gBAAgBlD,MAC7ExI,YAAY2L,WAAWD,gBAAgB/C,MAAO+C,gBAAgBlD,MAA9DxI,SAA0E,SAAS4E,MACjFtC,OAAOiD,MAAM7B,EAAE,WAAYA,EAAE,yCAxOjC,GAAIG,IAAKiE,IAETjE,IAAG+H,WAAarJ,SAASqJ,WACzB/H,GAAGyF,QAAUtJ,YACb6D,GAAGsE,OAASA,OACZtE,GAAGyE,eAAiBA,eACpBzE,GAAGiF,KAAOA,KACVjF,GAAGqF,cAAgBA,cACnBrF,GAAGsF,KAAOA,KACVtF,GAAGwF,cAAgBA,cACnBxF,GAAG4F,YAAcA,YACjB5F,GAAGoH,YAAcA,YACjBpH,GAAGqH,UAAYA,UACfrH,GAAGuH,MAAQA,MACXvH,GAAG4H,kBAAoBA,kBAhBzB1D,uBAAuBlG,SAAW,SAAU,SAAU,aAAc,eAAgB,WAAY,YAAa,WAAY,eAAgB,UAAW,OAAQ,cAAe,SAAU,aAAc,OAAQ,qBA+O3MJ,QACGC,OAAO,mBACPtC,WAAW,yBAA0B2I,2BCvP1C,WACE,YAOA,SAAS8D,gBAAe9J,OAAQG,SAAUC,UAAWnC,YAAaQ,KAAM8B,OAAQF,MAAOH,OAAQ7B,aAAcT,WA4B3G,QAASmM,cACP,GAAIC,GAAIlI,GAAGnE,KAAKsM,YAAY,GAC5B5J,OAAM,WAAa2J,GAErB,QAASE,eACPpI,GAAGnE,KAAKwM,SAAW,GAAIC,MAEzB,QAASC,YACP,GAAIL,GAAIlI,GAAGnE,KAAK2M,UAAU,GAC1BjK,OAAM,SAAW2J,GAEnB,QAASO,YACP,GAAIP,GAAIlI,GAAGnE,KAAK6M,UAAU,GAC1BnK,OAAM,SAAW2J,GAEnB,QAASS,UACP,GAAIT,GAAIlI,GAAGnE,KAAK+M,QAAQ,GAAI,GAC5BrK,OAAM,OAAS2J,GAEjB,QAASW,cACP,GAAIX,GAAIlI,GAAGnE,KAAKiN,YAAY,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxDvK,OAAM,WAAa2J,GAErB,QAASa,aACP,GAAIb,GAAIlI,GAAGnE,KAAKmN,WAAW,GAC3BzK,OAAM,OAAS2J,GAEjB,QAASe,YAAWjH,OAAQkH,eAE1B,MADA/M,aAAY8D,eAAe6B,QAAQE,QAASmH,KAAK,EAAMC,cAAc,GAAOF,eACrE/M,YAAY8D,eAAeoJ,OAEpC,QAAS/D,MAAKgE,MACRA,KAAKC,QACPvJ,GAAGnE,KAAK2N,QACL7I,KAAK,SAASI,MACb,GAAImH,GAAI5H,EAAEmJ,QAAQnJ,EAAEa,MAAMhF,YAAY8D,eAAeO,MAAO,MAAOR,GAAGnE,KAAKgD,GACnE,GAAJqJ,EAEF/L,YAAY8D,eAAe6G,UAI3B3K,YAAY8D,eAAeO,MAAM0H,GAAKtK,QAAQ8L,KAAK1J,GAAGnE,MAExDuC,OAAOQ,GAAG,6BAA+B3B,OAAQ+C,GAAGnE,KAAKgD,OAX7DmB,SAaS,SAAS2J,KACdjM,QAAQkM,IAAID,OAIpB,QAAS1C,SACP7I,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,KAAM8B,KAAK,WAClFX,GAAGnE,KAAO,WACHM,aAAY8D,eAAejD,eAGtC,QAAS6M,SACP7J,GAAGnE,KAAKiO,SAEV,QAASC,UACP/J,GAAGnE,KAAKiO,SACJ9J,GAAGnE,KAAKmO,OAEVhK,GAAGnE,KAAO,WACHM,aAAY8D,eAAejD,aAClCoB,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,MAIzET,OAAOQ,GAAG,6BAA+B3B,OAAQ+C,GAAGnE,KAAKgD,KAG7D,QAAS2G,eAAc3J,MACrB4C,OAAOiC,QAAQb,EAAE,WACFA,EAAE,oDAAqDhE,KAAKoO,cAC3DC,GAAIrK,EAAE,OAAQkK,OAAQlK,EAAE,QACrCc,KAAK,WAEJ9E,KAAK8J,UACFhF,KAAK,WAEJxE,YAAY8D,eAAeO,MAAQF,EAAE6J,OAAOhO,YAAY8D,eAAeO,MAAO,SAASiC,GACrF,MAAOA,GAAE5D,IAAMhD,KAAKgD,KAGtBmB,GAAGnE,KAAO,KACVuC,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,MACxE,SAASkC,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,WAAYA,EAAE,mDACAhE,KAAKoO,kBAK5C,QAASG,cACP/N,OAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGqK,cAAcxL,GAAK,eAAiBmB,GAAGnE,KAAKgD,GAGnG,QAASyL,eAAcjI,QACrB1F,KAAK4N,WAAWC,KAAKxK,GAAGqK,cAAcxL,GAAK,IAAMmB,GAAGnE,KAAKgD,GAAI,OAAO8B,KAAK,SAASI,MAyBhF,QAAS0J,+BAA8BxL,MAAOX,WAC5CW,MAAMgI,MAAQ,WACZ3I,UAAUc,QA1Bdd,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACf5D,UACE,kDAAoD6D,EAAE,oBAAsB,KAC5E,wBACA,YACAkB,KACA,aACA,yBACA,6BACA,qCAAuClB,EAAE,SAAW,eACpD,WACA,gBACAC,KAAK,IACPvE,WAAYkP,gCAMdA,8BAA8BzM,SAAW,QAAS,eAvJtD,GAAIgC,IAAKiE,IAETjE,IAAGnE,KAAOC,UAEVkE,GAAGqK,cAAgBlO,YAAY8D,eAC/BD,GAAG0K,cAAgB/N,KAAKgO,aACxB3K,GAAG4K,YAAcjO,KAAKkO,WACtB7K,GAAG8K,YAAcnO,KAAKoO,WACtB/K,GAAGgL,gBAAkBrO,KAAKsO,eAC1BjL,GAAGkL,cACHlL,GAAGmL,qBACHnL,GAAGiI,WAAaA,WAChBjI,GAAGoI,YAAcA,YACjBpI,GAAGuI,SAAWA,SACdvI,GAAGyI,SAAWA,SACdzI,GAAG2I,OAASA,OACZ3I,GAAG6I,WAAaA,WAChB7I,GAAG+I,UAAYA,UACf/I,GAAGiJ,WAAaA,WAChBjJ,GAAGsF,KAAOA,KACVtF,GAAGiH,MAAQA,MACXjH,GAAG6J,MAAQA,MACX7J,GAAG+J,OAASA,OACZ/J,GAAGwF,cAAgBA,cACnBxF,GAAGoK,WAAaA,WAChBpK,GAAGsK,cAAgBA,cA3BrBtC,eAAehK,SAAW,SAAU,WAAY,YAAa,cAAe,OAAQ,SAAU,UAAW,SAAU,eAAgB,aAmKnIJ,QACGC,OAAO,mBACPtC,WAAW,iBAAkByM,mBC5KlC,WACE,YAQA,SAASoD,aACP,OACEC,SAAU,IACVpM,OAAS8B,KAAM,cACfxF,YAAa,SAAU,SAAS2C,QAC9BA,OAAOoN,aAAe,SAASvK,MAC7B,GAAIwK,UACAC,kBAQJ,OAPIzK,MAAK0K,QAAQF,MAAM9H,KAAK1C,KAAK0K,QAC7B1K,KAAK2K,SAASH,MAAM9H,KAAK1C,KAAK2K,SAC9B3K,KAAK4K,UAAUH,gBAAgB/H,KAAK1C,KAAK4K,UACzC5K,KAAK6K,QAAQJ,gBAAgB/H,KAAK1C,KAAK6K,QACvCJ,gBAAgBhI,OAAS,GAAG+H,MAAM9H,KAAK+H,gBAAgB1L,KAAK,OAC5DiB,KAAK8K,SAASN,MAAM9H,KAAK1C,KAAK8K,SAC9B9K,KAAK+K,YAAYP,MAAM9H,KAAK1C,KAAK+K,YAC9BP,MAAMzL,KAAK,WAGtB9D,SAAU,yDAId4B,QACGC,OAAO,eACPkO,UAAU,YAAaX","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', 'angularFileUpload', 'ck', 'SOGo.Common', 'SOGo.PreferencesUI', '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('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', '$q', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Account', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $q, $state, $timeout, $mdDialog, focus, Account, 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.copySelectedCards = copySelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.newMessageWithSelectedCards = newMessageWithSelectedCards;\n vm.newMessageWithRecipient = newMessageWithRecipient;\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 copySelectedCards(folder) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {\n // TODO: refresh target addressbook?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\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 AddressBook.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n\n function newMessage($event, recipients) {\n Account.$findAll().then(function(accounts) {\n var account = _.filter(accounts, function(o) {\n if (o.id === 0)\n return o;\n })[0];\n\n // We must initialize the Account with its mailbox\n // list before proceeding with message's creation\n account.$getMailboxes().then(function(mailboxes) {\n account.$newMessage().then(function(message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: '../Mail/UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n });\n });\n });\n });\n }\n\n function newMessageWithRecipient($event, recipient, fn) {\n var recipients = [{full: fn + ' <' + recipient + '>'}];\n vm.newMessage($event, recipients);\n }\n\n function newMessageWithSelectedCards($event) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var promises = [], recipients = [];\n\n _.each(selectedCards, function(card) {\n if (card.c_component == 'vcard' && card.c_mail.length) {\n recipients.push({full: card.c_cn + ' <' + card.c_mail + '>'});\n }\n else if (card.c_component == 'vlist') {\n // If the list's members were already fetch, use them\n if (angular.isDefined(card.refs) && card.refs.length) {\n _.each(card.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n }\n else {\n promises.push(vm.selectedFolder.$getCard(card.id).then(function(card) {\n return card.$futureCardData.then(function(data) {\n _.each(data.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n });\n }));\n }\n }\n });\n\n $q.all(promises).then(function() {\n if (recipients.length)\n vm.newMessage($event, recipients);\n });\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', '$mdToast', 'FileUploader', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, $mdToast, FileUploader, 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 AddressBook.$query.value = '';\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($event, folder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' import_export',\n '
',\n '
' + l('Import Cards') + '
',\n '
',\n ' ',\n ' close',\n ' ',\n '
',\n '
',\n ' ',\n '
',\n '
',\n ' ' + l('Select a vCard or LDIF file.') + '',\n ' ',\n ' ',\n '
',\n ' ' + l('No file chosen') + '',\n ' 0\">{{ uploader.queue[0].file.name }}',\n '
',\n '
',\n '
',\n ' ' + l('Upload') + '',\n '
',\n '
'\n ].join(''),\n controller: CardsImportDialogController,\n locals: {\n folder: folder\n }\n });\n\n /**\n * @ngInject\n */\n CardsImportDialogController.$inject = ['scope', '$mdDialog', 'folder'];\n function CardsImportDialogController(scope, $mdDialog, folder) {\n\n scope.uploader = new FileUploader({\n url: ApplicationBaseURL + '/' + folder.id + '/import',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n $mdDialog.hide();\n $mdToast.show(\n $mdToast.simple()\n .content(l('A total of %{0} cards were imported in the addressbook.', response.imported))\n .position('top right')\n .hideDelay(3000));\n AddressBook.selectedFolder.$reload();\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n scope.close = function() {\n $mdDialog.hide();\n };\n scope.upload = function() {\n scope.uploader.uploadAll();\n };\n }\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(addressbook) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: addressbook.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n addressbook: addressbook\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'addressbook'];\n function LinksDialogController($mdDialog, addressbook) {\n var vm = this;\n this.addressbook = addressbook;\n this.close = close;\n\n function close() {\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.addBirthday = addBirthday;\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.close = close;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.exportCard = exportCard;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addBirthday() {\n vm.card.birthday = new Date();\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 close() {\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id }).then(function() {\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\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 exportCard() {\n window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;\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 index 1910b14c0..1dbb30fd4 100644 --- a/UI/WebServerResources/js/Contacts.services.js +++ b/UI/WebServerResources/js/Contacts.services.js @@ -1,2 +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,$query:{search:"name_or_address",value:"",sort:"c_cn",asc:1},activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),Preferences.ready().then(function(){Preferences.settings.Contact.SortingState&&(AddressBook.$query.sort=Preferences.settings.Contact.SortingState[0],AddressBook.$query.asc=parseInt(Preferences.settings.Contact.SortingState[1]))}),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)})),_.union(this.$addressbooks,this.$subscriptions,this.$remotes)},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query);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},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;return AddressBook.$Preferences.ready().then(function(){if(options&&(angular.extend(AddressBook.$query,options),options.dry)){if(!search)return _this.$cards=[],AddressBook.$q.when(_this.$cards);if(AddressBook.$query.value==search)return AddressBook.$q.when(_this.$cards)}return AddressBook.$query.value=search,_this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$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.$copyCards=function(cards,folder){var uids=_.map(cards,function(card){return card.id});return AddressBook.$$resource.post(this.id,"copy",{uids:uids,folder:folder})},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):delete this[attribute]):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 this.birthday?[this.birthday.getFullYear(),this.birthday.getMonth()+1,this.birthday.getDate()].join("/"):""},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+"]"}}(); +!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,$query:{search:"name_or_address",value:"",sort:"c_cn",asc:1},activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),Preferences.ready().then(function(){Preferences.settings.Contact.SortingState&&(AddressBook.$query.sort=Preferences.settings.Contact.SortingState[0],AddressBook.$query.asc=parseInt(Preferences.settings.Contact.SortingState[1]))}),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)})),_.union(this.$addressbooks,this.$subscriptions,this.$remotes)},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$Preferences.ready().then(function(){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query)});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.$isLoading=!0,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},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(){return this.$startRefreshTimeout(),this.$filter()},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;return this.$isLoading=!0,AddressBook.$Preferences.ready().then(function(){if(options&&(angular.extend(AddressBook.$query,options),options.dry)){if(!search)return _this.$cards=[],AddressBook.$q.when(_this.$cards);if(AddressBook.$query.value==search)return AddressBook.$q.when(_this.$cards)}return angular.isDefined(search)&&(AddressBook.$query.value=search),_this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$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]))}),_this.$isLoading=!1,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.$copyCards=function(cards,folder){var uids=_.map(cards,function(card){return card.id});return AddressBook.$$resource.post(this.id,"copy",{uids:uids,folder:folder})},AddressBook.prototype.$save=function(){return AddressBook.$$resource.save(this.id,this.$omit()).then(function(data){return data})},AddressBook.prototype.$getCard=function(cardId){var _this=this;return this.$id().then(function(addressbookId){var fullCard,cachedCard=_.find(_this.cards,function(data){return cardId==data.id});return cachedCard&&cachedCard.$futureCardData?cachedCard:(fullCard=AddressBook.$Card.$find(addressbookId,cardId),fullCard.$id().then(function(cardId){cachedCard&&angular.extend(cachedCard,fullCard)}),fullCard)})},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.$isLoading=!1,_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):delete this[attribute]):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 this.birthday?[this.birthday.getFullYear(),this.birthday.getMonth()+1,this.birthday.getDate()].join("/"):""},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 index c9ac6b12a..955d1a129 100644 --- a/UI/WebServerResources/js/Contacts.services.js.map +++ b/UI/WebServerResources/js/Contacts.services.js.map @@ -1 +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","$query","search","value","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Contact","SortingState","parseInt","module","e","factory","$filterAll","options","excludedCards","params","$cards","when","isUndefined","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","union","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","cards","isOwned","isSuperUser","owner","login","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","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","$copyCards","folder","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","birthday","getFullYear","getMonth","getDate","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","Date","deep","copy","getTime","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 $query: {search: 'name_or_address', value: '', sort: 'c_cn', asc: 1},\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Contact.SortingState) {\n AddressBook.$query.sort = Preferences.settings.Contact.SortingState[0];\n AddressBook.$query.asc = parseInt(Preferences.settings.Contact.SortingState[1]);\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 _.union(this.$addressbooks, this.$subscriptions, this.$remotes);\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', AddressBook.$query);\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 };\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 return AddressBook.$Preferences.ready().then(function() {\n if (options) {\n angular.extend(AddressBook.$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 (AddressBook.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(_this.$cards);\n }\n }\n }\n\n AddressBook.$query.value = search;\n\n return _this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$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 /**\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 $copyCards\n * @memberof AddressBook.prototype\n * @desc Copy multiple cards from addressbook to an other one.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$copyCards = function(cards, folder) {\n var uids = _.map(cards, function(card) { return card.id; });\n return AddressBook.$$resource.post(this.id, 'copy', {uids: uids, folder: folder});\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 else\n delete this[attribute];\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 /**\n * @function $birthday\n * @memberof Card.prototype\n * @returns the formatted birthday object\n */\n Card.prototype.$birthday = function() {\n if (this.birthday) {\n return [this.birthday.getFullYear(), this.birthday.getMonth() + 1, this.birthday.getDate()].join('/');\n }\n return '';\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\n // We convert back our birthday object\n if (!deep) {\n if (card.birthday)\n card.birthday = card.birthday.getTime()/1000;\n else\n card.birthday = 0;\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 +{"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","$query","search","value","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Contact","SortingState","parseInt","module","e","factory","$filterAll","options","excludedCards","params","$cards","when","isUndefined","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","union","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","$isLoading","cards","isOwned","isSuperUser","owner","login","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","isDefined","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","$copyCards","folder","save","$omit","$getCard","cardId","fullCard","cachedCard","$futureCardData","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","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","birthday","getFullYear","getMonth","getDate","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","Date","deep","copy","getTime","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 $query: {search: 'name_or_address', value: '', sort: 'c_cn', asc: 1},\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Contact.SortingState) {\n AddressBook.$query.sort = Preferences.settings.Contact.SortingState[0];\n AddressBook.$query.asc = parseInt(Preferences.settings.Contact.SortingState[1]);\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 _.union(this.$addressbooks, this.$subscriptions, this.$remotes);\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.$Preferences.ready().then(function() {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$query);\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.$isLoading = true;\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 };\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 return this.$filter();\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 this.$isLoading = true;\n\n return AddressBook.$Preferences.ready().then(function() {\n if (options) {\n angular.extend(AddressBook.$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 (AddressBook.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(_this.$cards);\n }\n }\n }\n\n if (angular.isDefined(search))\n AddressBook.$query.value = search;\n\n return _this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$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 _this.$isLoading = false;\n return cards;\n });\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 $copyCards\n * @memberof AddressBook.prototype\n * @desc Copy multiple cards from addressbook to an other one.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$copyCards = function(cards, folder) {\n var uids = _.map(cards, function(card) { return card.id; });\n return AddressBook.$$resource.post(this.id, 'copy', {uids: uids, folder: folder});\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 var _this = this;\n\n return this.$id().then(function(addressbookId) {\n var fullCard,\n cachedCard = _.find(_this.cards, function(data) {\n return cardId == data.id;\n });\n\n if (cachedCard && cachedCard.$futureCardData)\n // Full card is available\n return cachedCard;\n\n fullCard = AddressBook.$Card.$find(addressbookId, cardId);\n fullCard.$id().then(function(cardId) {\n // Extend the Card object of the addressbook list with the full card description\n if (cachedCard)\n angular.extend(cachedCard, fullCard);\n });\n return fullCard;\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 _this.$isLoading = false;\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 else\n delete this[attribute];\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 /**\n * @function $birthday\n * @memberof Card.prototype\n * @returns the formatted birthday object\n */\n Card.prototype.$birthday = function() {\n if (this.birthday) {\n return [this.birthday.getFullYear(), this.birthday.getMonth() + 1, this.birthday.getDate()].join('/');\n }\n return '';\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.then(function(data) {\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 return _this;\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\n // We convert back our birthday object\n if (!deep) {\n if (card.birthday)\n card.birthday = card.birthday.getTime()/1000;\n else\n card.birthday = 0;\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 index 86c1ec0b3..c2228f815 100644 --- a/UI/WebServerResources/js/Mailer.js +++ b/UI/WebServerResources/js/Mailer.js @@ -1,2 +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(){var unseenCount=_.filter(selectedMessages,function(message){return!message.isread});vm.selectedFolder.$messages=_.difference(vm.selectedFolder.$messages,selectedMessages),vm.selectedFolder.unseenCount=-unseenCount},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 markSelectedMessagesAsFlagged(){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");vm.selectedFolder.$flagMessages(selectedUIDs,"\\Flagged","add").then(function(d){_.forEach(selectedMessages,function(message){message.isflagged=!0})})}function markSelectedMessagesAsUnread(){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");vm.selectedFolder.$flagMessages(selectedUIDs,"seen","remove").then(function(d){_.forEach(selectedMessages,function(message){message.isread=!1,vm.selectedFolder.unseenCount++})})}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){var message=vm.account.$newMessage();$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,stateRecipients:[]}})}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.markSelectedMessagesAsFlagged=markSelectedMessagesAsFlagged,vm.markSelectedMessagesAsUnread=markSelectedMessagesAsUnread,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,recipients){angular.isDefined(recipients)||(recipients=[]),$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,stateRecipients:recipients}})}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 newMessage($event,recipient){var message=vm.account.$newMessage();showMailEditor($event,message,[recipient])}function saveMessage(){window.location.href=ApplicationBaseURL+"/"+vm.mailbox.id+"/saveMessages?uid="+vm.message.uid}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.newMessage=newMessage,vm.saveMessage=saveMessage,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,stateRecipients,$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),angular.isDefined(stateRecipients)&&(vm.message.editable.to=_.union(vm.message.editable.to,_.pluck(stateRecipients,"full"))),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","stateRecipients","$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)}(); +!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 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 index 3145f748f..3a1804345 100644 --- a/UI/WebServerResources/js/Mailer.js.map +++ b/UI/WebServerResources/js/Mailer.js.map @@ -1 +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","unseenCount","isread","difference","alert","copySelectedMessages","folder","$copyMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","join","selectAll","markSelectedMessagesAsFlagged","$flagMessages","d","isflagged","markSelectedMessagesAsUnread","sort","field","sortedBy","$query","cancelSearch","mode","search","newMessage","$event","$newMessage","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateRecipients","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","$$resource","post","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","timeInterval","MessageController","Message","doDelete","index","findIndex","splice","showMailEditor","recipients","reply","$reply","replyAll","$replyAll","forward","$forward","edit","$editableContent","recipient","saveMessage","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","union","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.markSelectedMessagesAsFlagged = markSelectedMessagesAsFlagged;\n vm.markSelectedMessagesAsUnread = markSelectedMessagesAsUnread;\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 // Decrement the unseenCount accordingly\n var unseenCount = _.filter(selectedMessages, function(message) { return !message.isread; });\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n vm.selectedFolder.unseenCount =- unseenCount;\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 markSelectedMessagesAsFlagged() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, '\\\\Flagged', 'add').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isflagged = true;\n });\n });\n }\n\n function markSelectedMessagesAsUnread() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, 'seen', 'remove').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isread = false;\n vm.selectedFolder.unseenCount++;\n });\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 var message = vm.account.$newMessage();\n\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 stateRecipients: [] \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.newMessage = newMessage;\n vm.saveMessage = saveMessage;\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, recipients) {\n\n if (!angular.isDefined(recipients))\n recipients = [];\n\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 stateRecipients: recipients\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 newMessage($event, recipient) {\n var message = vm.account.$newMessage();\n showMailEditor($event, message, [recipient]);\n }\n\n function saveMessage() {\n window.location.href = ApplicationBaseURL + '/' + vm.mailbox.id + '/saveMessages?uid=' + vm.message.uid;\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', 'stateRecipients', '$timeout', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $state, $q, $mdDialog, FileUploader, stateAccounts, stateMessage, stateRecipients, $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 if (angular.isDefined(stateRecipients)) {\n vm.message.editable.to = _.union(vm.message.editable.to, _.pluck(stateRecipients, 'full'));\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 +{"version":3,"file":"Mailer.js","sources":["Mailer/Mailer.app.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","sgImip","link","scope","iElement","attrs","ctrl","pathToAttachment","sgImipPath","restrict","sgImipController","$scope","User","vm","this","delegateInvitation","delegatedTo","searchText","userFilter","$query","iCalendarAction","action","data","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 /* 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 index 79a413ba1..79321a3f5 100644 --- a/UI/WebServerResources/js/Mailer.services.js +++ b/UI/WebServerResources/js/Mailer.services.js @@ -1,2 +1,3 @@ -!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;return Account.$$resource.post(path.toString(),"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0})})},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message (compose): "+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 (edit): "+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;i=0&&indexstartIndex&&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(){var _this=this;return Mailbox.$$resource.post(this.id,"emptyTrash").then(function(){_this.$messages=[],_this.uidsMap={},_this.unseenCount=0,angular.isDefined(_this.children)&&_this.children.length&&_this.$account.$getMailboxes({reload:!0})})},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$flagMessages=function(uids,flags,operation){var data={msgUIDs:uids,flags:flags,operation:operation};return Mailbox.$$resource.post(this.id,"addOrRemoveLabel",data)},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.$showDetailedRecipients=!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,this.$tapette+=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()),$tapette:0}),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,identities=_.pluck(_this.$mailbox.$account.identities,"email");_.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.name.split(" ").length&&(data.shortname=data.name.split(" ")[0].replace("'",""))):(data.full="<"+data.email+">",data.shortname=data.email.split("@")[0]),data.image=Message.$gravatar(data.email,32),_.indexOf(identities,data.email)>=0&&(data.shortname=l("me"))})})},Message.prototype.$shortRecipients=function(){var _this=this,result=[];return _.each(["to","cc","bcc"],function(type){_.each(_this[type],function(data,i){result.push(data.shortname)})}),result.join(", ")},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.showDetailedRecipients=function(){this.$showDetailedRecipients=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){part.msgclass="msg-attachment-other","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":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.activeUser("folderURL")+"Mail",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){return data?Account.$unwrapCollection(data):Account.$$resource.fetch("","mailAccounts").then(function(o){return Account.$unwrapCollection(o)})},Account.$unwrapCollection=function(data){var collection=[];return 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;return Account.$$resource.post(path.toString(),"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0})})},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message (compose): "+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 (edit): "+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;i=0&&indexstartIndex&&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(){var _this=this;return Mailbox.$$resource.post(this.id,"emptyTrash").then(function(){_this.$messages=[],_this.uidsMap={},_this.unseenCount=0,angular.isDefined(_this.children)&&_this.children.length&&_this.$account.$getMailboxes({reload:!0})})},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$flagMessages=function(uids,flags,operation){var data={msgUIDs:uids,flags:flags,operation:operation};return Mailbox.$$resource.post(this.id,"addOrRemoveLabel",data)},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,!0)),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,lazy){this.accountId=accountId,this.$mailbox=mailbox,this.$hasUnsafeContent=!1,this.$loadUnsafeContent=!1,this.$showDetailedRecipients=!1,this.editable={to:[],cc:[],bcc:[]},this.selected=!1,"function"!=typeof futureMessageData.then?angular.isDefined(lazy)&&lazy?this.uid=futureMessageData.uid:(angular.extend(this,futureMessageData),this.$formatFullAddresses()):this.$unwrap(futureMessageData)}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){if(angular.isUndefined(this.id)){var path;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),this.id=path.join("/")}return this.id},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,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,identities=_.pluck(_this.$mailbox.$account.identities,"email");_.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.name.split(" ").length&&(data.shortname=data.name.split(" ")[0].replace("'",""))):(data.full="<"+data.email+">",data.shortname=data.email.split("@")[0]),data.image=Message.$gravatar(data.email,32),_.indexOf(identities,data.email)>=0&&(data.shortname=l("me"))})})},Message.prototype.$shortRecipients=function(){var _this=this,result=[];return _.each(["to","cc","bcc"],function(type){_.each(_this[type],function(data,i){result.push(data.shortname)})}),result.join(", ")},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.showDetailedRecipients=function(){this.$showDetailedRecipients=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){part.msgclass="msg-attachment-other","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;i0&&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,recipients){null===messageDialog&&(angular.isDefined(recipients)||(recipients=[]),messageDialog=$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,stateRecipients:recipients}})["finally"](function(){messageDialog=null}))}function close(){$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)}).then(function(){vm.message=null,delete stateMailbox.selectedMessage})}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 newMessage($event,recipient){var message=vm.account.$newMessage();showMailEditor($event,message,[recipient])}function saveMessage(){window.location.href=ApplicationBaseURL+"/"+vm.mailbox.id+"/saveMessages?uid="+vm.message.uid}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,messageDialog=null;vm.accounts=stateAccounts,vm.account=stateAccount,vm.mailbox=stateMailbox,vm.message=stateMessage,vm.service=Message,vm.tags={searchText:"",selected:""},vm.doDelete=doDelete,vm.close=close,vm.reply=reply,vm.replyAll=replyAll,vm.forward=forward,vm.edit=edit,vm.newMessage=newMessage,vm.saveMessage=saveMessage,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,stateRecipients,$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){return AddressBook.$filterAll($query)}function addRecipient(user){var recipient=[];return angular.isString(user)?user:(user.$$fullname&&recipient.push(user.$$fullname),user.$$email&&recipient.push("<"+user.$$email+">"),recipient.join(" "))}function autosaveDrafts(){vm.message.$save(),Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60))}var vm=this;vm.addRecipient=addRecipient,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),angular.isDefined(stateRecipients)&&(vm.message.editable.to=_.union(vm.message.editable.to,_.pluck(stateRecipients,"full"))),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","stateRecipients","$timeout","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","AddressBook","Preferences"],angular.module("SOGo.MailerUI").controller("MessageEditorController",MessageEditorController)}(); //# sourceMappingURL=Mailer.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.services.js.map b/UI/WebServerResources/js/Mailer.services.js.map index 9cb5681ee..6660173df 100644 --- a/UI/WebServerResources/js/Mailer.services.js.map +++ b/UI/WebServerResources/js/Mailer.services.js.map @@ -1 +1 @@ -{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js"],"names":["Account","futureAccountData","then","angular","extend","this","_","each","identities","identity","fullName","full","email","$log","debug","JSON","stringify","undefined","$factory","$q","$timeout","Settings","Resource","Mailbox","Message","$$resource","baseURL","activeUser","$Mailbox","$Message","module","e","factory","$findAll","data","collection","forEach","o","i","id","prototype","$getMailboxes","options","_this","deferred","defer","$mailboxes","reload","$find","$flattenMailboxes","resolve","promise","allMailboxes","_visit","mailboxes","push","children","length","$$flattenMailboxes","$getMailboxByType","type","mailbox","_find","find","console","specialMailboxes","$getMailboxByPath","path","$newMailbox","name","post","toString","$newMessage","fetch","message","accountId","mailboxPath","$absolutePath","asDraft","editable","$addDelegate","user","param","uid","indexOf","pluck","delegates","users","status","reject","l","$removeDelegate","splice","account","futureMailboxData","$account","init","newMailboxData","create","$unwrap","Acl","Preferences","PRELOAD","$$Acl","$Preferences","$query","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Mail","SortingState","parseInt","constant","LOOKAHEAD","SIZE","$unwrapCollection","createMailboxes","level","index","map","split","component","asCSSIdentifier","join","$isLoading","$messages","uidsMap","$id","$acl","$isEditable","isEditable","isUndefined","$shadowData","$omit","getLength","getItemAtIndex","$loadMessage","$selectedCount","count","filter","selected","$filter","sortingAttributes","filters","isDefined","unseenCount","cancel","searchInput","secondFilter","match","searchBy","copy","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","timeInterval","messageId","endIndex","uids","futureHeadersData","startIndex","max","loaded","subject","Math","min","loading","$unwrapHeaders","$rename","findParent","parent","parentMailbox","$save","sibling","localeCompare","$compact","$setFolderAs","$emptyTrash","$markAsRead","$flagMessages","flags","operation","msgUIDs","$delete","remove","$deleteMessages","$copyMessages","folder","$moveMessages","$reset","value","key","save","error","$futureMailboxData","headers","invoke","threaded","reduce","msgs","msg","object","isError","j","messageHeaders","futureMessageData","$mailbox","$hasUnsafeContent","$loadUnsafeContent","$showDetailedRecipients","to","cc","bcc","$formatFullAddresses","$tapette","$sce","Gravatar","$gravatar","SOGoMailLabelsColors","$tags","filterTags","query","re","RegExp","keys","tag","search","draftId","$setUID","oldUID","shortname","replace","image","$shortRecipients","result","$shortAddress","address","loadUnsafeContent","showDetailedRecipients","$content","parts","part","msgclass","content","alternatePart","preferredPart","contentType","isArray","mixedPart","safeContent","html","unsafeContent","document","createElement","innerHTML","suffix","element","elements","querySelectorAll","attr","removeAttr","trustAs","participants","participant","compile","$editableContent","text","addTag","$addOrRemoveTag","removeTag","$imipAction","action","$reload","$sendMDN","shouldAskReceipt","$deleteAttachment","filename","attachmentAttrs","attachment","toggleFlag","isflagged","$reply","$newDraft","$replyAll","$forward","response","$send","$futureMessageData","isread"],"mappings":"CAEA,WACE,YAOA,SAASA,SAAQC,mBAEuB,kBAA3BA,mBAAkBC,OAC3BC,QAAQC,OAAOC,KAAMJ,mBACrBK,EAAEC,KAAKF,KAAKG,WAAY,SAASC,UAC3BA,SAASC,SACXD,SAASE,KAAOF,SAASC,SAAW,KAAOD,SAASG,MAAQ,IAE5DH,SAASE,KAAO,IAAMF,SAASG,MAAQ,MAE3CZ,QAAQa,KAAKC,MAAM,YAAcC,KAAKC,UAAUf,kBAAmBgB,OAAW,KAalFjB,QAAQkB,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,UAAW,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUC,QAASC,SAUtJ,MATArB,SAAQC,OAAOJ,SACbmB,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASK,UAAWL,SAASM,cACtDC,SAAUL,QACVM,SAAUL,UAGLxB,SAOT,KACEG,QAAQ2B,OAAO,iBAEjB,MAAMC,GACJ5B,QAAQ2B,OAAO,iBAAkB,gBAEnC3B,QAAQ2B,OAAO,iBACZE,QAAQ,UAAWhC,QAAQkB,UAQ9BlB,QAAQiC,SAAW,SAASC,MAC1B,GAAIC,cAQJ,OAPID,OAEF/B,QAAQiC,QAAQF,KAAM,SAASG,EAAGC,GAChCD,EAAEE,GAAKD,EACPH,WAAWG,GAAK,GAAItC,SAAQqC,KAGzBF,YAUTnC,QAAQwC,UAAUC,cAAgB,SAASC,SACzC,GAAIC,OAAQtC,KACRuC,SAAW5C,QAAQmB,GAAG0B,OAa1B,QAXIxC,KAAKyC,YAAgBJ,SAAWA,QAAQK,OAI1C/C,QAAQ4B,SAASoB,MAAM3C,MAAMH,KAAK,SAASgC,MACzCS,MAAMG,WAAaZ,KACnBS,MAAMM,mBAAmBF,QAAQ,IACjCH,SAASM,QAAQP,MAAMG,cANzBF,SAASM,QAAQ7C,KAAKyC,YAUjBF,SAASO,SAUlBnD,QAAQwC,UAAUS,kBAAoB,SAASP,SAC7C,GAAIC,OAAQtC,KACR+C,gBACAC,OAAS,SAASC,WAChBhD,EAAEC,KAAK+C,UAAW,SAASjB,GACzBe,aAAaG,KAAKlB,GACdA,EAAEmB,UAAYnB,EAAEmB,SAASC,OAAS,GACpCJ,OAAOhB,EAAEmB,YAanB,QARInD,KAAKqD,oBAAwBhB,SAAWA,QAAQK,QAIlDM,OAAOhD,KAAKyC,YACZH,MAAMe,mBAAqBN,cAJ3BA,aAAe/C,KAAKqD,mBAOfN,cAGTpD,QAAQwC,UAAUmB,kBAAoB,SAASC,MAC7C,GAAIC,SAEAC,MAAQ,SAASR,WACf,GAAIO,SAAUvD,EAAEyD,KAAKT,UAAW,SAASjB,GACvC,MAAOA,GAAEuB,MAAQA,MASnB,OAPKC,UACH1D,QAAQiC,QAAQkB,UAAW,SAASjB,IAC7BwB,SAAWxB,EAAEmB,UAAYnB,EAAEmB,SAASC,OAAS,IAChDI,QAAUC,MAAMzB,EAAEmB,aAIjBK,QAEbA,SAAUC,MAAMzD,KAAKyC,YAErBkB,QAAQlD,MAAM+C,SACdG,QAAQlD,MAAMT,KAAK4D,mBASrBjE,QAAQwC,UAAU0B,kBAAoB,SAASC,MAC7C,GAAIN,SAAU,KAEVC,MAAQ,SAASR,WACf,GAAIO,SAAUvD,EAAEyD,KAAKT,UAAW,SAASjB,GACvC,MAAOA,GAAE8B,MAAQA,MASnB,OAPKN,UACH1D,QAAQiC,QAAQkB,UAAW,SAASjB,IAC7BwB,SAAWxB,EAAEmB,UAAYnB,EAAEmB,SAASC,OAAS,IAChDI,QAAUC,MAAMzB,EAAEmB,aAIjBK,QAIb,OAFAA,SAAUC,MAAMzD,KAAKyC,aAWvB9C,QAAQwC,UAAU4B,YAAc,SAASD,KAAME,MAC7C,GAAI1B,OAAQtC,IAEZ,OAAOL,SAAQyB,WAAW6C,KAAKH,KAAKI,WAAY,gBAAiBF,KAAMA,OAAOnE,KAAK,WACjFyC,MAAMF,eAAeM,QAAQ,OAUjC/C,QAAQwC,UAAUgC,YAAc,WAC9B,GAAI7B,OAAQtC,IAGZ,OAAOL,SAAQyB,WAAWgD,MAAMpE,KAAKkC,GAAGgC,WAAY,WAAWrE,KAAK,SAASgC,MAC3ElC,QAAQa,KAAKC,MAAM,0BAA4BC,KAAKC,UAAUkB,KAAMjB,OAAW,GAC/E,IAAIyD,SAAU,GAAI1E,SAAQ6B,SAASK,KAAKyC,UAAWhC,MAAMuB,kBAAkBhC,KAAK0C,aAAc1C,KAC9F,OAAOwC,WACNxE,KAAK,SAASwE,SAEf,MAAO1E,SAAQyB,WAAWgD,MAAMC,QAAQG,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAASgC,MAG5F,MAFAlC,SAAQa,KAAKC,MAAM,uBAAyBC,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5Ed,QAAQC,OAAOsE,QAAQK,SAAU7C,MAC1BwC,aAYb1E,QAAQwC,UAAUwC,aAAe,SAASC,MACxC,GAAItC,OAAQtC,KACRuC,SAAW5C,QAAQmB,GAAG0B,QACtBqC,OAASC,IAAKF,KAAKE,IAavB,QAZKF,KAAKE,KAAO7E,EAAE8E,QAAQ9E,EAAE+E,MAAMhF,KAAKiF,UAAW,OAAQL,KAAKE,KAAO,GAErEvC,SAASM,UAGTlD,QAAQyB,WAAWgD,MAAMpE,KAAKkC,GAAGgC,WAAY,cAAeW,OAAOhF,KAAK,WACtEyC,MAAM2C,UAAU/B,KAAK0B,MACrBrC,SAASM,QAAQP,MAAM4C,QACtB,SAASrD,KAAMsD,QAChB5C,SAAS6C,OAAOC,EAAE,yCAGf9C,SAASO,SAUlBnD,QAAQwC,UAAUmD,gBAAkB,SAASR,KAC3C,GAAIxC,OAAQtC,KACR6E,OAASC,IAAKA,IAClB,OAAOnF,SAAQyB,WAAWgD,MAAMpE,KAAKkC,GAAGgC,WAAY,iBAAkBW,OAAOhF,KAAK,WAChF,GAAIoC,GAAIhC,EAAE8E,QAAQ9E,EAAE+E,MAAM1C,MAAM2C,UAAW,OAAQH,IAC/C7C,IAAK,GACPK,MAAM2C,UAAUM,OAAOtD,EAAG,SChQlC,WACE,YAOA,SAASf,SAAQsE,QAASC,mBAGxB,GAFAzF,KAAK0F,SAAWF,QAEsB,kBAA3BC,mBAAkB5F,MAE3B,GADAG,KAAK2F,KAAKF,mBACNzF,KAAKgE,OAAShE,KAAK8D,KAAM,CAE3B,GAAI8B,gBAAiB1E,QAAQE,WAAWyE,OAAO,eAAgB7F,KAAKgE,KACpEhE,MAAK8F,QAAQF,qBAMf5F,MAAK8F,QAAQL,mBASjBvE,QAAQL,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,MAAO,cAAe,oBAAqB,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUE,QAAS4E,IAAKC,YAAaC,SAsBxM,MArBAnG,SAAQC,OAAOmB,SACbJ,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASM,WAAW,aAAe,OAAQN,SAASM,cAC7EE,SAAUL,QACV+E,MAAOH,IACPI,aAAcH,YACdI,QAAUC,KAAM,OAAQC,IAAK,GAC7BC,eAAgB,KAChBC,gBAAiB,KACjBP,QAASA,UAGXD,YAAYS,QAAQ5G,KAAK,WACnBmG,YAAYU,SAASC,KAAKC,eAC5B1F,QAAQkF,OAAOC,KAAOL,YAAYU,SAASC,KAAKC,aAAa,GAC7D1F,QAAQkF,OAAOE,IAAMO,SAASb,YAAYU,SAASC,KAAKC,aAAa,OAIlE1F,SAOT,KACEpB,QAAQ2B,OAAO,iBAEjB,MAAMC,GACJ5B,QAAQ2B,OAAO,iBAAkB,gBAEnC3B,QAAQ2B,OAAO,iBACZqF,SAAS,qBACRC,UAAW,GACXC,KAAM,MAEPrF,QAAQ,UAAWT,QAAQL,UAS9BK,QAAQyB,MAAQ,SAAS6C,SACvB,GAAUC,kBAIV,OAFAA,mBAAoBzF,KAAKoB,WAAWgD,MAAMoB,QAAQtD,GAAGgC,WAAY,QAE1DhD,QAAQ+F,kBAAkBzB,QAASC,oBAU5CvE,QAAQ+F,kBAAoB,SAASzB,QAASC,mBAC5C,GAAI3D,eAEAoF,gBAAkB,SAASC,MAAO3D,SAChC,IAAK,GAAIvB,GAAI,EAAGA,EAAIuB,QAAQL,SAASC,OAAQnB,IAC3CuB,QAAQL,SAASlB,GAAGkF,MAAQA,MAC5B3D,QAAQL,SAASlB,GAAK,GAAIf,SAAQsE,QAAShC,QAAQL,SAASlB,IAC5DiF,gBAAgBC,MAAM,EAAG3D,QAAQL,SAASlB,IAKlD,OAAOwD,mBAAkB5F,KAAK,SAASgC,MACrC,MAAOX,SAAQH,SAAS,WAQtB,MANAjB,SAAQiC,QAAQF,KAAKoB,UAAW,SAASpB,KAAMuF,OAC7CvF,KAAKsF,MAAQ,CACb,IAAI3D,SAAU,GAAItC,SAAQsE,QAAS3D,KACnCqF,iBAAgB,EAAG1D,SACnB1B,WAAWoB,KAAKM,WAEX1B,gBAYbZ,QAAQsD,cAAgB,SAASF,UAAWC,aAC1C,GAAIT,QAUJ,OARIS,eACFT,KAAO7D,EAAEoH,IAAI9C,YAAY+C,MAAM,KAAM,SAASC,WAC5C,MAAO,SAAWA,UAAUC,qBAIhC1D,KAAKyB,OAAO,EAAG,EAAGjB,WAEXR,KAAK2D,KAAK,MASnBvG,QAAQiB,UAAUwD,KAAO,SAAS9D,MAEhC7B,KAAK0H,YAAa,EAClB1H,KAAK2H,aACL3H,KAAK4H,WACL9H,QAAQC,OAAOC,KAAM6B,MACjB7B,KAAK8D,OACP9D,KAAKkC,GAAKlC,KAAK6H,MACf7H,KAAK8H,KAAO,GAAI5G,SAAQgF,MAAM,QAAUlG,KAAKkC,KAE3ClC,KAAKuD,OACPvD,KAAK+H,YAAc/H,KAAKgI,cAEtBlI,QAAQmI,YAAYjI,KAAKkI,eAE3BlI,KAAKkI,YAAclI,KAAKmI,UAU5BjH,QAAQiB,UAAUiG,UAAY,WAC5B,MAAOpI,MAAK2H,UAAUvE,QASxBlC,QAAQiB,UAAUkG,eAAiB,SAASjB,OAC1C,GAAI/C,QAEJ,OAAI+C,QAAS,GAAKA,MAAQpH,KAAK2H,UAAUvE,SACvCiB,QAAUrE,KAAK2H,UAAUP,OAErBpH,KAAKsI,aAAajE,QAAQS,MACrBT,QAGJ,MASTnD,QAAQiB,UAAU0F,IAAM,WACtB,MAAO3G,SAAQsD,cAAcxE,KAAK0F,SAASxD,GAAIlC,KAAK8D,OAStD5C,QAAQiB,UAAUoG,eAAiB,WACjC,GAAIC,MAMJ,OAJAA,OAAQ,EACJxI,KAAK2H,YACPa,MAASvI,EAAEwI,OAAOzI,KAAK2H,UAAW,SAAStD,SAAW,MAAOA,SAAQqE,WAActF,QAE9EoF,OAiBTtH,QAAQiB,UAAUwG,QAAU,SAASC,kBAAmBC,SACtD,GAAIvG,OAAQtC,KAAMqC,UAOlB,OALKvC,SAAQgJ,UAAU9I,KAAK+I,eAC1B/I,KAAK+I,YAAc,GAErB/I,KAAK0H,YAAa,EAEXxG,QAAQiF,aAAaM,QAAQ5G,KAAK,WAEnCqB,QAAQsF,iBACVtF,QAAQH,SAASiI,OAAO9H,QAAQsF,iBAE9BoC,mBAEF9I,QAAQC,OAAOmB,QAAQkF,OAAQwC,mBAEjC9I,QAAQC,OAAOsC,SAAWuG,kBAAmB1H,QAAQkF,SACjDtG,QAAQgJ,UAAUD,WACpBxG,QAAQwG,QAAU5I,EAAEmF,OAAOyD,QAAS,SAASJ,QAC3C,MAAO3I,SAAQmI,YAAYQ,OAAOQ,cAA8C,IAA9BR,OAAOQ,YAAY7F,SAEvEnD,EAAEC,KAAKmC,QAAQwG,QAAS,SAASJ,QAC/B,GAAIS,cACAC,MAAQV,OAAOW,SAASD,MAAM,iBAC9BA,SACF9G,QAAQuG,kBAAkBO,MAAQ,KAClCV,OAAOW,SAAWD,MAAM,GACxBD,aAAepJ,QAAQuJ,KAAKZ,QAC5BS,aAAaE,SAAWD,MAAM,GAC9B9G,QAAQwG,QAAQ3F,KAAKgG,iBAM3B,IAAII,kBAAmBpI,QAAQiF,aAAaoD,SAASC,oBACrD,IAAIF,kBAAwC,YAApBA,iBAAgC,CACtD,GAAIG,GAAI3J,QAAQ4J,KAAKpH,MAAOpB,QAAQiB,UAAUwG,QAC9CzH,SAAQsF,gBAAkBtF,QAAQH,SAAS0I,EAAmC,IAAhCH,iBAAiBK,gBAGjE,GAAIlE,mBAAoBvE,QAAQE,WAAW6C,KAAK3B,MAAMJ,GAAI,OAAQG,QAClE,OAAOC,OAAMwD,QAAQL,sBAUzBvE,QAAQiB,UAAUmG,aAAe,SAASsB,WACxC,GACIC,UAGAC,KACAC,kBALAC,WAAahK,KAAK4H,QAAQgC,WAE1BK,IAAMjK,KAAK2H,UAAUvE,OACrB8G,QAAS,CAGb,IAAIpK,QAAQgJ,UAAU9I,KAAK4H,QAAQgC,aAAeI,WAAahK,KAAK2H,UAAUvE,SAExEtD,QAAQgJ,UAAU9I,KAAK2H,UAAUqC,YAAYG,WAE/CD,QAAS,GAIXL,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQ+E,QAAQc,UAAWkD,IAAM,IAC7DnK,QAAQgJ,UAAU9I,KAAK2H,UAAUkC,UAAUM,WAC3CrK,QAAQgJ,UAAU9I,KAAK2H,UAAUkC,UAAUS,UAAU,CAExD,IADAT,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQ+E,QAAQe,KAAMiD,KAClDH,QAAwBD,SAAbG,YAAsCC,IAAbD,WAAkBA,aACrDlK,QAAQgJ,UAAU9I,KAAK2H,UAAUqC,YAAYG,UAAYnK,KAAK2H,UAAUqC,YAAYM,QAEtFT,YAIAC,KAAK5G,KAAKlD,KAAK2H,UAAUqC,YAAYlF,KACrC9E,KAAK2H,UAAUqC,YAAYM,SAAU,EAIzCpJ,SAAQV,KAAKC,MAAM,gBAAkBqJ,KAAKrC,KAAK,MAC/CsC,kBAAoB7I,QAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,WAAY4H,KAAMA,OACvE9J,KAAKuK,eAAeR,mBAGxB,MAAOG,SASThJ,QAAQiB,UAAU6F,WAAa,WAC7B,MAAoB,UAAbhI,KAAKuD,MAUdrC,QAAQiB,UAAUqI,QAAU,WAC1B,GACIC,YAEAC,OACAvH,SACAlB,EALAK,MAAQtC,KAERuC,SAAWrB,QAAQJ,GAAG0B,OAK1B,OAAIxC,MAAKgE,MAAQhE,KAAKkI,YAAYlE,MAEhCzB,SAASM,UACFN,SAASO,UAIlB2H,WAAa,SAASC,OAAQvH,UAC5B,GAAIwH,eAAgB,KAChBnH,QAAUvD,EAAEyD,KAAKP,SAAU,SAASnB,GAClC,MAAOA,GAAE8B,MAAQxB,MAAMwB,MAY7B,OAVIN,SACFmH,cAAgBD,OAGhB5K,QAAQiC,QAAQoB,SAAU,SAASnB,IAC5B2I,eAAiB3I,EAAEmB,UAAYnB,EAAEmB,SAASC,OAAS,IACtDuH,cAAgBF,WAAWzI,EAAGA,EAAEmB,aAI/BwH,eAITD,OAASD,WAAW,KAAMzK,KAAK0F,SAASjD,YAEtCU,SADa,OAAXuH,OACS1K,KAAK0F,SAASjD,WAEdiI,OAAOvH,SAGpBlB,EAAIhC,EAAE8E,QAAQ9E,EAAE+E,MAAM7B,SAAU,MAAOnD,KAAKkC,IAE5ClC,KAAK4K,QAAQ/K,KAAK,SAASgC,MACzB,GAAIgJ,QACJ/K,SAAQC,OAAOuC,MAAOT,MACtBS,MAAMJ,GAAKI,MAAMuF,MAGjB1E,SAASoC,OAAOtD,EAAG,GACnB4I,QAAU5K,EAAEyD,KAAKP,SAAU,SAASnB,GAElC,MADAd,SAAQV,KAAKC,MAAMuB,EAAEgC,KAAO,MAAQ1B,MAAM0B,MACxB,UAAVhC,EAAEuB,MAAoBvB,EAAEgC,KAAK8G,cAAcxI,MAAM0B,MAAQ,IAGjE/B,EADE4I,QACE5K,EAAE8E,QAAQ9E,EAAE+E,MAAM7B,SAAU,MAAO0H,QAAQ3I,IAG3CiB,SAASC,OAEfD,SAASoC,OAAOtD,EAAG,EAAGK,OAEtBC,SAASM,WACR,SAAShB,MACVU,SAAS6C,OAAOvD,QAGXU,SAASO,UASlB5B,QAAQiB,UAAU4I,SAAW,WAC3B,MAAO7J,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,YAS1ChB,QAAQiB,UAAU6I,aAAe,SAASzH,MACxC,MAAOrC,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,QAAUqB,KAAO,WAS3DrC,QAAQiB,UAAU8I,YAAc,WAC9B,GAAI3I,OAAQtC,IAEZ,OAAOkB,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,cAAcrC,KAAK,WAEzDyC,MAAMqF,aACNrF,MAAMsF,WACNtF,MAAMyG,YAAc,EAGhBjJ,QAAQgJ,UAAUxG,MAAMa,WAAab,MAAMa,SAASC,QACtDd,MAAMoD,SAAStD,eAAeM,QAAQ,OAU5CxB,QAAQiB,UAAU+I,YAAc,WAC9B,MAAOhK,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,aAS1ChB,QAAQiB,UAAUgJ,cAAgB,SAASrB,KAAMsB,MAAOC,WACtD,GAAIxJ,OAAQyJ,QAASxB,KACTsB,MAAOA,MACPC,UAAWA,UAEvB,OAAOnK,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,mBAAoBL,OAS9DX,QAAQiB,UAAUoJ,QAAU,WAC1B,GAEIzI,SAFAR,MAAQtC,KACRuC,SAAWrB,QAAQJ,GAAG0B,OAW1B,OARAM,SAAU5B,QAAQE,WAAWoK,OAAOxL,KAAKkC,IAEzCY,QAAQjD,KAAK,WACXyC,MAAMoD,SAAStD,eAAeM,QAAQ,IACtCH,SAASM,SAAQ,IAChB,SAAShB,KAAMsD,QAChB5C,SAAS6C,OAAOvD,QAEXU,SAASO,SASlB5B,QAAQiB,UAAUsJ,gBAAkB,SAAS3B,MAC3C,MAAO5I,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,eAAgB4H,KAAMA,QAShE5I,QAAQiB,UAAUuJ,cAAgB,SAAS5B,KAAM6B,QAC/C,MAAOzK,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,gBAAiB4H,KAAMA,KAAM6B,OAAQA,UAS/EzK,QAAQiB,UAAUyJ,cAAgB,SAAS9B,KAAM6B,QAC/C,MAAOzK,SAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,gBAAiB4H,KAAMA,KAAM6B,OAAQA,UAQ/EzK,QAAQiB,UAAU0J,OAAS,WACzB,GAAIvJ,OAAQtC,IACZF,SAAQiC,QAAQ/B,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KAA+B,YAAPA,KAA+B,KAAVA,IAAI,UAC5CzJ,OAAMyJ,OAGjBjM,QAAQC,OAAOC,KAAMA,KAAKkI,aAC1BlI,KAAKkI,YAAclI,KAAKmI,SAS1BjH,QAAQiB,UAAUyI,MAAQ,WACxB,GAAItI,OAAQtC,IAEZ,OAAOkB,SAAQE,WAAW4K,KAAKhM,KAAKkC,GAAIlC,KAAKmI,SAAStI,KAAK,SAASgC,MAIlE,MAFAS,OAAM4F,YAAc5F,MAAM6F,QAC1BjH,QAAQV,KAAKC,MAAMC,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5CiB,MACN,SAASA,MACVX,QAAQV,KAAKyL,MAAMvL,KAAKC,UAAUkB,KAAMjB,OAAW,IAEnD0B,MAAMuJ,YAUV3K,QAAQiB,UAAU4B,YAAc,SAASD,KAAME,MAC7C,MAAOhE,MAAK0F,SAAS3B,YAAYD,KAAME,OASzC9C,QAAQiB,UAAUgG,MAAQ,WACxB,GAAI3E,WAQJ,OAPA1D,SAAQiC,QAAQ/B,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KACO,YAAPA,KACU,KAAVA,IAAI,KACNvI,QAAQuI,KAAOD,SAGZtI,SAUTtC,QAAQiB,UAAU2D,QAAU,SAASL,mBACnC,GAAInD,OAAQtC,KACRuC,SAAWrB,QAAQJ,GAAG0B,OAuD1B,OArDAxC,MAAKkM,mBAAqBzG,kBAC1BzF,KAAKkM,mBAAmBrM,KAAK,SAASgC,MACpCX,QAAQH,SAAS,WACf,GAAI+I,MAAMqC,OAEV7J,OAAMqD,KAAK9D,MAEPS,MAAMwH,OACR5I,QAAQV,KAAKC,MAAM,cAAgBoB,KAAKiI,KAAK1G,OAAS,aAGtD+I,QAAUlM,EAAEmM,OAAO9J,MAAM6J,QAAQ,GAAI,eACrC7J,MAAM6J,QAAQ5G,OAAO,EAAG,GAGpBjD,MAAM+J,WACRvC,KAAOxH,MAAMwH,KAAK,GAClBxH,MAAMwH,KAAKvE,OAAO,EAAG,IAIvBtF,EAAEqM,OAAOhK,MAAMwH,KAAM,SAASyC,KAAMC,IAAKvK,GACvC,GAAIJ,KAWJ,OATEA,MADES,MAAM+J,SACDpM,EAAEwM,OAAO3C,KAAM0C,MAEd1H,IAAK0H,IAAItI,YAGnB5B,MAAMsF,QAAQ/F,KAAKiD,KAAO7C,EAE1BsK,KAAKrJ,KAAK,GAAIhC,SAAQM,SAASc,MAAMoD,SAASxD,GAAII,MAAOT,OAElD0K,MACNjK,MAAMqF,WAGT1H,EAAEC,KAAKoC,MAAM6J,QAAS,SAAStK,MAC7B,GAAI2K,KAAMvM,EAAEwM,OAAON,QAAStK,MACxBI,EAAIK,MAAMsF,QAAQ4E,IAAI1H,IAAIZ,WAC9BjE,GAAEF,OAAOuC,MAAMqF,UAAU1F,GAAIuK,QAGjCtL,QAAQV,KAAKC,MAAM,WAAa6B,MAAMJ,GAAK,UAC3CI,MAAMoF,YAAa,EACnBnF,SAASM,QAAQP,MAAMqF,cAExB,SAAS9F,MACV/B,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMoK,SAAU,EAChBnK,SAAS6C,WAGJ7C,SAASO,SASlB5B,QAAQiB,UAAUoI,eAAiB,SAASR,mBAC1C,GAAIzH,OAAQtC,IAEZ+J,mBAAkBlK,KAAK,SAASgC,MAC9BX,QAAQH,SAAS,WACf,GAAIoL,SAASQ,CACT9K,MAAKuB,OAAS,IAEhB+I,QAAUlM,EAAEmM,OAAOvK,KAAK,GAAI,eAC5BA,KAAK0D,OAAO,EAAG,GACftF,EAAEC,KAAK2B,KAAM,SAAS+K,gBACpBA,eAAiB3M,EAAEwM,OAAON,QAASS,gBACnCD,EAAIrK,MAAMsF,QAAQgF,eAAe9H,IAAIZ,YACjCpE,QAAQgJ,UAAU6D,IACpB1M,EAAEF,OAAOuC,MAAMqF,UAAUgF,GAAIC,2BC5qB3C,WACE,YASA,SAASzL,SAAQmD,UAAWd,QAASqJ,mBACnC7M,KAAKsE,UAAYA,UACjBtE,KAAK8M,SAAWtJ,QAChBxD,KAAK+M,mBAAoB,EACzB/M,KAAKgN,oBAAqB,EAC1BhN,KAAKiN,yBAA0B,EAC/BjN,KAAK0E,UAAYwI,MAAQC,MAAQC,QAEK,kBAA3BP,mBAAkBhN,MAE3BC,QAAQC,OAAOC,KAAM6M,mBACrB7M,KAAKkC,GAAKlC,KAAKwE,gBACfxE,KAAKqN,wBAILrN,KAAK8F,QAAQ+G,mBAEf7M,KAAK0I,UAAW,EAGhB1I,KAAKsN,UAAY,EAQnBnM,QAAQN,UAAY,KAAM,WAAY,OAAQ,OAAQ,aAAc,WAAY,WAAY,cAAe,SAASC,GAAIC,SAAUP,KAAM+M,KAAMvM,SAAUwM,SAAUvM,SAAU+E,aAiB1K,MAhBAlG,SAAQC,OAAOoB,SACbL,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACN+M,KAAMA,KACNE,UAAWD,SACXpM,WAAY,GAAIH,UAASD,SAASM,WAAW,aAAe,OAAQN,SAASM,cAC7EgM,SAAU,IAGZtH,YAAYS,QAAQ5G,KAAK,WACnBmG,YAAYuD,SAASmE,uBACvBvM,QAAQwM,MAAQ3H,YAAYuD,SAASmE,wBAIlCvM,SAOT,KACErB,QAAQ2B,OAAO,iBAEjB,MAAMC,GACJ5B,QAAQ2B,OAAO,iBAAkB,gBAEnC3B,QAAQ2B,OAAO,iBACZE,QAAQ,UAAWR,QAAQN,UAS9BM,QAAQyM,WAAa,SAASC,OAC5B,GAAIC,IAAK,GAAIC,QAAOF,MAAO,IAC3B,OAAO5N,GAAEwI,OAAOxI,EAAE+N,KAAK7M,QAAQwM,OAAQ,SAASM,KAC9C,GAAInC,OAAQ3K,QAAQwM,MAAMM,IAC1B,OAA8B,IAAvBnC,MAAM,GAAGoC,OAAOJ,OAU3B3M,QAAQgB,UAAUqC,cAAgB,SAASnC,SACzC,GAAIyB,KAaJ,OAXAA,MAAO7D,EAAEoH,IAAIrH,KAAK8M,SAAShJ,KAAKwD,MAAM,KAAM,SAASC,WACnD,MAAO,SAAWA,UAAUC,oBAE9B1D,KAAKyB,OAAO,EAAG,EAAGvF,KAAKsE,WACnBjC,SAAWA,QAAQoC,SAAWzE,KAAKmO,QACrCrK,KAAKZ,KAAKlD,KAAKmO,SAGfrK,KAAKZ,KAAKlD,KAAK8E,KAGVhB,KAAK2D,KAAK,MASnBtG,QAAQgB,UAAUiM,QAAU,SAAStJ,KACnC,GAAIuJ,QAASrO,KAAK8E,KAAO,EAErBuJ,SAAUvJ,MACZ9E,KAAK8E,IAAMA,IACX9E,KAAKkC,GAAKlC,KAAKwE,gBACX6J,OAAS,IAAMrO,KAAK8M,SAASlF,QAAQyG,UACvCrO,KAAK8M,SAASlF,QAAQ9C,KAAO9E,KAAK8M,SAASlF,QAAQyG,QACnDrO,KAAK8M,SAASlF,QAAQyG,QAAU,QAWtClN,QAAQgB,UAAUkL,qBAAuB,WACvC,GAAI/K,OAAQtC,KACRG,WAAaF,EAAE+E,MAAM1C,MAAMwK,SAASpH,SAASvF,WAAY,QAG7DF,GAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASqD,MACvDtD,EAAEC,KAAKoC,MAAMiB,MAAO,SAAS1B,KAAMI,GAC7BJ,KAAKmC,MAAQnC,KAAKmC,MAAQnC,KAAKtB,OACjCsB,KAAKvB,KAAOuB,KAAKmC,KAAO,KAAOnC,KAAKtB,MAAQ,IAGxCsB,KAAKmC,KAAKsD,MAAM,KAAKlE,SACvBvB,KAAKyM,UAAYzM,KAAKmC,KAAKsD,MAAM,KAAK,GAAGiH,QAAQ,IAAK,OAGxD1M,KAAKvB,KAAO,IAAMuB,KAAKtB,MAAQ,IAC/BsB,KAAKyM,UAAYzM,KAAKtB,MAAM+G,MAAM,KAAK,IAIzCzF,KAAK2M,MAAQrN,QAAQsM,UAAU5L,KAAKtB,MAAO,IAIvCN,EAAE8E,QAAQ5E,WAAY0B,KAAKtB,QAAU,IACvCsB,KAAKyM,UAAYjJ,EAAE,YAW3BlE,QAAQgB,UAAUsM,iBAAmB,WACnC,GAAInM,OAAQtC,KACR0O,SASJ,OANAzO,GAAEC,MAAM,KAAM,KAAM,OAAQ,SAASqD,MACnCtD,EAAEC,KAAKoC,MAAMiB,MAAO,SAAS1B,KAAMI,GACjCyM,OAAOxL,KAAKrB,KAAKyM,eAIdI,OAAOjH,KAAK,OASrBtG,QAAQgB,UAAUwM,cAAgB,SAASpL,MACzC,GAAIqL,SAAU,EAKd,OAJI5O,MAAKuD,OAASvD,KAAKuD,MAAMH,OAAS,IACpCwL,QAAU5O,KAAKuD,MAAM,GAAGS,MAAQhE,KAAKuD,MAAM,GAAGhD,OAAS,IAGlDqO,SAQTzN,QAAQgB,UAAU0M,kBAAoB,WACpC7O,KAAKgN,oBAAqB,GAQ5B7L,QAAQgB,UAAU2M,uBAAyB,WACzC9O,KAAKiN,yBAA0B,GASjC9L,QAAQgB,UAAU4M,SAAW,WAC3B,GAAIzM,OAAQtC,KACRgP,SACAhM,OAAS,SAASiM,MAChBA,KAAKC,SAAW,uBACC,gCAAbD,KAAK1L,KACPP,OAAO/C,EAAEyD,KAAKuL,KAAKE,QAAS,SAASC,eACnC,MAAOH,MAAKI,eAAiBD,cAAcE,eAItCxP,QAAQyP,QAAQN,KAAKE,SAC5BlP,EAAEC,KAAK+O,KAAKE,QAAS,SAASK,WAC5BxM,OAAOwM,cAIL1P,QAAQmI,YAAYgH,KAAKQ,eAE3BR,KAAKQ,YAAcR,KAAKE,QACxB7M,MAAMyK,kBAAqBkC,KAAKQ,YAAY1K,QAAQ,YAAc,IAEnD,yBAAbkK,KAAK1L,MACP0L,KAAKS,MAAO,EACRpN,MAAM0K,oBACJlN,QAAQmI,YAAYgH,KAAKU,iBAC3BV,KAAKU,cAAgBC,SAASC,cAAc,OAC5CZ,KAAKU,cAAcG,UAAYb,KAAKQ,YACpC3P,QAAQiC,SAAS,MAAO,OAAQ,UAAW,aAAc,SAAU,SAASgO,QAC1E,GACIC,SACAlE,MACA7J,EAHAgO,SAAWhB,KAAKU,cAAcO,iBAAiB,WAAaH,OAAS,IAIzE,KAAK9N,EAAI,EAAGA,EAAIgO,SAAS7M,OAAQnB,IAC/B+N,QAAUlQ,QAAQkQ,QAAQC,SAAShO,IACnC6J,MAAQkE,QAAQG,KAAK,UAAYJ,QACjCC,QAAQG,KAAKJ,OAAQjE,OACrBkE,QAAQI,WAAW,UAAYL,WAIrCd,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKU,cAAcG,YAG/Db,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aAEnDT,MAAM9L,KAAK+L,OAES,yBAAbA,KAAK1L,MACQ,0BAAb0L,KAAK1L,MACQ,yBAAb0L,KAAK1L,MAGR0L,KAAKqB,cACPrQ,EAAEC,KAAK+O,KAAKqB,aAAc,SAASC,aACjCA,YAAY/B,MAAQrN,QAAQsM,UAAU8C,YAAYhQ,MAAO,MAI5C,0BAAb0O,KAAK1L,OACP0L,KAAKC,SAAW,wBAGlBD,KAAKuB,SAAU,EACfxB,MAAM9L,KAAK+L,QAGXA,KAAKS,MAAO,EACZT,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aACjDT,MAAM9L,KAAK+L,QAMrB,OAFAjM,QAAOhD,KAAKgP,OAELA,OAUT7N,QAAQgB,UAAUsO,iBAAmB,WACnC,GAAInO,OAAQtC,IAEZ,OAAOmB,SAAQC,WAAWgD,MAAMpE,KAAKkC,GAAI,QAAQrC,KAAK,SAASgC,MAE7D,MADA/B,SAAQC,OAAOuC,MAAOT,MACfV,QAAQC,WAAWgD,MAAM9B,MAAMkC,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAASgC,MAG1F,MAFAV,SAAQX,KAAKC,MAAM,cAAgBC,KAAKC,UAAUkB,KAAMjB,OAAW,IACnEd,QAAQC,OAAOuC,MAAMoC,SAAU7C,MACxBA,KAAK6O,UAYlBvP,QAAQgB,UAAUwO,OAAS,SAAS1C,KAClC,MAAOjO,MAAK4Q,gBAAgB,MAAO3C,MAUrC9M,QAAQgB,UAAU0O,UAAY,SAAS5C,KACrC,MAAOjO,MAAK4Q,gBAAgB,SAAU3C,MAWxC9M,QAAQgB,UAAUyO,gBAAkB,SAASvF,UAAW4C,KACtD,GAAIpM,OACFwJ,UAAWA,UACXC,SAAUtL,KAAK8E,KACfsG,MAAO6C,IAGT,OAAIA,KACK9M,QAAQC,WAAW6C,KAAKjE,KAAK8M,SAASjF,MAAO,mBAAoBhG,MAD1E,QAYFV,QAAQgB,UAAU2O,YAAc,SAAShN,KAAMiN,OAAQlP,MACrD,GAAIS,OAAQtC,IACZmB,SAAQC,WAAW6C,MAAMjE,KAAKkC,GAAI4B,MAAM2D,KAAK,KAAMsJ,OAAQlP,MAAMhC,KAAK,SAASgC,MAC7EV,QAAQJ,SAAS,WACfuB,MAAM0O,WACL,iBAWP7P,QAAQgB,UAAU8O,SAAW,WAE3B,MADAjR,MAAKkR,iBAAmB,EACjB/P,QAAQC,WAAW6C,KAAKjE,KAAKkC,GAAI,YAS1Cf,QAAQgB,UAAUgP,kBAAoB,SAASC,UAC7C,GAAIL,QAAS,6BAA+BK,SACxC9O,MAAQtC,IACZmB,SAAQC,WAAW6C,KAAKjE,KAAKwE,eAAeC,SAAS,IAAQsM,QAAQlR,KAAK,SAASgC,MACjFV,QAAQJ,SAAS,WACfuB,MAAMoC,SAAS2M,gBAAkBpR,EAAEwI,OAAOnG,MAAMoC,SAAS2M,gBAAiB,SAASC,YACjF,MAAOA,YAAWF,UAAYA,YAE/B,iBAYPjQ,QAAQgB,UAAUoP,WAAa,WAC7B,GAAIjP,OAAQtC,KACR+Q,OAAS,oBAKb,OAHI/Q,MAAKwR,YACPT,OAAS,wBAEJ5P,QAAQC,WAAW6C,KAAKjE,KAAKkC,GAAI6O,QAAQlR,KAAK,SAASgC,MAC5DV,QAAQJ,SAAS,WACfuB,MAAMkP,WAAalP,MAAMkP,eAW/BrQ,QAAQgB,UAAU6O,QAAU,WAC1B,GAAInE,kBAIJ,OAFAA,mBAAoB1L,QAAQC,WAAWgD,MAAMpE,KAAKkC,GAAI,QAE/ClC,KAAK8F,QAAQ+G,oBAStB1L,QAAQgB,UAAUsP,OAAS,WACzB,MAAOzR,MAAK0R,UAAU,UASxBvQ,QAAQgB,UAAUwP,UAAY,WAC5B,MAAO3R,MAAK0R,UAAU,aASxBvQ,QAAQgB,UAAUyP,SAAW,WAC3B,MAAO5R,MAAK0R,UAAU,YAgBxBvQ,QAAQgB,UAAUuP,UAAY,SAASX,QACrC,GAAIzO,OAAQtC,IAGZ,OAAOmB,SAAQC,WAAWgD,MAAMpE,KAAKkC,GAAI6O,QAAQlR,KAAK,SAASgC,MAC7D,GAAI2B,SAASa,OAKb,OAJAlD,SAAQX,KAAKC,MAAM,OAASsQ,OAAS,KAAOrQ,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5E4C,QAAUlB,MAAMwK,SAASpH,SAAS7B,kBAAkBhC,KAAK0C,aACzDF,QAAU,GAAIlD,SAAQU,KAAKyC,UAAWd,QAAS3B,MAExCV,QAAQC,WAAWgD,MAAMC,QAAQG,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAASgC,MAG5F,MAFAV,SAAQX,KAAKC,MAAM,OAASsQ,OAAS,KAAOrQ,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5Ed,QAAQC,OAAOsE,QAAQK,SAAU7C,MAC1BwC,aAWblD,QAAQgB,UAAUyI,MAAQ,WACxB,GAAItI,OAAQtC,KACR6B,KAAO7B,KAAK0E,QAIhB,OAFAvD,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUkB,KAAMjB,OAAW,IAExDO,QAAQC,WAAW4K,KAAKhM,KAAKwE,eAAeC,SAAS,IAAQ5C,MAAMhC,KAAK,SAASgS,UACtF1Q,QAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUkR,SAAUjR,OAAW,IACnE0B,MAAM8L,QAAQyD,SAAS/M,KACvBxC,MAAM0O,aAUV7P,QAAQgB,UAAU2P,MAAQ,WACxB,GAAIjQ,MAAO/B,QAAQuJ,KAAKrJ,KAAK0E,UACzBnC,SAAWpB,QAAQL,GAAG0B,OAa1B,OAXArB,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUkB,KAAMjB,OAAW,IAE/DO,QAAQC,WAAW6C,KAAKjE,KAAKwE,eAAeC,SAAS,IAAQ,OAAQ5C,MAAMhC,KAAK,SAASgC,MACpE,WAAfA,KAAKsD,OACP5C,SAASM,QAAQhB,MAGjBU,SAAS6C,OAAOvD,QAIbU,SAASO,SASlB3B,QAAQgB,UAAU2D,QAAU,SAAS+G,mBACnC,GAAIvK,OAAQtC,KACRuC,SAAWpB,QAAQL,GAAG0B,OA8B1B,OA3BAxC,MAAK+R,mBAAqBlF,kBAG1B7M,KAAK+R,mBAAmBlS,KAAK,SAASgC,MAEpCV,QAAQJ,SAAS,WACfjB,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMJ,GAAKI,MAAMkC,gBACjBlC,MAAM+K,uBACN/K,MAAM0K,oBAAqB,EAC3BzK,SAASM,QAAQP,SAEdA,MAAM0P,QACT7Q,QAAQC,WAAWgD,MAAM9B,MAAMJ,GAAI,mBAAmBrC,KAAK,WACzDsB,QAAQJ,SAAS,WACfuB,MAAM0P,QAAS,EACf1P,MAAMwK,SAAS/D,mBAIpB,SAASlH,MACV/B,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMoK,SAAU,EAChBvL,QAAQX,KAAKyL,MAAM3J,MAAM2J,OACzB1J,SAAS6C,WAGJ7C,SAASO,SASlB3B,QAAQgB,UAAUgG,MAAQ,WACxB,GAAI9D,WAcJ,OAbAvE,SAAQiC,QAAQ/B,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,KAC9B1H,QAAQ0H,KAAOD,SAKnB7L,EAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASqD,MACnDc,QAAQd,QACVc,QAAQd,MAAQtD,EAAEmM,OAAO/H,QAAQd,MAAM+D,MAAM,KAAM,WAIhDjD","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Account\n * @constructor\n * @param {object} futureAccountData\n */\n function Account(futureAccountData) {\n // Data is immediately available\n if (typeof futureAccountData.then !== 'function') {\n angular.extend(this, futureAccountData);\n _.each(this.identities, function(identity) {\n if (identity.fullName)\n identity.full = identity.fullName + ' <' + identity.email + '>';\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\n return Account.$$resource.post(path.toString(), 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n });\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 (compose): ' + 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 (edit): ' + 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 getLength\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the number of items in the mailbox\n */\n Mailbox.prototype.getLength = function() {\n return this.$messages.length;\n };\n\n /**\n * @function getItemAtIndex\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the message as the specified index\n */\n Mailbox.prototype.getItemAtIndex = function(index) {\n var message;\n\n if (index >= 0 && index < this.$messages.length) {\n message = this.$messages[index];\n \n if (this.$loadMessage(message.uid))\n return message;\n }\n\n return null;\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 var _this = this;\n\n return Mailbox.$$resource.post(this.id, 'emptyTrash').then(function() {\n // Remove all messages from the mailbox\n _this.$messages = [];\n _this.uidsMap = {};\n _this.unseenCount = 0;\n\n // If we had any submailboxes, lets do a refresh of the mailboxes list\n if (angular.isDefined(_this.children) && _this.children.length)\n _this.$account.$getMailboxes({reload: true});\n });\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 $flagMessages\n * @memberof Mailbox.prototype\n * @desc Add or remove a flag on a message set\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$flagMessages = function(uids, flags, operation) {\n var data = {msgUIDs: uids,\n flags: flags,\n operation: operation};\n\n return Mailbox.$$resource.post(this.id, 'addOrRemoveLabel', data);\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.$showDetailedRecipients = 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 //console.log(\"new message instance! \" + this.$tapette);\n this.$tapette += 1;\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 $tapette: 0\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 * This function also generates a gravatar for each email address, and a short name\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n var identities = _.pluck(_this.$mailbox.$account.identities, 'email');\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\n // If we have \"Alice Foo\" as name, we grab \"Alice\"\n if (data.name.split(' ').length)\n data.shortname = data.name.split(' ')[0].replace('\\'','');\n }\n else {\n data.full = '<' + data.email + '>';\n data.shortname = data.email.split('@')[0];\n }\n\n // Generate the gravatar\n data.image = Message.$gravatar(data.email, 32);\n\n // If the current user is the recepient, overwrite\n // the short name with 'me'\n if (_.indexOf(identities, data.email) >= 0)\n data.shortname = l('me');\n });\n });\n };\n\n /**\n * @function $shortRecipients\n * @memberof Message.prototype\n * @desc Format all recipients into a very compact string\n * @returns a compacted string of all recipients\n */\n Message.prototype.$shortRecipients = function() {\n var _this = this;\n var result = [];\n\n // Build long representation of email addresses\n _.each(['to', 'cc', 'bcc'], function(type) {\n _.each(_this[type], function(data, i) {\n result.push(data.shortname);\n });\n });\n\n return result.join(', ');\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 showDetailedRecipients\n * @memberof Message.prototype\n * @desc Mark the message to show all to/cc recipients.\n */\n Message.prototype.showDetailedRecipients = function() {\n this.$showDetailedRecipients = 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 part.msgclass = 'msg-attachment-other';\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 if (part.type == 'UIxMailPartImageViewer')\n part.msgclass = 'msg-attachment-image';\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 +{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js"],"names":["Account","futureAccountData","then","angular","extend","this","_","each","identities","identity","fullName","full","email","$log","debug","JSON","stringify","undefined","$factory","$q","$timeout","Settings","Resource","Mailbox","Message","$$resource","activeUser","$Mailbox","$Message","module","e","factory","$findAll","data","$unwrapCollection","fetch","o","collection","forEach","i","id","prototype","$getMailboxes","options","_this","deferred","defer","$mailboxes","reload","$find","$flattenMailboxes","resolve","promise","allMailboxes","_visit","mailboxes","push","children","length","$$flattenMailboxes","$getMailboxByType","type","mailbox","_find","find","console","specialMailboxes","$getMailboxByPath","path","$newMailbox","name","post","toString","$newMessage","message","accountId","mailboxPath","$absolutePath","asDraft","editable","$addDelegate","user","param","uid","indexOf","pluck","delegates","users","status","reject","l","$removeDelegate","splice","account","futureMailboxData","$account","init","newMailboxData","create","$unwrap","Acl","Preferences","PRELOAD","$$Acl","$Preferences","$query","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Mail","SortingState","parseInt","constant","LOOKAHEAD","SIZE","createMailboxes","level","index","map","split","component","asCSSIdentifier","join","$isLoading","$messages","uidsMap","$id","$acl","$isEditable","isEditable","isUndefined","$shadowData","$omit","getLength","getItemAtIndex","$loadMessage","$selectedCount","count","filter","selected","$filter","sortingAttributes","filters","isDefined","unseenCount","cancel","searchInput","secondFilter","match","searchBy","copy","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","timeInterval","messageId","endIndex","uids","futureHeadersData","startIndex","max","loaded","subject","Math","min","loading","$unwrapHeaders","$rename","findParent","parent","parentMailbox","$save","sibling","localeCompare","$compact","$setFolderAs","$emptyTrash","$markAsRead","$flagMessages","flags","operation","msgUIDs","$delete","remove","$deleteMessages","$copyMessages","folder","$moveMessages","$reset","value","key","save","error","$futureMailboxData","headers","invoke","threaded","reduce","msgs","msg","object","isError","j","messageHeaders","futureMessageData","lazy","$mailbox","$hasUnsafeContent","$loadUnsafeContent","$showDetailedRecipients","to","cc","bcc","$formatFullAddresses","$sce","Gravatar","$gravatar","SOGoMailLabelsColors","$tags","filterTags","query","re","RegExp","keys","tag","search","draftId","$setUID","oldUID","shortname","replace","image","$shortRecipients","result","$shortAddress","address","loadUnsafeContent","showDetailedRecipients","$content","parts","part","msgclass","content","alternatePart","preferredPart","contentType","isArray","mixedPart","safeContent","html","unsafeContent","document","createElement","innerHTML","suffix","element","elements","querySelectorAll","attr","removeAttr","trustAs","participants","participant","compile","$editableContent","text","addTag","$addOrRemoveTag","removeTag","$imipAction","action","$reload","$sendMDN","shouldAskReceipt","$deleteAttachment","filename","attachmentAttrs","attachment","toggleFlag","isflagged","$reply","$newDraft","$replyAll","$forward","response","$send","$futureMessageData","isread","MailboxController","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","encodeUriFilter","focus","Dialog","selectMessage","go","mailboxId","unselectMessages","vm","confirmDeleteSelectedMessages","confirm","selectedMessages","selectedUIDs","difference","alert","copySelectedMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","selectAll","markSelectedMessagesAsFlagged","d","markSelectedMessagesAsUnread","field","sortedBy","cancelSearch","mode","newMessage","$event","messageDialog","show","body","targetEvent","clickOutsideToClose","escapeToClose","templateUrl","controller","controllerAs","locals","accounts","stateMessage","stateRecipients","service","$inject","MailboxesController","User","newFolder","parentFolder","prompt","delegate","MailboxDelegationController","$scope","userFilter","closeModal","hide","removeUser","addUser","userToAdd","searchText","editFolder","editMode","revertEditing","selectFolder","saveFolder","compactFolder","emptyTrashFolder","exportMails","confirmDelete","markFolderRead","share","$users","usersWithACL","metadataForFolder","icon","setFolderAs","refreshUnseenCount","unseenCountFolders","includes","current","MessageController","doDelete","findIndex","showMailEditor","recipients","close","selectedMessage","reply","replyAll","forward","edit","recipient","saveMessage","viewRawSource","MessageRawSourceDialogController","scope","template","tags","$watchCollection","oldTags","newTags","MessageEditorController","$stateParams","FileUploader","AddressBook","autosave","send","contactFilter","$filterAll","addRecipient","isString","$$fullname","$$email","autosaveDrafts","SOGoMailAutoSave","autocomplete","hideCc","hideBcc","flatten","uploader","url","autoUpload","alias","onProgressItem","item","progress","onSuccessItem","onCancelItem","file","removeFromQueue","onErrorItem","actionName","msgObject","union","localeCode","LocaleCode"],"mappings":"CAEA,WACE,YAOA,SAASA,SAAQC,mBAEuB,kBAA3BA,mBAAkBC,OAC3BC,QAAQC,OAAOC,KAAMJ,mBACrBK,EAAEC,KAAKF,KAAKG,WAAY,SAASC,UAC3BA,SAASC,SACXD,SAASE,KAAOF,SAASC,SAAW,KAAOD,SAASG,MAAQ,IAE5DH,SAASE,KAAO,IAAMF,SAASG,MAAQ,MAE3CZ,QAAQa,KAAKC,MAAM,YAAcC,KAAKC,UAAUf,kBAAmBgB,OAAW,KAalFjB,QAAQkB,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,UAAW,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUC,QAASC,SAUtJ,MATArB,SAAQC,OAAOJ,SACbmB,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,cAC7EC,SAAUJ,QACVK,SAAUJ,UAGLxB,SAOT,KACEG,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZE,QAAQ,UAAW/B,QAAQkB,UAQ9BlB,QAAQgC,SAAW,SAASC,MAC1B,MAAKA,MAKEjC,QAAQkC,kBAAkBD,MAJxBjC,QAAQyB,WAAWU,MAAM,GAAI,gBAAgBjC,KAAK,SAASkC,GAChE,MAAOpC,SAAQkC,kBAAkBE,MAYvCpC,QAAQkC,kBAAoB,SAASD,MACnC,GAAII,cAMJ,OAJAlC,SAAQmC,QAAQL,KAAM,SAASG,EAAGG,GAChCH,EAAEI,GAAKD,EACPF,WAAWE,GAAK,GAAIvC,SAAQoC,KAEvBC,YAUTrC,QAAQyC,UAAUC,cAAgB,SAASC,SACzC,GAAIC,OAAQvC,KACRwC,SAAW7C,QAAQmB,GAAG2B,OAa1B,QAXIzC,KAAK0C,YAAgBJ,SAAWA,QAAQK,OAI1ChD,QAAQ2B,SAASsB,MAAM5C,MAAMH,KAAK,SAAS+B,MACzCW,MAAMG,WAAad,KACnBW,MAAMM,mBAAmBF,QAAQ,IACjCH,SAASM,QAAQP,MAAMG,cANzBF,SAASM,QAAQ9C,KAAK0C,YAUjBF,SAASO,SAUlBpD,QAAQyC,UAAUS,kBAAoB,SAASP,SAC7C,GAAIC,OAAQvC,KACRgD,gBACAC,OAAS,SAASC,WAChBjD,EAAEC,KAAKgD,UAAW,SAASnB,GACzBiB,aAAaG,KAAKpB,GACdA,EAAEqB,UAAYrB,EAAEqB,SAASC,OAAS,GACpCJ,OAAOlB,EAAEqB,YAanB,QARIpD,KAAKsD,oBAAwBhB,SAAWA,QAAQK,QAIlDM,OAAOjD,KAAK0C,YACZH,MAAMe,mBAAqBN,cAJ3BA,aAAehD,KAAKsD,mBAOfN,cAGTrD,QAAQyC,UAAUmB,kBAAoB,SAASC,MAC7C,GAAIC,SAEAC,MAAQ,SAASR,WACf,GAAIO,SAAUxD,EAAE0D,KAAKT,UAAW,SAASnB,GACvC,MAAOA,GAAEyB,MAAQA,MASnB,OAPKC,UACH3D,QAAQmC,QAAQiB,UAAW,SAASnB,IAC7B0B,SAAW1B,EAAEqB,UAAYrB,EAAEqB,SAASC,OAAS,IAChDI,QAAUC,MAAM3B,EAAEqB,aAIjBK,QAEbA,SAAUC,MAAM1D,KAAK0C,YAErBkB,QAAQnD,MAAMgD,SACdG,QAAQnD,MAAMT,KAAK6D,mBASrBlE,QAAQyC,UAAU0B,kBAAoB,SAASC,MAC7C,GAAIN,SAAU,KAEVC,MAAQ,SAASR,WACf,GAAIO,SAAUxD,EAAE0D,KAAKT,UAAW,SAASnB,GACvC,MAAOA,GAAEgC,MAAQA,MASnB,OAPKN,UACH3D,QAAQmC,QAAQiB,UAAW,SAASnB,IAC7B0B,SAAW1B,EAAEqB,UAAYrB,EAAEqB,SAASC,OAAS,IAChDI,QAAUC,MAAM3B,EAAEqB,aAIjBK,QAIb,OAFAA,SAAUC,MAAM1D,KAAK0C,aAWvB/C,QAAQyC,UAAU4B,YAAc,SAASD,KAAME,MAC7C,GAAI1B,OAAQvC,IAEZ,OAAOL,SAAQyB,WAAW8C,KAAKH,KAAKI,WAAY,gBAAiBF,KAAMA,OAAOpE,KAAK,WACjF0C,MAAMF,eAAeM,QAAQ,OAUjChD,QAAQyC,UAAUgC,YAAc,WAC9B,GAAI7B,OAAQvC,IAGZ,OAAOL,SAAQyB,WAAWU,MAAM9B,KAAKmC,GAAGgC,WAAY,WAAWtE,KAAK,SAAS+B,MAC3EjC,QAAQa,KAAKC,MAAM,0BAA4BC,KAAKC,UAAUiB,KAAMhB,OAAW,GAC/E,IAAIyD,SAAU,GAAI1E,SAAQ4B,SAASK,KAAK0C,UAAW/B,MAAMuB,kBAAkBlC,KAAK2C,aAAc3C,KAC9F,OAAOyC,WACNxE,KAAK,SAASwE,SAEf,MAAO1E,SAAQyB,WAAWU,MAAMuC,QAAQG,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAAS+B,MAG5F,MAFAjC,SAAQa,KAAKC,MAAM,uBAAyBC,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5Ed,QAAQC,OAAOsE,QAAQK,SAAU9C,MAC1ByC,aAYb1E,QAAQyC,UAAUuC,aAAe,SAASC,MACxC,GAAIrC,OAAQvC,KACRwC,SAAW7C,QAAQmB,GAAG2B,QACtBoC,OAASC,IAAKF,KAAKE,IAavB,QAZKF,KAAKE,KAAO7E,EAAE8E,QAAQ9E,EAAE+E,MAAMhF,KAAKiF,UAAW,OAAQL,KAAKE,KAAO,GAErEtC,SAASM,UAGTnD,QAAQyB,WAAWU,MAAM9B,KAAKmC,GAAGgC,WAAY,cAAeU,OAAOhF,KAAK,WACtE0C,MAAM0C,UAAU9B,KAAKyB,MACrBpC,SAASM,QAAQP,MAAM2C,QACtB,SAAStD,KAAMuD,QAChB3C,SAAS4C,OAAOC,EAAE,yCAGf7C,SAASO,SAUlBpD,QAAQyC,UAAUkD,gBAAkB,SAASR,KAC3C,GAAIvC,OAAQvC,KACR6E,OAASC,IAAKA,IAClB,OAAOnF,SAAQyB,WAAWU,MAAM9B,KAAKmC,GAAGgC,WAAY,iBAAkBU,OAAOhF,KAAK,WAChF,GAAIqC,GAAIjC,EAAE8E,QAAQ9E,EAAE+E,MAAMzC,MAAM0C,UAAW,OAAQH,IAC/C5C,IAAK,GACPK,MAAM0C,UAAUM,OAAOrD,EAAG,SC7QlC,WACE,YAOA,SAAShB,SAAQsE,QAASC,mBAGxB,GAFAzF,KAAK0F,SAAWF,QAEsB,kBAA3BC,mBAAkB5F,MAE3B,GADAG,KAAK2F,KAAKF,mBACNzF,KAAKiE,OAASjE,KAAK+D,KAAM,CAE3B,GAAI6B,gBAAiB1E,QAAQE,WAAWyE,OAAO,eAAgB7F,KAAKiE,KACpEjE,MAAK8F,QAAQF,qBAMf5F,MAAK8F,QAAQL,mBASjBvE,QAAQL,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,MAAO,cAAe,oBAAqB,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUE,QAAS4E,IAAKC,YAAaC,SAsBxM,MArBAnG,SAAQC,OAAOmB,SACbJ,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,cAC7EE,SAAUJ,QACV+E,MAAOH,IACPI,aAAcH,YACdI,QAAUC,KAAM,OAAQC,IAAK,GAC7BC,eAAgB,KAChBC,gBAAiB,KACjBP,QAASA,UAGXD,YAAYS,QAAQ5G,KAAK,WACnBmG,YAAYU,SAASC,KAAKC,eAC5B1F,QAAQkF,OAAOC,KAAOL,YAAYU,SAASC,KAAKC,aAAa,GAC7D1F,QAAQkF,OAAOE,IAAMO,SAASb,YAAYU,SAASC,KAAKC,aAAa,OAIlE1F,SAOT,KACEpB,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZsF,SAAS,qBACRC,UAAW,GACXC,KAAM,MAEPtF,QAAQ,UAAWR,QAAQL,UAS9BK,QAAQ0B,MAAQ,SAAS4C,SACvB,GAAUC,kBAIV,OAFAA,mBAAoBzF,KAAKoB,WAAWU,MAAM0D,QAAQrD,GAAGgC,WAAY,QAE1DjD,QAAQW,kBAAkB2D,QAASC,oBAU5CvE,QAAQW,kBAAoB,SAAS2D,QAASC,mBAC5C,GAAIzD,eAEAiF,gBAAkB,SAASC,MAAOzD,SAChC,IAAK,GAAIvB,GAAI,EAAGA,EAAIuB,QAAQL,SAASC,OAAQnB,IAC3CuB,QAAQL,SAASlB,GAAGgF,MAAQA,MAC5BzD,QAAQL,SAASlB,GAAK,GAAIhB,SAAQsE,QAAS/B,QAAQL,SAASlB,IAC5D+E,gBAAgBC,MAAM,EAAGzD,QAAQL,SAASlB,IAKlD,OAAOuD,mBAAkB5F,KAAK,SAAS+B,MACrC,MAAOV,SAAQH,SAAS,WAQtB,MANAjB,SAAQmC,QAAQL,KAAKsB,UAAW,SAAStB,KAAMuF,OAC7CvF,KAAKsF,MAAQ,CACb,IAAIzD,SAAU,GAAIvC,SAAQsE,QAAS5D,KACnCqF,iBAAgB,EAAGxD,SACnBzB,WAAWmB,KAAKM,WAEXzB,gBAYbd,QAAQsD,cAAgB,SAASF,UAAWC,aAC1C,GAAIR,QAUJ,OARIQ,eACFR,KAAO9D,EAAEmH,IAAI7C,YAAY8C,MAAM,KAAM,SAASC,WAC5C,MAAO,SAAWA,UAAUC,qBAIhCxD,KAAKwB,OAAO,EAAG,EAAGjB,WAEXP,KAAKyD,KAAK,MASnBtG,QAAQkB,UAAUuD,KAAO,SAAS/D,MAEhC5B,KAAKyH,YAAa,EAClBzH,KAAK0H,aACL1H,KAAK2H,WACL7H,QAAQC,OAAOC,KAAM4B,MACjB5B,KAAK+D,OACP/D,KAAKmC,GAAKnC,KAAK4H,MACf5H,KAAK6H,KAAO,GAAI3G,SAAQgF,MAAM,QAAUlG,KAAKmC,KAE3CnC,KAAKwD,OACPxD,KAAK8H,YAAc9H,KAAK+H,cAEtBjI,QAAQkI,YAAYhI,KAAKiI,eAE3BjI,KAAKiI,YAAcjI,KAAKkI,UAU5BhH,QAAQkB,UAAU+F,UAAY,WAC5B,MAAOnI,MAAK0H,UAAUrE,QASxBnC,QAAQkB,UAAUgG,eAAiB,SAASjB,OAC1C,GAAI9C,QAEJ,OAAI8C,QAAS,GAAKA,MAAQnH,KAAK0H,UAAUrE,SACvCgB,QAAUrE,KAAK0H,UAAUP,OAErBnH,KAAKqI,aAAahE,QAAQS,MACrBT,QAGJ,MASTnD,QAAQkB,UAAUwF,IAAM,WACtB,MAAO1G,SAAQsD,cAAcxE,KAAK0F,SAASvD,GAAInC,KAAK+D,OAStD7C,QAAQkB,UAAUkG,eAAiB,WACjC,GAAIC,MAMJ,OAJAA,OAAQ,EACJvI,KAAK0H,YACPa,MAAStI,EAAEuI,OAAOxI,KAAK0H,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAAcpF,QAE9EkF,OAiBTrH,QAAQkB,UAAUsG,QAAU,SAASC,kBAAmBC,SACtD,GAAIrG,OAAQvC,KAAMsC,UAOlB,OALKxC,SAAQ+I,UAAU7I,KAAK8I,eAC1B9I,KAAK8I,YAAc,GAErB9I,KAAKyH,YAAa,EAEXvG,QAAQiF,aAAaM,QAAQ5G,KAAK,WAEnCqB,QAAQsF,iBACVtF,QAAQH,SAASgI,OAAO7H,QAAQsF,iBAE9BmC,mBAEF7I,QAAQC,OAAOmB,QAAQkF,OAAQuC,mBAEjC7I,QAAQC,OAAOuC,SAAWqG,kBAAmBzH,QAAQkF,SACjDtG,QAAQ+I,UAAUD,WACpBtG,QAAQsG,QAAU3I,EAAEmF,OAAOwD,QAAS,SAASJ,QAC3C,MAAO1I,SAAQkI,YAAYQ,OAAOQ,cAA8C,IAA9BR,OAAOQ,YAAY3F,SAEvEpD,EAAEC,KAAKoC,QAAQsG,QAAS,SAASJ,QAC/B,GAAIS,cACAC,MAAQV,OAAOW,SAASD,MAAM,iBAC9BA,SACF5G,QAAQqG,kBAAkBO,MAAQ,KAClCV,OAAOW,SAAWD,MAAM,GACxBD,aAAenJ,QAAQsJ,KAAKZ,QAC5BS,aAAaE,SAAWD,MAAM,GAC9B5G,QAAQsG,QAAQzF,KAAK8F,iBAM3B,IAAII,kBAAmBnI,QAAQiF,aAAamD,SAASC,oBACrD,IAAIF,kBAAwC,YAApBA,iBAAgC,CACtD,GAAIG,GAAI1J,QAAQ2J,KAAKlH,MAAOrB,QAAQkB,UAAUsG,QAC9CxH,SAAQsF,gBAAkBtF,QAAQH,SAASyI,EAAmC,IAAhCH,iBAAiBK,gBAGjE,GAAIjE,mBAAoBvE,QAAQE,WAAW8C,KAAK3B,MAAMJ,GAAI,OAAQG,QAClE,OAAOC,OAAMuD,QAAQL,sBAUzBvE,QAAQkB,UAAUiG,aAAe,SAASsB,WACxC,GACIC,UAGAC,KACAC,kBALAC,WAAa/J,KAAK2H,QAAQgC,WAE1BK,IAAMhK,KAAK0H,UAAUrE,OACrB4G,QAAS,CAGb,IAAInK,QAAQ+I,UAAU7I,KAAK2H,QAAQgC,aAAeI,WAAa/J,KAAK0H,UAAUrE,SAExEvD,QAAQ+I,UAAU7I,KAAK0H,UAAUqC,YAAYG,WAE/CD,QAAS,GAIXL,SAAWO,KAAKC,IAAIL,WAAa7I,QAAQ+E,QAAQc,UAAWiD,IAAM,IAC7DlK,QAAQ+I,UAAU7I,KAAK0H,UAAUkC,UAAUM,WAC3CpK,QAAQ+I,UAAU7I,KAAK0H,UAAUkC,UAAUS,UAAU,CAExD,IADAT,SAAWO,KAAKC,IAAIL,WAAa7I,QAAQ+E,QAAQe,KAAMgD,KAClDH,QAAwBD,SAAbG,YAAsCC,IAAbD,WAAkBA,aACrDjK,QAAQ+I,UAAU7I,KAAK0H,UAAUqC,YAAYG,UAAYlK,KAAK0H,UAAUqC,YAAYM,QAEtFT,YAIAC,KAAK1G,KAAKnD,KAAK0H,UAAUqC,YAAYjF,KACrC9E,KAAK0H,UAAUqC,YAAYM,SAAU,EAIzCnJ,SAAQV,KAAKC,MAAM,gBAAkBoJ,KAAKrC,KAAK,MAC/CsC,kBAAoB5I,QAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,WAAY0H,KAAMA,OACvE7J,KAAKsK,eAAeR,mBAGxB,MAAOG,SAST/I,QAAQkB,UAAU2F,WAAa,WAC7B,MAAoB,UAAb/H,KAAKwD,MAUdtC,QAAQkB,UAAUmI,QAAU,WAC1B,GACIC,YAEAC,OACArH,SACAlB,EALAK,MAAQvC,KAERwC,SAAWtB,QAAQJ,GAAG2B,OAK1B,OAAIzC,MAAKiE,MAAQjE,KAAKiI,YAAYhE,MAEhCzB,SAASM,UACFN,SAASO,UAIlByH,WAAa,SAASC,OAAQrH,UAC5B,GAAIsH,eAAgB,KAChBjH,QAAUxD,EAAE0D,KAAKP,SAAU,SAASrB,GAClC,MAAOA,GAAEgC,MAAQxB,MAAMwB,MAY7B,OAVIN,SACFiH,cAAgBD,OAGhB3K,QAAQmC,QAAQmB,SAAU,SAASrB,IAC5B2I,eAAiB3I,EAAEqB,UAAYrB,EAAEqB,SAASC,OAAS,IACtDqH,cAAgBF,WAAWzI,EAAGA,EAAEqB,aAI/BsH,eAITD,OAASD,WAAW,KAAMxK,KAAK0F,SAAShD,YAEtCU,SADa,OAAXqH,OACSzK,KAAK0F,SAAShD,WAEd+H,OAAOrH,SAGpBlB,EAAIjC,EAAE8E,QAAQ9E,EAAE+E,MAAM5B,SAAU,MAAOpD,KAAKmC,IAE5CnC,KAAK2K,QAAQ9K,KAAK,SAAS+B,MACzB,GAAIgJ,QACJ9K,SAAQC,OAAOwC,MAAOX,MACtBW,MAAMJ,GAAKI,MAAMqF,MAGjBxE,SAASmC,OAAOrD,EAAG,GACnB0I,QAAU3K,EAAE0D,KAAKP,SAAU,SAASrB,GAElC,MADAb,SAAQV,KAAKC,MAAMsB,EAAEkC,KAAO,MAAQ1B,MAAM0B,MACxB,UAAVlC,EAAEyB,MAAoBzB,EAAEkC,KAAK4G,cAActI,MAAM0B,MAAQ,IAGjE/B,EADE0I,QACE3K,EAAE8E,QAAQ9E,EAAE+E,MAAM5B,SAAU,MAAOwH,QAAQzI,IAG3CiB,SAASC,OAEfD,SAASmC,OAAOrD,EAAG,EAAGK,OAEtBC,SAASM,WACR,SAASlB,MACVY,SAAS4C,OAAOxD,QAGXY,SAASO,UASlB7B,QAAQkB,UAAU0I,SAAW,WAC3B,MAAO5J,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,YAS1CjB,QAAQkB,UAAU2I,aAAe,SAASvH,MACxC,MAAOtC,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,QAAUqB,KAAO,WAS3DtC,QAAQkB,UAAU4I,YAAc,WAC9B,GAAIzI,OAAQvC,IAEZ,OAAOkB,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,cAActC,KAAK,WAEzD0C,MAAMmF,aACNnF,MAAMoF,WACNpF,MAAMuG,YAAc,EAGhBhJ,QAAQ+I,UAAUtG,MAAMa,WAAab,MAAMa,SAASC,QACtDd,MAAMmD,SAASrD,eAAeM,QAAQ,OAU5CzB,QAAQkB,UAAU6I,YAAc,WAC9B,MAAO/J,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,aAS1CjB,QAAQkB,UAAU8I,cAAgB,SAASrB,KAAMsB,MAAOC,WACtD,GAAIxJ,OAAQyJ,QAASxB,KACTsB,MAAOA,MACPC,UAAWA,UAEvB,OAAOlK,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,mBAAoBP,OAS9DV,QAAQkB,UAAUkJ,QAAU,WAC1B,GAEIvI,SAFAR,MAAQvC,KACRwC,SAAWtB,QAAQJ,GAAG2B,OAW1B,OARAM,SAAU7B,QAAQE,WAAWmK,OAAOvL,KAAKmC,IAEzCY,QAAQlD,KAAK,WACX0C,MAAMmD,SAASrD,eAAeM,QAAQ,IACtCH,SAASM,SAAQ,IAChB,SAASlB,KAAMuD,QAChB3C,SAAS4C,OAAOxD,QAEXY,SAASO,SASlB7B,QAAQkB,UAAUoJ,gBAAkB,SAAS3B,MAC3C,MAAO3I,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,eAAgB0H,KAAMA,QAShE3I,QAAQkB,UAAUqJ,cAAgB,SAAS5B,KAAM6B,QAC/C,MAAOxK,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,gBAAiB0H,KAAMA,KAAM6B,OAAQA,UAS/ExK,QAAQkB,UAAUuJ,cAAgB,SAAS9B,KAAM6B,QAC/C,MAAOxK,SAAQE,WAAW8C,KAAKlE,KAAKmC,GAAI,gBAAiB0H,KAAMA,KAAM6B,OAAQA,UAQ/ExK,QAAQkB,UAAUwJ,OAAS,WACzB,GAAIrJ,OAAQvC,IACZF,SAAQmC,QAAQjC,KAAM,SAAS6L,MAAOC,KACzB,eAAPA,KAA+B,YAAPA,KAA+B,KAAVA,IAAI,UAC5CvJ,OAAMuJ,OAGjBhM,QAAQC,OAAOC,KAAMA,KAAKiI,aAC1BjI,KAAKiI,YAAcjI,KAAKkI,SAS1BhH,QAAQkB,UAAUuI,MAAQ,WACxB,GAAIpI,OAAQvC,IAEZ,OAAOkB,SAAQE,WAAW2K,KAAK/L,KAAKmC,GAAInC,KAAKkI,SAASrI,KAAK,SAAS+B,MAIlE,MAFAW,OAAM0F,YAAc1F,MAAM2F,QAC1BhH,QAAQV,KAAKC,MAAMC,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5CgB,MACN,SAASA,MACVV,QAAQV,KAAKwL,MAAMtL,KAAKC,UAAUiB,KAAMhB,OAAW,IAEnD2B,MAAMqJ,YAUV1K,QAAQkB,UAAU4B,YAAc,SAASD,KAAME,MAC7C,MAAOjE,MAAK0F,SAAS1B,YAAYD,KAAME,OASzC/C,QAAQkB,UAAU8F,MAAQ,WACxB,GAAIzE,WAQJ,OAPA3D,SAAQmC,QAAQjC,KAAM,SAAS6L,MAAOC,KACzB,eAAPA,KACO,YAAPA,KACU,KAAVA,IAAI,KACNrI,QAAQqI,KAAOD,SAGZpI,SAUTvC,QAAQkB,UAAU0D,QAAU,SAASL,mBACnC,GAAIlD,OAAQvC,KACRwC,SAAWtB,QAAQJ,GAAG2B,OAuD1B,OArDAzC,MAAKiM,mBAAqBxG,kBAC1BzF,KAAKiM,mBAAmBpM,KAAK,SAAS+B,MACpCV,QAAQH,SAAS,WACf,GAAI8I,MAAMqC,OAEV3J,OAAMoD,KAAK/D,MAEPW,MAAMsH,OACR3I,QAAQV,KAAKC,MAAM,cAAgBmB,KAAKiI,KAAKxG,OAAS,aAGtD6I,QAAUjM,EAAEkM,OAAO5J,MAAM2J,QAAQ,GAAI,eACrC3J,MAAM2J,QAAQ3G,OAAO,EAAG,GAGpBhD,MAAM6J,WACRvC,KAAOtH,MAAMsH,KAAK,GAClBtH,MAAMsH,KAAKtE,OAAO,EAAG,IAIvBtF,EAAEoM,OAAO9J,MAAMsH,KAAM,SAASyC,KAAMC,IAAKrK,GACvC,GAAIN,KAWJ,OATEA,MADEW,MAAM6J,SACDnM,EAAEuM,OAAO3C,KAAM0C,MAEdzH,IAAKyH,IAAIpI,YAGnB5B,MAAMoF,QAAQ/F,KAAKkD,KAAO5C,EAE1BoK,KAAKnJ,KAAK,GAAIjC,SAAQK,SAASgB,MAAMmD,SAASvD,GAAII,MAAOX,MAAM,IAExD0K,MACN/J,MAAMmF,WAGTzH,EAAEC,KAAKqC,MAAM2J,QAAS,SAAStK,MAC7B,GAAI2K,KAAMtM,EAAEuM,OAAON,QAAStK,MACxBM,EAAIK,MAAMoF,QAAQ4E,IAAIzH,IAAIX,WAC9BlE,GAAEF,OAAOwC,MAAMmF,UAAUxF,GAAIqK,QAGjCrL,QAAQV,KAAKC,MAAM,WAAa8B,MAAMJ,GAAK,UAC3CI,MAAMkF,YAAa,EACnBjF,SAASM,QAAQP,MAAMmF,cAExB,SAAS9F,MACV9B,QAAQC,OAAOwC,MAAOX,MACtBW,MAAMkK,SAAU,EAChBjK,SAAS4C,WAGJ5C,SAASO,SASlB7B,QAAQkB,UAAUkI,eAAiB,SAASR,mBAC1C,GAAIvH,OAAQvC,IAEZ8J,mBAAkBjK,KAAK,SAAS+B,MAC9BV,QAAQH,SAAS,WACf,GAAImL,SAASQ,CACT9K,MAAKyB,OAAS,IAEhB6I,QAAUjM,EAAEkM,OAAOvK,KAAK,GAAI,eAC5BA,KAAK2D,OAAO,EAAG,GACftF,EAAEC,KAAK0B,KAAM,SAAS+K,gBACpBA,eAAiB1M,EAAEuM,OAAON,QAASS,gBACnCD,EAAInK,MAAMoF,QAAQgF,eAAe7H,IAAIX,YACjCrE,QAAQ+I,UAAU6D,IACpBzM,EAAEF,OAAOwC,MAAMmF,UAAUgF,GAAIC,2BC5qB3C,WACE,YAUA,SAASxL,SAAQmD,UAAWb,QAASmJ,kBAAmBC,MACtD7M,KAAKsE,UAAYA,UACjBtE,KAAK8M,SAAWrJ,QAChBzD,KAAK+M,mBAAoB,EACzB/M,KAAKgN,oBAAqB,EAC1BhN,KAAKiN,yBAA0B,EAC/BjN,KAAK0E,UAAYwI,MAAQC,MAAQC,QACjCpN,KAAKyI,UAAW,EAGsB,kBAA3BmE,mBAAkB/M,KAEvBC,QAAQ+I,UAAUgE,OAASA,KAC7B7M,KAAK8E,IAAM8H,kBAAkB9H,KAG7BhF,QAAQC,OAAOC,KAAM4M,mBACrB5M,KAAKqN,wBAKPrN,KAAK8F,QAAQ8G,mBASjBzL,QAAQN,UAAY,KAAM,WAAY,OAAQ,OAAQ,aAAc,WAAY,WAAY,cAAe,SAASC,GAAIC,SAAUP,KAAM8M,KAAMtM,SAAUuM,SAAUtM,SAAU+E,aAgB1K,MAfAlG,SAAQC,OAAOoB,SACbL,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACN8M,KAAMA,KACNE,UAAWD,SACXnM,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,gBAG/E2E,YAAYS,QAAQ5G,KAAK,WACnBmG,YAAYsD,SAASmE,uBACvBtM,QAAQuM,MAAQ1H,YAAYsD,SAASmE,wBAIlCtM,SAOT,KACErB,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZE,QAAQ,UAAWP,QAAQN,UAS9BM,QAAQwM,WAAa,SAASC,OAC5B,GAAIC,IAAK,GAAIC,QAAOF,MAAO,IAC3B,OAAO3N,GAAEuI,OAAOvI,EAAE8N,KAAK5M,QAAQuM,OAAQ,SAASM,KAC9C,GAAInC,OAAQ1K,QAAQuM,MAAMM,IAC1B,OAA8B,IAAvBnC,MAAM,GAAGoC,OAAOJ,OAU3B1M,QAAQiB,UAAUoC,cAAgB,SAASlC,SACzC,GAAIxC,QAAQkI,YAAYhI,KAAKmC,IAAK,CAChC,GAAI4B,KACJA,MAAO9D,EAAEmH,IAAIpH,KAAK8M,SAAS/I,KAAKsD,MAAM,KAAM,SAASC,WACnD,MAAO,SAAWA,UAAUC,oBAE9BxD,KAAKwB,OAAO,EAAG,EAAGvF,KAAKsE,WACnBhC,SAAWA,QAAQmC,SAAWzE,KAAKkO,QACrCnK,KAAKZ,KAAKnD,KAAKkO,SAGfnK,KAAKZ,KAAKnD,KAAK8E,KAGjB9E,KAAKmC,GAAK4B,KAAKyD,KAAK,KAGtB,MAAOxH,MAAKmC,IASdhB,QAAQiB,UAAU+L,QAAU,SAASrJ,KACnC,GAAIsJ,QAASpO,KAAK8E,KAAO,EAErBsJ,SAAUtJ,MACZ9E,KAAK8E,IAAMA,IACPsJ,OAAS,IAAMpO,KAAK8M,SAASnF,QAAQyG,UACvCpO,KAAK8M,SAASnF,QAAQ7C,KAAO9E,KAAK8M,SAASnF,QAAQyG,QACnDpO,KAAK8M,SAASnF,QAAQyG,QAAU,QAWtCjN,QAAQiB,UAAUiL,qBAAuB,WACvC,GAAI9K,OAAQvC,KACRG,WAAaF,EAAE+E,MAAMzC,MAAMuK,SAASpH,SAASvF,WAAY,QAG7DF,GAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASsD,MACvDvD,EAAEC,KAAKqC,MAAMiB,MAAO,SAAS5B,KAAMM,GAC7BN,KAAKqC,MAAQrC,KAAKqC,MAAQrC,KAAKrB,OACjCqB,KAAKtB,KAAOsB,KAAKqC,KAAO,KAAOrC,KAAKrB,MAAQ,IAGxCqB,KAAKqC,KAAKoD,MAAM,KAAKhE,SACvBzB,KAAKyM,UAAYzM,KAAKqC,KAAKoD,MAAM,KAAK,GAAGiH,QAAQ,IAAK,OAGxD1M,KAAKtB,KAAO,IAAMsB,KAAKrB,MAAQ,IAC/BqB,KAAKyM,UAAYzM,KAAKrB,MAAM8G,MAAM,KAAK,IAIzCzF,KAAK2M,MAAQpN,QAAQqM,UAAU5L,KAAKrB,MAAO,IAIvCN,EAAE8E,QAAQ5E,WAAYyB,KAAKrB,QAAU,IACvCqB,KAAKyM,UAAYhJ,EAAE,YAW3BlE,QAAQiB,UAAUoM,iBAAmB,WACnC,GAAIjM,OAAQvC,KACRyO,SASJ,OANAxO,GAAEC,MAAM,KAAM,KAAM,OAAQ,SAASsD,MACnCvD,EAAEC,KAAKqC,MAAMiB,MAAO,SAAS5B,KAAMM,GACjCuM,OAAOtL,KAAKvB,KAAKyM,eAIdI,OAAOjH,KAAK,OASrBrG,QAAQiB,UAAUsM,cAAgB,SAASlL,MACzC,GAAImL,SAAU,EAKd,OAJI3O,MAAKwD,OAASxD,KAAKwD,MAAMH,OAAS,IACpCsL,QAAU3O,KAAKwD,MAAM,GAAGS,MAAQjE,KAAKwD,MAAM,GAAGjD,OAAS,IAGlDoO,SAQTxN,QAAQiB,UAAUwM,kBAAoB,WACpC5O,KAAKgN,oBAAqB,GAQ5B7L,QAAQiB,UAAUyM,uBAAyB,WACzC7O,KAAKiN,yBAA0B,GASjC9L,QAAQiB,UAAU0M,SAAW,WAC3B,GAAIvM,OAAQvC,KACR+O,SACA9L,OAAS,SAAS+L,MAChBA,KAAKC,SAAW,uBACC,gCAAbD,KAAKxL,KACPP,OAAOhD,EAAE0D,KAAKqL,KAAKE,QAAS,SAASC,eACnC,MAAOH,MAAKI,eAAiBD,cAAcE,eAItCvP,QAAQwP,QAAQN,KAAKE,SAC5BjP,EAAEC,KAAK8O,KAAKE,QAAS,SAASK,WAC5BtM,OAAOsM,cAILzP,QAAQkI,YAAYgH,KAAKQ,eAE3BR,KAAKQ,YAAcR,KAAKE,QACxB3M,MAAMwK,kBAAqBiC,KAAKQ,YAAYzK,QAAQ,YAAc,IAEnD,yBAAbiK,KAAKxL,MACPwL,KAAKS,MAAO,EACRlN,MAAMyK,oBACJlN,QAAQkI,YAAYgH,KAAKU,iBAC3BV,KAAKU,cAAgBC,SAASC,cAAc,OAC5CZ,KAAKU,cAAcG,UAAYb,KAAKQ,YACpC1P,QAAQmC,SAAS,MAAO,OAAQ,UAAW,aAAc,SAAU,SAAS6N,QAC1E,GACIC,SACAlE,MACA3J,EAHA8N,SAAWhB,KAAKU,cAAcO,iBAAiB,WAAaH,OAAS,IAIzE,KAAK5N,EAAI,EAAGA,EAAI8N,SAAS3M,OAAQnB,IAC/B6N,QAAUjQ,QAAQiQ,QAAQC,SAAS9N,IACnC2J,MAAQkE,QAAQG,KAAK,UAAYJ,QACjCC,QAAQG,KAAKJ,OAAQjE,OACrBkE,QAAQI,WAAW,UAAYL,WAIrCd,KAAKE,QAAU/N,QAAQmM,KAAK8C,QAAQ,OAAQpB,KAAKU,cAAcG,YAG/Db,KAAKE,QAAU/N,QAAQmM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aAEnDT,MAAM5L,KAAK6L,OAES,yBAAbA,KAAKxL,MACQ,0BAAbwL,KAAKxL,MACQ,yBAAbwL,KAAKxL,MAGRwL,KAAKqB,cACPpQ,EAAEC,KAAK8O,KAAKqB,aAAc,SAASC,aACjCA,YAAY/B,MAAQpN,QAAQqM,UAAU8C,YAAY/P,MAAO,MAI5C,0BAAbyO,KAAKxL,OACPwL,KAAKC,SAAW,wBAGlBD,KAAKuB,SAAU,EACfxB,MAAM5L,KAAK6L,QAGXA,KAAKS,MAAO,EACZT,KAAKE,QAAU/N,QAAQmM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aACjDT,MAAM5L,KAAK6L,QAMrB,OAFA/L,QAAOjD,KAAK+O,OAELA,OAUT5N,QAAQiB,UAAUoO,iBAAmB,WACnC,GAAIjO,OAAQvC,IAEZ,OAAOmB,SAAQC,WAAWU,MAAM9B,KAAKwE,gBAAiB,QAAQ3E,KAAK,SAAS+B,MAE1E,MADA9B,SAAQC,OAAOwC,MAAOX,MACfT,QAAQC,WAAWU,MAAMS,MAAMiC,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAAS+B,MAG1F,MAFAT,SAAQX,KAAKC,MAAM,cAAgBC,KAAKC,UAAUiB,KAAMhB,OAAW,IACnEd,QAAQC,OAAOwC,MAAMmC,SAAU9C,MACxBA,KAAK6O,UAYlBtP,QAAQiB,UAAUsO,OAAS,SAAS1C,KAClC,MAAOhO,MAAK2Q,gBAAgB,MAAO3C,MAUrC7M,QAAQiB,UAAUwO,UAAY,SAAS5C,KACrC,MAAOhO,MAAK2Q,gBAAgB,SAAU3C,MAWxC7M,QAAQiB,UAAUuO,gBAAkB,SAASvF,UAAW4C,KACtD,GAAIpM,OACFwJ,UAAWA,UACXC,SAAUrL,KAAK8E,KACfqG,MAAO6C,IAGT,OAAIA,KACK7M,QAAQC,WAAW8C,KAAKlE,KAAK8M,SAASlF,MAAO,mBAAoBhG,MAD1E,QAYFT,QAAQiB,UAAUyO,YAAc,SAAS9M,KAAM+M,OAAQlP,MACrD,GAAIW,OAAQvC,IACZmB,SAAQC,WAAW8C,MAAMlE,KAAKwE,gBAAiBT,MAAMyD,KAAK,KAAMsJ,OAAQlP,MAAM/B,KAAK,SAAS+B,MAC1FT,QAAQJ,SAAS,WACfwB,MAAMwO,WACL,iBAWP5P,QAAQiB,UAAU4O,SAAW,WAE3B,MADAhR,MAAKiR,iBAAmB,EACjB9P,QAAQC,WAAW8C,KAAKlE,KAAKwE,gBAAiB,YASvDrD,QAAQiB,UAAU8O,kBAAoB,SAASC,UAC7C,GAAIL,QAAS,6BAA+BK,SACxC5O,MAAQvC,IACZmB,SAAQC,WAAW8C,KAAKlE,KAAKwE,eAAeC,SAAS,IAAQqM,QAAQjR,KAAK,SAAS+B,MACjFT,QAAQJ,SAAS,WACfwB,MAAMmC,SAAS0M,gBAAkBnR,EAAEuI,OAAOjG,MAAMmC,SAAS0M,gBAAiB,SAASC,YACjF,MAAOA,YAAWF,UAAYA,YAE/B,iBAYPhQ,QAAQiB,UAAUkP,WAAa,WAC7B,GAAI/O,OAAQvC,KACR8Q,OAAS,oBAKb,OAHI9Q,MAAKuR,YACPT,OAAS,wBAEJ3P,QAAQC,WAAW8C,KAAKlE,KAAKwE,gBAAiBsM,QAAQjR,KAAK,SAAS+B,MACzET,QAAQJ,SAAS,WACfwB,MAAMgP,WAAahP,MAAMgP,eAW/BpQ,QAAQiB,UAAU2O,QAAU,WAC1B,GAAInE,kBAIJ,OAFAA,mBAAoBzL,QAAQC,WAAWU,MAAM9B,KAAKwE,gBAAiB,QAE5DxE,KAAK8F,QAAQ8G,oBAStBzL,QAAQiB,UAAUoP,OAAS,WACzB,MAAOxR,MAAKyR,UAAU,UASxBtQ,QAAQiB,UAAUsP,UAAY,WAC5B,MAAO1R,MAAKyR,UAAU,aASxBtQ,QAAQiB,UAAUuP,SAAW,WAC3B,MAAO3R,MAAKyR,UAAU,YAgBxBtQ,QAAQiB,UAAUqP,UAAY,SAASX,QACrC,GAAIvO,OAAQvC,IAGZ,OAAOmB,SAAQC,WAAWU,MAAM9B,KAAKwE,gBAAiBsM,QAAQjR,KAAK,SAAS+B,MAC1E,GAAI6B,SAASY,OAKb,OAJAlD,SAAQX,KAAKC,MAAM,OAASqQ,OAAS,KAAOpQ,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5E6C,QAAUlB,MAAMuK,SAASpH,SAAS5B,kBAAkBlC,KAAK2C,aACzDF,QAAU,GAAIlD,SAAQS,KAAK0C,UAAWb,QAAS7B,MAExCT,QAAQC,WAAWU,MAAMuC,QAAQG,eAAeC,SAAS,IAAQ,QAAQ5E,KAAK,SAAS+B,MAG5F,MAFAT,SAAQX,KAAKC,MAAM,OAASqQ,OAAS,KAAOpQ,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5Ed,QAAQC,OAAOsE,QAAQK,SAAU9C,MAC1ByC,aAWblD,QAAQiB,UAAUuI,MAAQ,WACxB,GAAIpI,OAAQvC,KACR4B,KAAO5B,KAAK0E,QAIhB,OAFAvD,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUiB,KAAMhB,OAAW,IAExDO,QAAQC,WAAW2K,KAAK/L,KAAKwE,eAAeC,SAAS,IAAQ7C,MAAM/B,KAAK,SAAS+R,UACtFzQ,QAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUiR,SAAUhR,OAAW,IACnE2B,MAAM4L,QAAQyD,SAAS9M,KACvBvC,MAAMwO,aAUV5P,QAAQiB,UAAUyP,MAAQ,WACxB,GAAIjQ,MAAO9B,QAAQsJ,KAAKpJ,KAAK0E,UACzBlC,SAAWrB,QAAQL,GAAG2B,OAa1B,OAXAtB,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUiB,KAAMhB,OAAW,IAE/DO,QAAQC,WAAW8C,KAAKlE,KAAKwE,eAAeC,SAAS,IAAQ,OAAQ7C,MAAM/B,KAAK,SAAS+B,MACpE,WAAfA,KAAKuD,OACP3C,SAASM,QAAQlB,MAGjBY,SAAS4C,OAAOxD,QAIbY,SAASO,SASlB5B,QAAQiB,UAAU0D,QAAU,SAAS8G,mBACnC,GAAIrK,OAAQvC,KACRwC,SAAWrB,QAAQL,GAAG2B,OA6B1B,OA1BAzC,MAAK8R,mBAAqBlF,kBAG1B5M,KAAK8R,mBAAmBjS,KAAK,SAAS+B,MAEpCT,QAAQJ,SAAS,WACfjB,QAAQC,OAAOwC,MAAOX,MACtBW,MAAM8K,uBACN9K,MAAMyK,oBAAqB,EAC3BxK,SAASM,QAAQP,SAEdA,MAAMwP,QACT5Q,QAAQC,WAAWU,MAAMS,MAAMiC,gBAAiB,mBAAmB3E,KAAK,WACtEsB,QAAQJ,SAAS,WACfwB,MAAMwP,QAAS,EACfxP,MAAMuK,SAAShE,mBAIpB,SAASlH,MACV9B,QAAQC,OAAOwC,MAAOX,MACtBW,MAAMkK,SAAU,EAChBtL,QAAQX,KAAKwL,MAAMzJ,MAAMyJ,OACzBxJ,SAAS4C,WAGJ5C,SAASO,SASlB5B,QAAQiB,UAAU8F,MAAQ,WACxB,GAAI7D,WAcJ,OAbAvE,SAAQmC,QAAQjC,KAAM,SAAS6L,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,KAC9BzH,QAAQyH,KAAOD,SAKnB5L,EAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASsD,MACnDa,QAAQb,QACVa,QAAQb,MAAQvD,EAAEkM,OAAO9H,QAAQb,MAAM6D,MAAM,KAAM,WAIhDhD,YCvmBX,WACE,YAMA,SAAS2N,mBAAkBC,OAAQlR,SAAUmR,UAAWC,cAAeC,aAAcC,aAAcC,gBAAiBC,MAAOC,OAAQ7S,QAASuB,SAwB1I,QAASuR,eAAcpO,SACrB4N,OAAOS,GAAG,gCAAiCpO,UAAW8N,aAAajQ,GAAIwQ,UAAWL,gBAAgBD,aAAatO,MAAO4F,UAAWtF,QAAQS,MAG3I,QAAS8N,oBACP3S,EAAEC,KAAK2S,GAAGtM,eAAemB,UAAW,SAASrD,SAAWA,QAAQoE,UAAW,IAG7E,QAASqK,iCACPN,OAAOO,QAAQ1N,EAAE,WACFA,EAAE,2DACdxF,KAAK,WAEJ,GAAImT,kBAAmB/S,EAAEuI,OAAOqK,GAAGtM,eAAemB,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAC5FwK,aAAehT,EAAE+E,MAAMgO,iBAAkB,MAC7CH,IAAGtM,eAAeiF,gBAAgByH,cAAcpT,KAAK,WAEnD,GAAIiJ,aAAc7I,EAAEuI,OAAOwK,iBAAkB,SAAS3O,SAAW,OAAQA,QAAQ0N,QACjFc,IAAGtM,eAAemB,UAAYzH,EAAEiT,WAAWL,GAAGtM,eAAemB,UAAWsL,kBACxEH,GAAGtM,eAAeuC,aAAeA,aAC/B,SAASkD,OACXwG,OAAOW,MAAM9N,EAAE,SAAU2G,WAKjC,QAASoH,sBAAqB1H,QAC5B,GAAIsH,kBAAmB/S,EAAEuI,OAAOqK,GAAGtM,eAAemB,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAC5FwK,aAAehT,EAAE+E,MAAMgO,iBAAkB,MAC7CH,IAAGtM,eAAekF,cAAcwH,aAAc,IAAMvH,QAAQ7L,KAAK,aAE9D,SAASmM,OACVwG,OAAOW,MAAM9N,EAAE,SAAU2G,SAa7B,QAASqH,wBACP,GAAIL,kBAAmB/S,EAAEuI,OAAOqK,GAAGtM,eAAemB,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAC5FwK,aAAehT,EAAE+E,MAAMgO,iBAAkB,MAC7CM,QAAOC,SAASC,KAAOC,mBAAqB,IAAMZ,GAAGtM,eAAepE,GAAK,qBAAuB8Q,aAAazL,KAAK,KAGpH,QAASkM,aACPzT,EAAEC,KAAK2S,GAAGtM,eAAemB,UAAW,SAASrD,SAC3CA,QAAQoE,UAAW,IAIvB,QAASkL,iCACP,GAAIX,kBAAmB/S,EAAEuI,OAAOqK,GAAGtM,eAAemB,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAC5FwK,aAAehT,EAAE+E,MAAMgO,iBAAkB,MAE7CH,IAAGtM,eAAe2E,cAAc+H,aAAc,YAAa,OAAOpT,KAAK,SAAS+T,GAE9E3T,EAAEgC,QAAQ+Q,iBAAkB,SAAS3O,SACnCA,QAAQkN,WAAY,MAK1B,QAASsC,gCACP,GAAIb,kBAAmB/S,EAAEuI,OAAOqK,GAAGtM,eAAemB,UAAW,SAASrD,SAAW,MAAOA,SAAQoE,WAC5FwK,aAAehT,EAAE+E,MAAMgO,iBAAkB,MAE7CH,IAAGtM,eAAe2E,cAAc+H,aAAc,OAAQ,UAAUpT,KAAK,SAAS+T,GAE5E3T,EAAEgC,QAAQ+Q,iBAAkB,SAAS3O,SACnCA,QAAQ0N,QAAS,EACjBc,GAAGtM,eAAeuC,kBAKxB,QAASzC,MAAKyN,OACZjB,GAAGtM,eAAemC,SAAUrC,KAAMyN,QAGpC,QAASC,UAASD,OAChB,MAAO5S,SAAQkF,OAAOC,MAAQyN,MAGhC,QAASE,gBACPnB,GAAGoB,KAAKhG,QAAS,EACjB4E,GAAGtM,eAAemC,UAGpB,QAASwL,YAAWC,QAClB,GAAI9P,QAEkB,QAAlB+P,gBACF/P,QAAUwO,GAAGrN,QAAQpB,cACrBgQ,cAAgBlC,UACbmC,MACC5J,OAAQ3K,QAAQiQ,QAAQJ,SAAS2E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACfC,YAAa,gBACbC,WAAY,0BACZC,aAAc,SACdC,QACE1C,cAAeU,GAAGiC,SAClBC,aAAc1Q,QACd2Q,sBAZU9C,WAeL,WACPkC,cAAgB,QA3IxB,GAAIvB,IAAK7S,KAAMoU,cAAgB,IAE/BlT,SAAQqF,eAAiB8L,aAEzBQ,GAAGoC,QAAU/T,QACb2R,GAAGiC,SAAW3C,cACdU,GAAGrN,QAAU4M,aACbS,GAAGtM,eAAiB8L,aACpBQ,GAAGJ,cAAgBA,cACnBI,GAAGD,iBAAmBA,iBACtBC,GAAGC,8BAAgCA,8BACnCD,GAAGO,qBAAuBA,qBAE1BP,GAAGQ,qBAAuBA,qBAC1BR,GAAGc,8BAAgCA,8BACnCd,GAAGgB,6BAA+BA,6BAClChB,GAAGa,UAAYA,UACfb,GAAGxM,KAAOA,KACVwM,GAAGkB,SAAWA,SACdlB,GAAGmB,aAAeA,aAClBnB,GAAGqB,WAAaA,WAChBrB,GAAGoB,MAAShG,QAAQ,GAvBtB+D,kBAAkBkD,SAAW,SAAU,WAAY,YAAa,gBAAiB,eAAgB,eAAgB,kBAAmB,UAAW,SAAU,UAAW,WAmJpKpV,QACG0B,OAAO,iBACPmT,WAAW,oBAAqB3C,sBC3JrC,WACE,YAMA,SAASmD,qBAAoBlD,OAAQlR,SAAUmR,UAAWK,MAAOD,gBAAiBE,OAAQxR,SAAUrB,QAASuB,QAASkU,KAAMpP,YAAamM,eA8BvI,QAASkD,WAAUC,cACjB9C,OAAO+C,OAAOlQ,EAAE,cACFA,EAAE,wCACbxF,KAAK,SAASoE,MACbqR,aAAatR,YAAYsR,aAAanT,GAAI8B,MACvCpE,KAAK,aAEH,SAAS+B,KAAMuD,QAChBqN,OAAOW,MAAM9N,EAAE,sDAAuDpB,MACzDoB,EAAEzD,KAAKoK,YAK9B,QAASwJ,UAAShQ,SAiBhB,QAASiQ,6BAA4BC,OAAQxD,UAAWkD,KAAM5P,SAY5D,QAASmQ,YAAWvP,QAClB,MAAOgP,MAAK1M,QAAQtC,OAAQZ,QAAQP,WAGtC,QAAS2Q,cACP1D,UAAU2D,OAGZ,QAASC,YAAWlR,MAClBY,QAAQF,gBAAgBV,KAAKE,KAA7BU,SAAwC,SAAS5D,KAAMuD,QACrDqN,OAAOW,MAAM9N,EAAE,WAAYA,EAAE,yCAIjC,QAAS0Q,SAAQnU,MACXA,MACF4D,QAAQb,aAAa/C,MAAM/B,KAAK,WAC9BgT,GAAGmD,UAAY,GACfnD,GAAGoD,WAAa,IACf,SAASjK,OACVwG,OAAOW,MAAM9N,EAAE,WAAY2G,SA/BjC,GAAI6G,IAAK7S,IAET6S,IAAG3N,MAAQM,QAAQP,UACnB4N,GAAGrN,QAAUA,QACbqN,GAAGmD,UAAY,GACfnD,GAAGoD,WAAa,GAChBpD,GAAG8C,WAAaA,WAChB9C,GAAG+C,WAAaA,WAChB/C,GAAGiD,WAAaA,WAChBjD,GAAGkD,QAAUA,QA1Bf7D,UAAUmC,MACRK,YAAalP,QAAQrD,GAAK,cAC1BwS,WAAYc,4BACZb,aAAc,WACdJ,qBAAqB,EACrBC,eAAe,EACfI,QACEO,KAAMA,KACN5P,QAASA,WAObiQ,4BAA4BP,SAAW,SAAU,YAAa,OAAQ,WAwCxE,QAASgB,YAAWxK,QAClBmH,GAAGsD,SAAWzK,OAAO3H,KACrBwO,MAAM,eAAiB7G,OAAO3H,MAGhC,QAASqS,eAAc1K,QACrBA,OAAOE,SACPiH,GAAGsD,UAAW,EAGhB,QAASE,cAAa7Q,QAASkG,QACzBmH,GAAGsD,UAAYzK,OAAO3H,OAE1B8O,GAAGsD,UAAW,EACdlE,OAAOS,GAAG,wBAA0BpO,UAAWkB,QAAQrD,GAAIwQ,UAAWL,gBAAgB5G,OAAO3H,SAG/F,QAASuS,YAAW5K,QAClBA,OAAOnB,UAGT,QAASgM,eAAc7K,QACrBA,OAAOZ,WAAWjL,KAAK,aAEpB,SAASmM,OACVwG,OAAOW,MAAM9N,EAAE,WAAY2G,SAI/B,QAASwK,kBAAiB9K,QACxBA,OAAOV,cAAcnL,KAAK,aAEvB,SAASmM,OACVwG,OAAOW,MAAM9N,EAAE,WAAY2G,SAI/B,QAASyK,aAAY/K,QACnB4H,OAAOC,SAASC,KAAOC,mBAAqB,IAAM/H,OAAOvJ,GAAK,gBAGhE,QAASuU,eAAchL,QACrB8G,OAAOO,QAAQ1N,EAAE,gBAAiBA,EAAE,4DACjCxF,KAAK,WACJ6L,OAAOJ,UACJzL,KAAK,WACJoS,OAAOS,GAAG,SACT,SAAS9Q,KAAMuD,QAChBqN,OAAOW,MAAM9N,EAAE,sDAAuDqG,OAAOzH,MAChEoB,EAAEzD,KAAKoK,YAK9B,QAAS2K,gBAAejL,QACtBA,OAAOT,cAGT,QAAS2L,OAAMlL,QAEbA,OAAO7D,KAAKgP,SAAShX,KAAK,WAExBqS,UAAUmC,MACRK,YAAahJ,OAAOvJ,GAAK,gBACzBwS,WAAY,gBACZC,aAAc,MACdJ,qBAAqB,EACrBC,eAAe,EACfI,QACEiC,aAAcpL,OAAO7D,KAAK3C,MAC1BkQ,KAAMA,KACN1J,OAAQA,YAMhB,QAASqL,mBAAkBrL,QACzB,MAAmB,SAAfA,OAAOlI,MACDS,KAAMyH,OAAOzH,KAAM+S,KAAK,SACV,SAAftL,OAAOlI,MACNS,KAAMoB,EAAE,oBAAqB2R,KAAM,UACrB,QAAftL,OAAOlI,MACNS,KAAMoB,EAAE,kBAAmB2R,KAAM,QACnB,SAAftL,OAAOlI,MACNS,KAAMoB,EAAE,mBAAoB2R,KAAM,UACpB,cAAftL,OAAOlI,MACNS,KAAMyH,OAAOzH,KAAM+S,KAAM,kBAK3B/S,KAAMyH,OAAOzH,KAAM+S,KAAM,UAGnC,QAASC,aAAYvL,OAAQlI,MAC3BkI,OAAOX,aAAavH,MAAM3D,KAAK,WAC7B6L,OAAOhG,SAASrD,eAAeM,QAAQ,KACtC,SAASqJ,OACVwG,OAAOW,MAAM9N,EAAE,WAAY2G,SAI/B,QAASkL,sBACP,GAAIC,oBAAqB7D,OAAO6D,kBAEhClX,GAAEgC,QAAQ4Q,GAAGiC,SAAU,SAAStP,SAGzBvF,EAAEmX,SAASD,mBAAoB3R,QAAQrD,GAAK,iBAC/CgV,mBAAmBhU,KAAKqC,QAAQrD,GAAK,gBAEvClC,EAAEgC,QAAQuD,QAAQlC,mBAAoB,SAASG,SACzC3D,QAAQ+I,UAAUpF,QAAQqF,eACzB7I,EAAEmX,SAASD,mBAAoB1T,QAAQtB,KAC1CgV,mBAAmBhU,KAAKM,QAAQtB,QAItCxC,QAAQyB,WAAW8C,KAAK,GAAI,eAAgBhB,UAAWiU,qBAAqBtX,KAAK,SAAS+B,MACxF3B,EAAEgC,QAAQ4Q,GAAGiC,SAAU,SAAStP,SAC9BvF,EAAEgC,QAAQuD,QAAQlC,mBAAoB,SAASG,SACzC7B,KAAK6B,QAAQtB,MACfsB,QAAQqF,YAAclH,KAAK6B,QAAQtB,WAK3C6D,YAAYS,QAAQ5G,KAAK,WACvB,GAAIwJ,kBAAmBrD,YAAYsD,SAASC,oBACxCF,mBAAwC,YAApBA,kBACtBtI,SAAS8R,GAAGqE,mBAAoD,IAAhC7N,iBAAiBK,kBAtOvD,GACIlE,SACA/B,QAFAoP,GAAK7S,IAIT6S,IAAGoC,QAAU/T,QACb2R,GAAGiC,SAAW3C,cACdU,GAAGwC,UAAYA,UACfxC,GAAG2C,SAAWA,SACd3C,GAAGqD,WAAaA,WAChBrD,GAAGuD,cAAgBA,cACnBvD,GAAGwD,aAAeA,aAClBxD,GAAGyD,WAAaA,WAChBzD,GAAG0D,cAAgBA,cACnB1D,GAAG2D,iBAAmBA,iBACtB3D,GAAG4D,YAAcA,YACjB5D,GAAG6D,cAAgBA,cACnB7D,GAAG8D,eAAiBA,eACpB9D,GAAG+D,MAAQA,MACX/D,GAAGkE,kBAAoBA,kBACvBlE,GAAGoE,YAAcA,YACjBpE,GAAGqE,mBAAqBA,mBAEG,QAAvBjF,OAAOoF,QAAQpT,MAAkB4O,GAAGiC,SAASzR,OAAS,GAAKwP,GAAGiC,SAAS,GAAGpS,WAAWW,OAAS,IAEhGmC,QAAUqN,GAAGiC,SAAS;AACtBrR,QAAU+B,QAAQ9C,WAAW,GAC7BuP,OAAOS,GAAG,wBAA0BpO,UAAWkB,QAAQrD,GAAIwQ,UAAWL,gBAAgB7O,QAAQM,SAgNhG8O,GAAGqE,qBA5OL/B,oBAAoBD,SAAW,SAAU,WAAY,YAAa,UAAW,kBAAmB,SAAU,aAAc,UAAW,UAAW,OAAQ,cAAe,iBA+OrKpV,QACG0B,OAAO,iBACPmT,WAAW,sBAAuBQ,wBCvPvC,WACE,YAMA,SAASmC,mBAAkB5B,OAAQzD,OAAQC,UAAWC,cAAeC,aAAcC,aAAc0C,aAAczC,gBAAiBC,MAAOC,OAAQ7S,QAASuB,QAASC,SA4B/J,QAASoW,YACPlF,aAAa7G,iBAAiBuJ,aAAajQ,MAAMjF,KAAK,WAEpD,GAAIsH,OAAQlH,EAAEuX,UAAUnF,aAAa3K,UAAW,SAAS3F,GACvD,MAAOA,GAAE+C,KAAOiQ,aAAajQ,KAElB,KAATqC,OACFkL,aAAa3K,UAAUnC,OAAO4B,MAAO,GAEvC0L,GAAGxO,QAAU,KACb4N,OAAOS,GAAG,wBAA0BpO,UAAW8N,aAAajQ,GAAIwQ,UAAWL,gBAAgBD,aAAatO,UAI5G,QAAS0T,gBAAetD,OAAQ9P,QAASqT,YACjB,OAAlBtD,gBACGtU,QAAQ+I,UAAU6O,cACrBA,eAEFtD,cAAgBlC,UACbmC,MACC5J,OAAQ3K,QAAQiQ,QAAQJ,SAAS2E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACfC,YAAa,gBACbC,WAAY,0BACZC,aAAc,SACdC,QACE1C,cAAeU,GAAGiC,SAClBC,aAAc1Q,QACd2Q,gBAAiB0C,cAZPxF,WAeL,WACPkC,cAAgB,QAKxB,QAASuD,SACP1F,OAAOS,GAAG,wBAA0BpO,UAAW8N,aAAajQ,GAAIwQ,UAAWL,gBAAgBD,aAAatO,QAASlE,KAAK,WACpHgT,GAAGxO,QAAU,WACNgO,cAAauF,kBAIxB,QAASC,OAAM1D,QACb,GAAI9P,SAAUwO,GAAGxO,QAAQmN,QACzBiG,gBAAetD,OAAQ9P,SAGzB,QAASyT,UAAS3D,QAChB,GAAI9P,SAAUwO,GAAGxO,QAAQqN,WACzB+F,gBAAetD,OAAQ9P,SAGzB,QAAS0T,SAAQ5D,QACf,GAAI9P,SAAUwO,GAAGxO,QAAQsN,UACzB8F,gBAAetD,OAAQ9P,SAGzB,QAAS2T,MAAK7D,QACZtB,GAAGxO,QAAQmM,mBAAmB3Q,KAAK,WACjC4X,eAAetD,OAAQtB,GAAGxO,WAI9B,QAAS6P,YAAWC,OAAQ8D,WAC1B,GAAI5T,SAAUwO,GAAGrN,QAAQpB,aACzBqT,gBAAetD,OAAQ9P,SAAU4T,YAGnC,QAASC,eACP5E,OAAOC,SAASC,KAAOC,mBAAqB,IAAMZ,GAAGpP,QAAQtB,GAAK,qBAAuB0Q,GAAGxO,QAAQS,IAGtG,QAASqT,eAAchE,QACrBhT,QAAQC,WAAW8C,KAAK2O,GAAGxO,QAAQlC,GAAI,cAActC,KAAK,SAAS+B,MAyBjE,QAASwW,kCAAiCC,MAAOnG,WAC/CmG,MAAMV,MAAQ,WACZzF,UAAU2D,QA1Bd3D,UAAUmC,MACR5J,OAAQ3K,QAAQiQ,QAAQJ,SAAS2E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACf6D,UACE,kDAAoDjT,EAAE,uBAAyB,KAC/E,wBACA,YACAzD,KACA,aACA,yBACA,6BACA,qCAAuCyD,EAAE,SAAW,eACpD,WACA,gBACAmC,KAAK,IACPmN,WAAYyD,mCAMdA,iCAAiClD,SAAW,QAAS,eAjIzD,GAAIrC,IAAK7S,KAAMoU,cAAgB,IAE/BvB,IAAGiC,SAAW3C,cACdU,GAAGrN,QAAU4M,aACbS,GAAGpP,QAAU4O,aACbQ,GAAGxO,QAAU0Q,aACblC,GAAGoC,QAAU9T,QACb0R,GAAG0F,MAAStC,WAAY,GAAIxN,SAAU,IACtCoK,GAAG0E,SAAWA,SACd1E,GAAG8E,MAAQA,MACX9E,GAAGgF,MAAQA,MACXhF,GAAGiF,SAAWA,SACdjF,GAAGkF,QAAUA,QACblF,GAAGmF,KAAOA,KACVnF,GAAGqB,WAAaA,WAChBrB,GAAGqF,YAAcA,YACjBrF,GAAGsF,cAAgBA,cAKnBzC,OAAO8C,iBAAiB,uBAAwB,SAASC,QAASC,SAChEzY,EAAEC,KAAKD,EAAEiT,WAAWwF,QAASD,SAAU,SAASzK,KAC9C6E,GAAGxO,QAAQuM,UAAU5C,SAzB3BsJ,kBAAkBpC,SAAW,SAAU,SAAU,YAAa,gBAAiB,eAAgB,eAAgB,eAAgB,kBAAmB,UAAW,SAAU,UAAW,UAAW,WA6I7LpV,QACG0B,OAAO,iBACPmT,WAAW,oBAAqB2C,sBCrJrC,WACE,YAMA,SAASqB,yBAAwBC,aAAc3G,OAAQnR,GAAIoR,UAAW2G,aAAc1G,cAAe4C,aAAcC,gBAAiBjU,SAAUuR,gBAAiBC,MAAOC,OAAQ7S,QAASuB,QAAS4X,YAAa9S,aAgEzM,QAAS+C,UAEH8J,GAAGkG,UACLhY,SAASgI,OAAO8J,GAAGkG,UAErB7G,UAAUnJ,SAGZ,QAASiQ,QACHnG,GAAGkG,UACLhY,SAASgI,OAAO8J,GAAGkG,UAErBlG,GAAGxO,QAAQwN,QAAQhS,KAAK,SAAS+B,MAC/BsQ,UAAU2D,QACT,SAASjU,MACV4Q,OAAOW,MAAM9N,EAAEzD,KAAKuD,QAASE,EAAEzD,KAAKyC,YAIxC,QAAS4U,eAAc7S,QACrB,MAAO0S,aAAYI,WAAW9S,QAGhC,QAAS+S,cAAavU,MACpB,GAAIqT,aAEJ,OAAInY,SAAQsZ,SAASxU,MACZA,MACLA,KAAKyU,YACPpB,UAAU9U,KAAKyB,KAAKyU,YAClBzU,KAAK0U,SACPrB,UAAU9U,KAAK,IAAMyB,KAAK0U,QAAU,KAE/BrB,UAAUzQ,KAAK,MAIxB,QAAS+R,kBACP1G,GAAGxO,QAAQsG,QACP3E,YAAYsD,SAASkQ,mBACvB3G,GAAGkG,SAAWhY,SAAS8R,GAAG0G,eAAsD,IAAtCvT,YAAYsD,SAASkQ,iBAAsB,KAvGzF,GAAI3G,IAAK7S,IAET6S,IAAGsG,aAAeA,aAClBtG,GAAG4G,cAAgBvM,MAAQC,MAAQC,QACnCyF,GAAGkG,SAAW,KACdlG,GAAG0G,eAAiBA,eACpB1G,GAAG6G,QAAS,EACZ7G,GAAG8G,SAAU,EACb9G,GAAG9J,OAASA,OACZ8J,GAAGmG,KAAOA,KACVnG,GAAGoG,cAAgBA,cACnBpG,GAAG1S,WAAaF,EAAE+E,MAAM/E,EAAE2Z,QAAQ3Z,EAAE+E,MAAMmN,cAAe,eAAgB,QACzEU,GAAGgH,SAAW,GAAIhB,eAChBiB,IAAK/E,aAAavQ,eAAeC,SAAS,IAAS,QACnDsV,YAAY,EACZC,MAAO,cACPC,eAAgB,SAASC,KAAMC,UAC7BvW,QAAQnD,MAAMyZ,MAAOtW,QAAQnD,MAAM0Z,WAErCC,cAAe,SAASF,KAAMtI,SAAUzM,OAAQ+G,SAC9C6I,aAAa5G,QAAQyD,SAAS9M,KAC9BiQ,aAAahE,UACbnN,QAAQnD,MAAMyZ,MAAOtW,QAAQnD,MAAM,aAAeC,KAAKC,UAAUiR,SAAUhR,OAAW,KAExFyZ,aAAc,SAASH,KAAMtI,SAAUzM,OAAQ+G,SAC7CtI,QAAQnD,MAAMyZ,MAAOtW,QAAQnD,MAAM,YAAcC,KAAKC,UAAUiR,SAAUhR,OAAW,IAGrFmU,aAAa7D,kBAAkBgJ,KAAKI,KAAKrW,MACzCjE,KAAKua,gBAAgBL,OAEvBM,YAAa,SAASN,KAAMtI,SAAUzM,OAAQ+G,SAC5CtI,QAAQnD,MAAMyZ,MAAOtW,QAAQnD,MAAM,WAAaC,KAAKC,UAAUiR,SAAUhR,OAAW,OAIzD,SAA3BgY,aAAa6B,WACf1F,aAAavD,SAAS3R,KAAK,SAAS6a,WAClC7H,GAAGxO,QAAUqW,UACb7H,GAAG6G,QAAWgB,UAAUhW,SAASyI,IAAuC,IAAjCuN,UAAUhW,SAASyI,GAAG9J,OAC7DwP,GAAG8G,SAAYe,UAAUhW,SAAS0I,KAAyC,IAAlCsN,UAAUhW,SAAS0I,IAAI/J,SAGhC,YAA3BuV,aAAa6B,WACpB1F,aAAarD,YAAY7R,KAAK,SAAS6a,WACrC7H,GAAGxO,QAAUqW,UACb7H,GAAG6G,QAAWgB,UAAUhW,SAASyI,IAAuC,IAAjCuN,UAAUhW,SAASyI,GAAG9J,OAC7DwP,GAAG8G,SAAYe,UAAUhW,SAAS0I,KAAyC,IAAlCsN,UAAUhW,SAAS0I,IAAI/J,SAGhC,WAA3BuV,aAAa6B,WACpB1F,aAAapD,WAAW9R,KAAK,SAAS6a,WACpC7H,GAAGxO,QAAUqW,YAGR5a,QAAQ+I,UAAUkM,gBACzBlC,GAAGxO,QAAU0Q,cAGXjV,QAAQ+I,UAAUmM,mBACpBnC,GAAGxO,QAAQK,SAASwI,GAAKjN,EAAE0a,MAAM9H,GAAGxO,QAAQK,SAASwI,GAAIjN,EAAE+E,MAAMgQ,gBAAiB,UA+CpFhP,YAAYS,QAAQ5G,KAAK,WACnBmG,YAAYsD,SAASkQ,mBACvB3G,GAAGkG,SAAWhY,SAAS8R,GAAG0G,eAAsD,IAAtCvT,YAAYsD,SAASkQ,iBAAsB,KACvF3G,GAAG+H,WAAa5U,YAAYsD,SAASuR,aAhHzClC,wBAAwBzD,SAAW,eAAgB,SAAU,KAAM,YAAa,eAAgB,gBAAiB,eAAgB,kBAAmB,WAAY,kBAAmB,UAAW,SAAU,UAAW,UAAW,cAAe,eAoH7OpV,QACG0B,OAAO,iBACPmT,WAAW,0BAA2BgE","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Account\n * @constructor\n * @param {object} futureAccountData\n */\n function Account(futureAccountData) {\n // Data is immediately available\n if (typeof futureAccountData.then !== 'function') {\n angular.extend(this, futureAccountData);\n _.each(this.identities, function(identity) {\n if (identity.fullName)\n identity.full = identity.fullName + ' <' + identity.email + '>';\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.activeUser('folderURL') + 'Mail', 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 if (!data) {\n return Account.$$resource.fetch('', 'mailAccounts').then(function(o) {\n return Account.$unwrapCollection(o);\n });\n }\n return Account.$unwrapCollection(data);\n };\n\n /**\n * @memberof Account\n * @desc Unwrap to a collection of Account instances.\n * @param {object} data - the accounts information\n * @returns a collection of Account objects\n */\n Account.$unwrapCollection = function(data) {\n var collection = [];\n\n angular.forEach(data, function(o, i) {\n o.id = i;\n collection[i] = new Account(o);\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\n return Account.$$resource.post(path.toString(), 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n });\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 (compose): ' + 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 (edit): ' + 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 = true;\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 getLength\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the number of items in the mailbox\n */\n Mailbox.prototype.getLength = function() {\n return this.$messages.length;\n };\n\n /**\n * @function getItemAtIndex\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the message as the specified index\n */\n Mailbox.prototype.getItemAtIndex = function(index) {\n var message;\n\n if (index >= 0 && index < this.$messages.length) {\n message = this.$messages[index];\n\n if (this.$loadMessage(message.uid))\n return message;\n }\n\n return null;\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 var _this = this;\n\n return Mailbox.$$resource.post(this.id, 'emptyTrash').then(function() {\n // Remove all messages from the mailbox\n _this.$messages = [];\n _this.uidsMap = {};\n _this.unseenCount = 0;\n\n // If we had any submailboxes, lets do a refresh of the mailboxes list\n if (angular.isDefined(_this.children) && _this.children.length)\n _this.$account.$getMailboxes({reload: true});\n });\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 $flagMessages\n * @memberof Mailbox.prototype\n * @desc Add or remove a flag on a message set\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$flagMessages = function(uids, flags, operation) {\n var data = {msgUIDs: uids,\n flags: flags,\n operation: operation};\n\n return Mailbox.$$resource.post(this.id, 'addOrRemoveLabel', data);\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, true));\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 * @param {bool} lazy - do \"lazy loading\" so we are very quick at initializing message instances\n */\n function Message(accountId, mailbox, futureMessageData, lazy) {\n this.accountId = accountId;\n this.$mailbox = mailbox;\n this.$hasUnsafeContent = false;\n this.$loadUnsafeContent = false;\n this.$showDetailedRecipients = false;\n this.editable = {to: [], cc: [], bcc: []};\n this.selected = false;\n\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n if (angular.isDefined(lazy) && lazy) {\n this.uid = futureMessageData.uid;\n }\n else {\n angular.extend(this, futureMessageData);\n this.$formatFullAddresses();\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\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 if (angular.isUndefined(this.id)) {\n var path;\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 this.id = path.join('/');\n }\n\n return this.id;\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 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 * This function also generates a gravatar for each email address, and a short name\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n var identities = _.pluck(_this.$mailbox.$account.identities, 'email');\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\n // If we have \"Alice Foo\" as name, we grab \"Alice\"\n if (data.name.split(' ').length)\n data.shortname = data.name.split(' ')[0].replace('\\'','');\n }\n else {\n data.full = '<' + data.email + '>';\n data.shortname = data.email.split('@')[0];\n }\n\n // Generate the gravatar\n data.image = Message.$gravatar(data.email, 32);\n\n // If the current user is the recepient, overwrite\n // the short name with 'me'\n if (_.indexOf(identities, data.email) >= 0)\n data.shortname = l('me');\n });\n });\n };\n\n /**\n * @function $shortRecipients\n * @memberof Message.prototype\n * @desc Format all recipients into a very compact string\n * @returns a compacted string of all recipients\n */\n Message.prototype.$shortRecipients = function() {\n var _this = this;\n var result = [];\n\n // Build long representation of email addresses\n _.each(['to', 'cc', 'bcc'], function(type) {\n _.each(_this[type], function(data, i) {\n result.push(data.shortname);\n });\n });\n\n return result.join(', ');\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 showDetailedRecipients\n * @memberof Message.prototype\n * @desc Mark the message to show all to/cc recipients.\n */\n Message.prototype.showDetailedRecipients = function() {\n this.$showDetailedRecipients = 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 part.msgclass = 'msg-attachment-other';\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 if (part.type == 'UIxMailPartImageViewer')\n part.msgclass = 'msg-attachment-image';\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.$absolutePath(), '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.$absolutePath(), 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.$absolutePath(), '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.$absolutePath(), 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.$absolutePath(), '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.$absolutePath(), 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.$formatFullAddresses();\n _this.$loadUnsafeContent = false;\n deferred.resolve(_this);\n });\n if (!_this.isread) {\n Message.$$resource.fetch(_this.$absolutePath(), '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","/* -*- 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, messageDialog = null;\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.markSelectedMessagesAsFlagged = markSelectedMessagesAsFlagged;\n vm.markSelectedMessagesAsUnread = markSelectedMessagesAsUnread;\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 // Decrement the unseenCount accordingly\n var unseenCount = _.filter(selectedMessages, function(message) { return !message.isread; });\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n vm.selectedFolder.unseenCount =- unseenCount;\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 markSelectedMessagesAsFlagged() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, '\\\\Flagged', 'add').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isflagged = true;\n });\n });\n }\n\n function markSelectedMessagesAsUnread() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, 'seen', 'remove').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isread = false;\n vm.selectedFolder.unseenCount++;\n });\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 var message;\n\n if (messageDialog === null) {\n message = vm.account.$newMessage();\n messageDialog = $mdDialog\n .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 stateRecipients: []\n }\n })\n .finally(function() {\n messageDialog = null;\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, messageDialog = null;\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.close = close;\n vm.reply = reply;\n vm.replyAll = replyAll;\n vm.forward = forward;\n vm.edit = edit;\n vm.newMessage = newMessage;\n vm.saveMessage = saveMessage;\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, recipients) {\n if (messageDialog === null) {\n if (!angular.isDefined(recipients))\n recipients = [];\n\n messageDialog = $mdDialog\n .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 stateRecipients: recipients\n }\n })\n .finally(function() {\n messageDialog = null;\n });\n }\n }\n\n function close() {\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) }).then(function() {\n vm.message = null;\n delete stateMailbox.selectedMessage;\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 newMessage($event, recipient) {\n var message = vm.account.$newMessage();\n showMailEditor($event, message, [recipient]);\n }\n\n function saveMessage() {\n window.location.href = ApplicationBaseURL + '/' + vm.mailbox.id + '/saveMessages?uid=' + vm.message.uid;\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', 'stateRecipients', '$timeout', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $state, $q, $mdDialog, FileUploader, stateAccounts, stateMessage, stateRecipients, $timeout, encodeUriFilter, focus, Dialog, Account, Mailbox, AddressBook, Preferences) {\n var vm = this;\n\n vm.addRecipient = addRecipient;\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 if (angular.isDefined(stateRecipients)) {\n vm.message.editable.to = _.union(vm.message.editable.to, _.pluck(stateRecipients, 'full'));\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 return AddressBook.$filterAll($query);\n }\n\n function addRecipient(user) {\n var recipient = [];\n\n if (angular.isString(user))\n return user;\n if (user.$$fullname)\n recipient.push(user.$$fullname);\n if (user.$$email)\n recipient.push('<' + user.$$email + '>');\n\n return recipient.join(' ');\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"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js b/UI/WebServerResources/js/Scheduler.services.js index 991a7e733..fb1694ef4 100644 --- a/UI/WebServerResources/js/Scheduler.services.js +++ b/UI/WebServerResources/js/Scheduler.services.js @@ -1,2 +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)})),_.union(this.$calendars,this.$subscriptions,this.$webcalendars)},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.$deleteComponents=function(components){var calendars={},_this=this;_.forEach(components,function(component){angular.isDefined(calendars[component.c_folder])||(calendars[component.c_folder]=[]),calendars[component.c_folder].push(component.c_name)}),_.forEach(calendars,function(uids,c_folder){Calendar.$$resource.post(c_folder,"batchDelete",{uids:uids})}),_this.$Component.$events=_.difference(_this.$Component.$events,components),_this.$Component.$tasks=_.difference(_this.$Component.$tasks,components)},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_incomplete"}}),Preferences.ready().then(function(){Preferences.settings.Calendar.EventsFilterState&&(Component.$queryEvents.filterpopup=Preferences.settings.Calendar.EventsFilterState),Preferences.settings.Calendar.TasksFilterState&&(Component.$queryTasks.filterpopup=Preferences.settings.Calendar.TasksFilterState),Preferences.settings.Calendar.EventsSortingState&&(Component.$queryEvents.sort=Preferences.settings.Calendar.EventsSortingState[0],Component.$queryEvents.asc=parseInt(Preferences.settings.Calendar.EventsSortingState[1])),Preferences.settings.Calendar.TasksSortingState&&(Component.$queryTasks.sort=Preferences.settings.Calendar.TasksSortingState[0],Component.$queryTasks.asc=parseInt(Preferences.settings.Calendar.TasksSortingState[1])),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.$selectedCount=function(){var count;return count=0,Component.$events&&(count=_.filter(Component.$events,function(event){return event.selected}).length),Component.$tasks&&(count=_.filter(Component.$tasks,function(event){return event.selected}).length),count},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.saveSelectedList=function(componentType){return this.$$resource.post(null,"saveSelectedList",{list:componentType+"ListView"})},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]}),this.init(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}}(); +!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)})),_.union(this.$calendars,this.$subscriptions,this.$webcalendars)},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.$deleteComponents=function(components){var calendars={},_this=this;_.forEach(components,function(component){angular.isDefined(calendars[component.c_folder])||(calendars[component.c_folder]=[]),calendars[component.c_folder].push(component.c_name)}),_.forEach(calendars,function(uids,c_folder){Calendar.$$resource.post(c_folder,"batchDelete",{uids:uids})}),_this.$Component.$events=_.difference(_this.$Component.$events,components),_this.$Component.$tasks=_.difference(_this.$Component.$tasks,components)},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_incomplete"}}),Preferences.ready().then(function(){Preferences.settings.Calendar.EventsFilterState&&(Component.$queryEvents.filterpopup=Preferences.settings.Calendar.EventsFilterState),Preferences.settings.Calendar.TasksFilterState&&(Component.$queryTasks.filterpopup=Preferences.settings.Calendar.TasksFilterState),Preferences.settings.Calendar.EventsSortingState&&(Component.$queryEvents.sort=Preferences.settings.Calendar.EventsSortingState[0],Component.$queryEvents.asc=parseInt(Preferences.settings.Calendar.EventsSortingState[1])),Preferences.settings.Calendar.TasksSortingState&&(Component.$queryTasks.sort=Preferences.settings.Calendar.TasksSortingState[0],Component.$queryTasks.asc=parseInt(Preferences.settings.Calendar.TasksSortingState[1])),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.$selectedCount=function(){var count;return count=0,Component.$events&&(count=_.filter(Component.$events,function(event){return event.selected}).length),Component.$tasks&&(count=_.filter(Component.$tasks,function(event){return event.selected}).length),count},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.saveSelectedList=function(componentType){return this.$$resource.post(null,"saveSelectedList",{list:componentType+"ListView"})},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.$addDueDate=function(){this.due=new Date,this.dueDate=this.due.toISOString()},Component.prototype.$deleteDueDate=function(){delete this.due},Component.prototype.$addStartDate=function(){this.start=new Date},Component.prototype.$deleteStartDate=function(){delete this.start,delete this.startDate},Component.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&delete _this[key]}),this.init(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(date){var hours=date.getHours();10>hours&&(hours="0"+hours);var minutes=date.getMinutes();return 10>minutes&&(minutes="0"+minutes),hours+":"+minutes}function formatDate(date){var year=date.getYear();1e3>year&&(year+=1900);var month=""+(date.getMonth()+1);1==month.length&&(month="0"+month);var day=""+date.getDate();return 1==day.length&&(day="0"+day),year+"-"+month+"-"+day}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startDate=component.start?formatDate(component.start):"",component.startTime=component.start?formatTime(component.start):"",component.endDate=component.end?formatDate(component.end):"",component.endTime=component.end?formatTime(component.end):"",component.dueDate=component.due?formatDate(component.due):"",component.dueTime=component.due?formatTime(component.due):"",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 index b723be1a3..c83ee312b 100644 --- a/UI/WebServerResources/js/Scheduler.services.js.map +++ b/UI/WebServerResources/js/Scheduler.services.js.map @@ -1 +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","union","$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","$deleteComponents","components","calendars","component","isDefined","c_folder","c_name","uids","$events","difference","$tasks","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","EventsFilterState","TasksFilterState","EventsSortingState","parseInt","TasksSortingState","show_completed","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$selectedCount","count","filter","event","selected","length","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","category","saveSelectedList","componentType","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","nbr","$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","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","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 _.union(this.$calendars, this.$subscriptions, this.$webcalendars);\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 $deleteComponents\n * @memberof Calendar\n * @desc Delete multiple components from calendar.\n * @return a promise of the HTTP operation\n */\n Calendar.$deleteComponents = function(components) {\n\n // We create a c_folder -> event hash\n var calendars = {}, _this = this;\n\n _.forEach(components, function(component) {\n if (!angular.isDefined(calendars[component.c_folder]))\n calendars[component.c_folder] = [];\n\n calendars[component.c_folder].push(component.c_name);\n });\n\n _.forEach(calendars, function(uids, c_folder) {\n Calendar.$$resource.post(c_folder, 'batchDelete', {uids: uids});\n });\n\n // We slice both arrays - might be useful if in the future, we can delete\n // events and tasks at the same time.\n _this.$Component.$events = _.difference(_this.$Component.$events, components);\n _this.$Component.$tasks = _.difference(_this.$Component.$tasks, components);\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_incomplete' }\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n if (Preferences.settings.Calendar.EventsFilterState)\n Component.$queryEvents.filterpopup = Preferences.settings.Calendar.EventsFilterState;\n if (Preferences.settings.Calendar.TasksFilterState)\n Component.$queryTasks.filterpopup = Preferences.settings.Calendar.TasksFilterState;\n if (Preferences.settings.Calendar.EventsSortingState) {\n Component.$queryEvents.sort = Preferences.settings.Calendar.EventsSortingState[0];\n Component.$queryEvents.asc = parseInt(Preferences.settings.Calendar.EventsSortingState[1]);\n }\n if (Preferences.settings.Calendar.TasksSortingState) {\n Component.$queryTasks.sort = Preferences.settings.Calendar.TasksSortingState[0];\n Component.$queryTasks.asc = parseInt(Preferences.settings.Calendar.TasksSortingState[1]);\n }\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 $selectedCount\n * @memberof Component\n * @desc Return the number of events or tasks selected by the user.\n * @returns the number of selected events or tasks\n */\n Component.$selectedCount = function() {\n var count;\n\n count = 0;\n if (Component.$events) {\n count = (_.filter(Component.$events, function(event) { return event.selected; })).length;\n }\n if (Component.$tasks) {\n count = (_.filter(Component.$tasks, function(event) { return event.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Component\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 saveSelectedList\n * @desc Save to the user's settings the currently selected list.\n * @param {string} componentType - either \"events\" or \"tasks\"\n * @returns a promise of the HTTP operation\n */\n Component.saveSelectedList = function(componentType) {\n return this.$$resource.post(null, 'saveSelectedList', { list: componentType + 'ListView' });\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 // TODO: initialize this.repeat.monthdays with month day of start date\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n // TODO: initialize this.repeat.months with month of start date\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 this.selected = false;\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 this.init(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 +{"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","union","$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","$deleteComponents","components","calendars","component","isDefined","c_folder","c_name","uids","$events","difference","$tasks","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","EventsFilterState","TasksFilterState","EventsSortingState","parseInt","TasksSortingState","show_completed","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$selectedCount","count","filter","event","selected","length","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","category","saveSelectedList","componentType","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","nbr","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","addHours","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","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","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$addDueDate","toISOString","$deleteDueDate","$addStartDate","$deleteStartDate","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","hours","minutes","formatDate","getYear","copy","startTime","endTime","dueTime","stringWithSeparator"],"mappings":"CAEA,WACE,YAOA,SAASA,UAASC,oBAGhB,GADAC,KAAKC,KAAKF,oBACNC,KAAKE,OAASF,KAAKG,GAAI,CAEzB,GAAIC,iBAAkBN,SAASO,WAAWC,OAAO,eAAgBN,KAAKE,KACtEK,SAAQC,OAAOR,KAAMI,iBAEnBJ,KAAKG,KACPH,KAAKS,KAAO,GAAIX,UAASY,MAAM,YAAcV,KAAKG,KAStDL,SAASa,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,YAAa,MAAO,SAASC,GAAIC,SAAUC,KAAMC,SAAUC,SAAUC,UAAWC,KAWvJ,MAVAX,SAAQC,OAAOV,UACbc,GAAIA,GACJC,SAAUA,SACVC,KAAMA,KACNT,WAAY,GAAIW,UAASD,SAASI,WAAW,aAAe,WAAYJ,SAASI,cACjFC,WAAYH,UACZP,MAAOQ,IACPC,WAAYJ,SAASI,eAGhBrB,UAOT,KACES,QAAQc,OAAO,oBAEjB,MAAMC,GACJf,QAAQc,OAAO,oBAAqB,gBAEtCd,QAAQc,OAAO,oBACZE,QAAQ,WAAYzB,SAASa,UAOhCb,SAAS0B,KAAO,SAASC,UAEvB,GAAIC,MAAMC,QAASC,CAGjBF,MADED,SAASI,cACJ7B,KAAK8B,cACLL,SAASM,eACT/B,KAAKgC,eAELhC,KAAKiC,WAEdN,QAAUO,EAAEC,KAAKT,KAAM,SAASU,GAC9B,MAAgB,YAARA,EAAEjC,IACsC,IAAxCiC,EAAElC,KAAKmC,cAAcZ,SAASvB,QAExC0B,EAAID,QAAUO,EAAEI,QAAQJ,EAAEK,MAAMb,KAAM,MAAOC,QAAQxB,IAAM,EAC3DuB,KAAKc,OAAOZ,EAAG,EAAGH,WASpB3B,SAAS2C,SAAW,SAASC,MAC3B,GAAIC,OAAQ3C,IAgBZ,OAfI0C,QACF1C,KAAKiC,cACLjC,KAAKgC,kBACLhC,KAAK8B,iBAELvB,QAAQqC,QAAQF,KAAM,SAASN,EAAGR,GAChC,GAAIH,UAAW,GAAI3B,UAASsC,EACxBX,UAASI,cACXc,MAAMb,cAAce,KAAKpB,UAClBA,SAASM,eAChBY,MAAMX,eAAea,KAAKpB,UAE1BkB,MAAMV,WAAWY,KAAKpB,aAGrBS,EAAEY,MAAM9C,KAAKiC,WAAYjC,KAAKgC,eAAgBhC,KAAK8B,gBAS5DhC,SAASiD,KAAO,SAAS5C,IACvB,GAAIsB,SAQJ,OANAA,UAAWS,EAAEC,KAAKrC,SAASmC,WAAY,SAASG,GAAK,MAAOA,GAAEjC,IAAMA,KAC/DsB,WACHA,SAAWS,EAAEC,KAAKrC,SAASkC,eAAgB,SAASI,GAAK,MAAOA,GAAEjC,IAAMA,MACrEsB,WACHA,SAAWS,EAAEC,KAAKrC,SAASgC,cAAe,SAASM,GAAK,MAAOA,GAAEjC,IAAMA,MAElEsB,UAUT3B,SAASkD,WAAa,SAASC,IAAKC,MAClC,GAAIP,OAAQ3C,IACZ,OAAOF,UAASO,WAAW8C,aAAaF,KAAKG,MAAMF,KAAM,aAAaG,KAAK,SAASC,cAClF,GAAI7B,UAAW,GAAI3B,UAASwD,aAM5B,OALKpB,GAAEC,KAAKQ,MAAMX,eAAgB,SAASI,GACzC,MAAOA,GAAEjC,IAAMmD,aAAanD,MAE5BL,SAAS0B,KAAKC,UAETA,YAUX3B,SAASyD,gBAAkB,SAASC,KAClC,GAAIb,OAAQ3C,KACRyD,EAAI3D,SAASc,GAAG8C,OA6BpB,OA3BIxB,GAAEC,KAAKQ,MAAMb,cAAe,SAASM,GACrC,MAAOA,GAAEuB,KAAKC,gBAAkBJ,MAGlCC,EAAEI,SAGF/D,SAASO,WAAWyD,KAAK,KAAM,kBAAoBN,IAAKA,MAAOH,KAAK,SAASC,cAC3E/C,QAAQC,OAAO8C,cACbzB,eAAe,EACfkC,YAAY,EACZC,UAAU,EACVC,MAAOnE,SAASqB,WAAW+C,MAC3BP,MAAQC,eAAgBJ,MAE1B,IAAI/B,UAAW,GAAI3B,UAASwD,aAC5BxD,UAAS0B,KAAKC,UACd3B,SAASO,WAAW+C,MAAM3B,SAAStB,GAAI,UAAUkD,KAAK,SAASX,MAE7D5C,SAASgB,KAAKqD,MAAMC,KAAKC,UAAU3B,KAAM4B,OAAW,MAEtDb,EAAEc,WACD,WACDd,EAAEI,WAICJ,EAAEe,SASX1E,SAAS2E,UAAUxE,KAAO,SAASyC,MACjCnC,QAAQC,OAAOR,KAAM0C,MAErB1C,KAAK0E,QAAU5E,SAASqB,WAAWwD,aAAe3E,KAAKiE,OAASnE,SAASqB,WAAW+C,MACpFlE,KAAK+B,gBAAkB/B,KAAKgE,UAAYhE,KAAKiE,OAASnE,SAASqB,WAAW+C,OAS5EpE,SAAS2E,UAAUG,aAAe,SAASC,MAGzC,MAFItE,SAAQuE,YAAYD,QACtBA,KAAO,MACFA,KAAO,UAAY7E,KAAKG,IAUjCL,SAAS2E,UAAUM,QAAU,SAAS7E,MACpC,GAAI0B,GAAIM,EAAEI,QAAQJ,EAAEK,MAAMzC,SAASmC,WAAY,MAAOjC,KAAKG,GAI3D,OAHAH,MAAKE,KAAOA,KACZJ,SAASmC,WAAWO,OAAOZ,EAAG,GAC9B9B,SAAS0B,KAAKxB,MACPA,KAAKgF,SASdlF,SAAS2E,UAAUQ,QAAU,WAC3B,GAEIvD,MACA8C,QAHA7B,MAAQ3C,KACRyD,EAAI3D,SAASc,GAAG8C,OAuBpB,OAnBI1D,MAAK+B,gBACPyC,QAAU1E,SAASO,WAAW+C,MAAMpD,KAAKG,GAAI,eAC7CuB,KAAO5B,SAASkC,iBAGhBwC,QAAU1E,SAASO,WAAW6E,OAAOlF,KAAKG,IAExCuB,KADE1B,KAAK6B,cACA/B,SAASgC,cAEThC,SAASmC,YAGpBuC,QAAQnB,KAAK,WACX,GAAIzB,GAAIM,EAAEI,QAAQJ,EAAEK,MAAMb,KAAM,MAAOiB,MAAMxC,GAC7CuB,MAAKc,OAAOZ,EAAG,GACf6B,EAAEc,WACD,SAAS7B,KAAMyC,QAChB1B,EAAEI,OAAOnB,QAEJe,EAAEe,SASX1E,SAASsF,kBAAoB,SAASC,YAGpC,GAAIC,cAAgB3C,MAAQ3C,IAE5BkC,GAAEU,QAAQyC,WAAY,SAASE,WACxBhF,QAAQiF,UAAUF,UAAUC,UAAUE,aACzCH,UAAUC,UAAUE,cAEtBH,UAAUC,UAAUE,UAAU5C,KAAK0C,UAAUG,UAG/CxD,EAAEU,QAAQ0C,UAAW,SAASK,KAAMF,UAClC3F,SAASO,WAAWyD,KAAK2B,SAAU,eAAgBE,KAAMA,SAK3DhD,MAAMvB,WAAWwE,QAAU1D,EAAE2D,WAAWlD,MAAMvB,WAAWwE,QAASP,YAClE1C,MAAMvB,WAAW0E,OAAS5D,EAAE2D,WAAWlD,MAAMvB,WAAW0E,OAAQT,aASlEvF,SAAS2E,UAAUO,MAAQ,WACzB,MAAOlF,UAASO,WAAW0F,KAAK/F,KAAKG,GAAIH,KAAKgG,SAAS3C,KAAK,SAASX,MACnE,MAAOA,SAUX5C,SAAS2E,UAAUwB,eAAiB,WAClC,MAAOnG,UAASO,WAAW+C,MAAMpD,KAAKG,IAAKH,KAAKkG,OAAO,GAAG,MAAQ,mBASpEpG,SAAS2E,UAAU0B,cAAgB,SAASC,YAAaC,cACvD,MAAOvG,UAASsB,WAAWkF,MAAMtG,KAAKG,GAAIiG,YAAaC,eASzDvG,SAAS2E,UAAUuB,MAAQ,WACzB,GAAIvE,YAOJ,OANAlB,SAAQqC,QAAQ5C,KAAM,SAASuG,MAAOC,KACzB,eAAPA,KACU,KAAVA,IAAI,KACN/E,SAAS+E,KAAOD,SAGb9E,aCzUX,WACE,YAOA,SAASR,WAAUwF,qBAEjB,GAAwC,kBAA7BA,qBAAoBpD,MAE7B,GADArD,KAAKC,KAAKwG,qBACNzG,KAAK0G,MAAQ1G,KAAKG,GAAI,CAGxB,GAAIwG,kBAAmB1F,UAAUZ,WAAWuG,QAAQ5G,KAAK0G,IACzD1G,MAAK6G,QAAQF,kBACb3G,KAAK8G,OAAQ,OAKf9G,MAAK6G,QAAQJ,qBASjBxF,UAAUN,UAAY,KAAM,WAAY,OAAQ,aAAc,cAAe,WAAY,WAAY,SAASC,GAAIC,SAAUC,KAAMC,SAAUgG,YAAaC,SAAUhG,UAuCjK,MAtCAT,SAAQC,OAAOS,WACbL,GAAIA,GACJC,SAAUA,SACVC,KAAMA,KACNmG,aAAcF,YACdG,UAAWF,SACX3G,WAAY,GAAIW,UAASD,SAASoG,UAAWpG,SAASI,cACtDiG,WAAY,QAEZC,QAAUd,MAAO,GAAIe,OAAQ,2BAE7BC,cAAgBC,KAAM,QAASC,IAAK,EAAGC,YAAa,cAEpDC,aAAeH,KAAM,SAAUC,IAAK,EAAGC,YAAa,qBAEtDX,YAAYa,QAAQvE,KAAK,WAEnB0D,YAAYc,SAAS/H,SAASgI,oBAChC7G,UAAUsG,aAAaG,YAAcX,YAAYc,SAAS/H,SAASgI,mBACjEf,YAAYc,SAAS/H,SAASiI,mBAChC9G,UAAU0G,YAAYD,YAAcX,YAAYc,SAAS/H,SAASiI,kBAChEhB,YAAYc,SAAS/H,SAASkI,qBAChC/G,UAAUsG,aAAaC,KAAOT,YAAYc,SAAS/H,SAASkI,mBAAmB,GAC/E/G,UAAUsG,aAAaE,IAAMQ,SAASlB,YAAYc,SAAS/H,SAASkI,mBAAmB,KAErFjB,YAAYc,SAAS/H,SAASoI,oBAChCjH,UAAU0G,YAAYH,KAAOT,YAAYc,SAAS/H,SAASoI,kBAAkB,GAC7EjH,UAAU0G,YAAYF,IAAMQ,SAASlB,YAAYc,SAAS/H,SAASoI,kBAAkB,KAEvFjH,UAAU0G,YAAYQ,eAAiBF,SAASlB,YAAYc,SAASO,oBAErEnH,UAAUoH,YAActB,YAAYuB,SAASC,6BAEzCxB,YAAYuB,SAASE,iBACvBvH,UAAUmG,WAAaL,YAAYuB,SAASE,kBAIzCvH,WAOT,KACEV,QAAQc,OAAO,oBAEjB,MAAMC,GACJf,QAAQc,OAAO,oBAAqB,gBAEtCd,QAAQc,OAAO,oBACZE,QAAQ,YAAaN,UAAUN,UAQlCM,UAAUwH,eAAiB,WACzB,GAAIC,MASJ,OAPAA,OAAQ,EACJzH,UAAU2E,UACZ8C,MAASxG,EAAEyG,OAAO1H,UAAU2E,QAAS,SAASgD,OAAS,MAAOA,OAAMC,WAAcC,QAEhF7H,UAAU6E,SACZ4C,MAASxG,EAAEyG,OAAO1H,UAAU6E,OAAQ,SAAS8C,OAAS,MAAOA,OAAMC,WAAcC,QAE5EJ,OAWTzH,UAAU8H,QAAU,SAASC,KAAMC,SACjC,GAAItG,OAAQ3C,KACRkJ,IAAM,GAAIC,MACVC,IAAMF,IAAIG,UACVC,MAAQJ,IAAIK,WAAa,EACzBC,KAAON,IAAIO,cACXC,SAAW,SAAWV,KAAKW,aAC3BC,QACER,IAAK,GAAKI,MAAgB,GAARF,MAAW,IAAI,IAAMA,OAAe,GAANF,IAAS,IAAI,IAAMA,IAGzE,OAAOpJ,MAAKiH,aAAaW,QAAQvE,KAAK,WACpC,GAAIoD,qBAEAoD,UADAC,OAAQ,CA8BZ,OA3BAvJ,SAAQC,OAAOmC,MAAM0E,OAAQuC,QAEzBX,SACF/G,EAAE6H,KAAK7H,EAAE8H,KAAKf,SAAU,SAASzC,KAE/BsD,OAAUnH,MAAM0E,OAAOb,MAAQyC,QAAQzC,MAAQvF,UAAUoG,OAAOb,KACrD,UAAPA,KAAmByC,QAAQzC,KAC7BsD,OAAQ,EAEDvJ,QAAQiF,UAAU7C,MAAM0E,OAAOb,MACtC7D,MAAM0E,OAAOb,KAAOyC,QAAQzC,KAE5B7D,MAAM+G,UAAUlD,KAAOyC,QAAQzC,OAKrCC,oBAAsB9D,MAAMtC,WAAW+C,MAAM,KAAM4F,KAAO,OACbzI,QAAQC,OAAOmC,MAAM+G,UAAW/G,MAAM0E,SAGnFwC,UAAqB,SAARb,KAAkB,UAAY,SACvCc,cACK7I,WAAU4I,WACjB5I,UAAUH,KAAKqD,MAAM,mBAAqB0F,YAGrClH,MAAMsH,kBAAkBjB,KAAMvC,wBAYzCxF,UAAUqF,MAAQ,SAAS4D,WAAY9D,YAAa+D,cAClD,GAAI1D,qBAAqBvD,MAAQgH,WAAY9D,YAO7C,OALI+D,eACFjH,KAAKL,KAAKsH,cAEZ1D,oBAAsBzG,KAAKK,WAAW+C,MAAMF,KAAKkH,KAAK,KAAM,QAErD,GAAInJ,WAAUwF,sBASvBxF,UAAUoJ,iBAAmB,SAASC,OACpC,GAAIC,IAAK,GAAIC,QAAOF,MAAO,IAC3B,OAAOpI,GAAEyG,OAAOzG,EAAE8H,KAAK/I,UAAUoH,aAAc,SAASoC,UACtD,MAA8B,IAAvBA,SAASnD,OAAOiD,OAU3BtJ,UAAUyJ,iBAAmB,SAASC,eACpC,MAAO3K,MAAKK,WAAWyD,KAAK,KAAM,oBAAsBpC,KAAMiJ,cAAgB,cAUhF1J,UAAU2J,qBAAuB,SAASC,KAAMC,MAC9C,GAAIC,YAAYC,UAAWC,OAwB3B,OAtBY,OAARJ,MACFE,WAAa,UACbC,UAAYC,QAAUH,MAEP,QAARD,MACPE,WAAa,WACbC,UAAYF,KAAKI,cACjBD,QAAU,GAAI9B,MACd8B,QAAQE,QAAQH,UAAUI,WAC1BH,QAAQI,QAAQ,IAED,SAARR,OACPE,WAAa,YACbC,UAAYF,KACZE,UAAUM,QAAQ,GAClBN,UAAYA,UAAUE,cACtBD,QAAU,GAAI9B,MACd8B,QAAQE,QAAQH,UAAUI,WAC1BH,QAAQM,SAASN,QAAQ1B,WAAa,GACtC0B,QAAQI,QAAQ,IAChBJ,QAAUA,QAAQO,aAEbxL,KAAKyL,cAAcV,WAAYC,UAAWC,UAWnDhK,UAAUwK,cAAgB,SAASZ,KAAMG,UAAWC,SAClD,GAAIrB,QAAQnD,oBAAqB7E,EAC7B8J,SAAWzK,UAAUL,GAAG8C,OAsC5B,OApCAkG,SAAWiB,KAAMA,KAAKc,cAAeC,GAAIZ,UAAUa,eAAgBC,GAAIb,QAAQY,gBAC/E5K,UAAUH,KAAKqD,MAAM,gBAAkBC,KAAKC,UAAUuF,OAAQtF,OAAW,IACzEmC,oBAAsBzG,KAAKK,WAAW+C,MAAM,KAAM,eAAgBwG,QAClEnD,oBAAoBpD,KAAK,SAASX,MAChCzB,UAAUJ,SAAS,WACjB,GAAIwE,eAAiB0G,SAiBrB,KAdA7J,EAAE8J,OAAOtJ,KAAKuJ,OAAQ,SAASC,QAASC,UAAWvK,GACjD,GAAIwK,eAAgBlK,EAAEmK,OAAO3J,KAAK4J,aAAcH,WAC5CI,MAAQ,GAAIpD,MAAiC,IAA5BiD,cAAcI,YAGnC,OAFAJ,eAAcK,KAAOF,MAAMG,gBAC3BR,QAAQrJ,KAAK,GAAI5B,WAAUmL,gBACpBF,SACN7G,YAGHnD,EAAE6H,KAAK7H,EAAEyK,QAAQjK,KAAKqJ,QAAS,SAASa,OACtCA,MAAMrH,UAAYF,WAAWuH,MAAMC,OAIhCjL,EAAI,EAAGA,EAAIc,KAAKqJ,OAAOjD,OAAQlH,IAClCmK,OAAOf,UAAUa,gBAAkBnJ,KAAKqJ,OAAOnK,GAC/CoJ,UAAUK,QAAQ,EAGpBpK,WAAUH,KAAKqD,MAAM,iBAAmBjC,EAAE8H,KAAK+B,QAAQjD,OAAS,KAGhE7H,UAAU6L,QAAUf,OAEpBL,SAASnH,QAAQwH,WAElBL,SAAS7H,QAEL6H,SAASlH,SAUlBvD,UAAUgJ,kBAAoB,SAASjB,KAAMvC,qBAC3C,GACIpB,cAEJ,OAAOoB,qBAAoBpD,KAAK,SAASX,MACvC,MAAOzB,WAAUJ,SAAS,WACxB,GAAIkM,QAAS7K,EAAE8K,OAAOtK,KAAKqK,OAAQ,cAcnC,OAXA7K,GAAE8J,OAAOtJ,KAAKsG,MAAO,SAAS3D,WAAY+G,cAAexK,GACvD,GAAIc,MAAOR,EAAEmK,OAAOU,OAAQX,cAE5B,OADA/G,YAAWxC,KAAK,GAAI5B,WAAUyB,OACvB2C,YACNA,YAEHpE,UAAUH,KAAKqD,MAAM,WAAa6E,KAAO,WAAa3D,WAAWyD,OAAS,KAG1E7H,UAAU,IAAM+H,MAAQ3D,WAEjBA,gBAWbpE,UAAUwD,UAAUxE,KAAO,SAASyC,MAClC,GAAIC,OAAQ3C,IAoCZ,IAlCAA,KAAKiN,cACLjN,KAAKkN,UACLlN,KAAKmN,OAAUC,OAAQ,UAAWC,SAAU,EAAGC,KAAM,UAAWC,UAAW,SAAUC,SAAU,SAC/FxN,KAAKmF,OAAS,gBACd5E,QAAQC,OAAOR,KAAM0C,MAErBzB,UAAUgG,aAAaW,QAAQvE,KAAK,WAClC,GAAI2F,MAAsB,eAAdrG,MAAMqG,KAAwB,SAAW,OAGrDrG,OAAM8K,eAAiB9K,MAAM8K,gBAC3BxM,UAAUgG,aAAaqB,SAAS,eAAiBU,KAAO,yBAAyB2C,gBAGjF3L,KAAKgL,UACPhL,KAAKuM,MAAQ,GAAIpD,MAAKnJ,KAAKgL,UAAU0C,UAAU,EAAE,IAAM,IAAM1N,KAAKgL,UAAU0C,UAAU,GAAG,KACrE,eAAb1N,KAAKgJ,OACZhJ,KAAKuM,MAAQ,GAAIpD,OAIfnJ,KAAKiL,QACPjL,KAAK2N,IAAM,GAAIxE,MAAKnJ,KAAKiL,QAAQyC,UAAU,EAAE,IAAM,IAAM1N,KAAKiL,QAAQyC,UAAU,GAAG,KAC/D,eAAb1N,KAAKgJ,OACZhJ,KAAK2N,IAAM,GAAIxE,MACfnJ,KAAK2N,IAAIC,SAAS,IAIhB5N,KAAK6N,UACP7N,KAAK8N,IAAM,GAAI3E,MAAKnJ,KAAK6N,QAAQH,UAAU,EAAE,IAAM,IAAM1N,KAAK6N,QAAQH,UAAU,GAAG,MAGrF1N,KAAK+N,aAAexN,QAAQiF,UAAU9C,KAAKwK,QACvClN,KAAKkN,OAAOc,KAAM,CACpB,GAAIC,WAAY/L,EAAEC,KAAKnC,KAAKkN,OAAOc,KAAM,SAAS5L,GAChD,MAAO7B,SAAQiF,UAAUpD,EAAE8L,aAEzBD,YAC2B,UAAzBjO,KAAKkN,OAAOiB,YACdnO,KAAKkN,OAAO1D,MAAS4E,OAAO,IAC9BpO,KAAKkN,OAAO5D,OACVN,KAAM,QACNkF,WAAYD,UAAUC,WAAWG,WACjCjF,IAAK6E,UAAU7E,SAInBpJ,MAAKkN,OAAOc,OAEVzN,SAAQuE,YAAY9E,KAAKkN,OAAOiB,aAClCnO,KAAKkN,OAAOiB,UAAY,SACtB5N,QAAQuE,YAAY9E,KAAKkN,OAAOoB,YAClCtO,KAAKkN,OAAOoB,SAAW,GACrB/N,QAAQuE,YAAY9E,KAAKkN,OAAO5D,SAClCtJ,KAAKkN,OAAO5D,OAAU4E,WAAY,IAAK9E,IAAK,KAAMJ,KAAM,eACtDzI,QAAQuE,YAAY9E,KAAKkN,OAAOqB,aAElCvO,KAAKkN,OAAOqB,cACVhO,QAAQuE,YAAY9E,KAAKkN,OAAOsB,UAElCxO,KAAKkN,OAAOsB,WACVjO,QAAQuE,YAAY9E,KAAKkN,OAAO1D,QAClCxJ,KAAKkN,OAAO1D,SACVxJ,KAAKkN,OAAOxE,MACd1I,KAAKkN,OAAOS,IAAM,QACX3N,KAAKkN,OAAOuB,OACnBzO,KAAKkN,OAAOS,IAAM,QAClB3N,KAAKkN,OAAOuB,MAAQzO,KAAKkN,OAAOuB,MAAMf,UAAU,EAAE,IAAIgB,UAGtD1O,KAAKkN,OAAOS,IAAM,QACpB3N,KAAK2O,iBAAmB3O,KAAK4O,kBAEzB5O,KAAK8G,MAEP7F,UAAUgG,aAAaW,QAAQvE,KAAK,WAClC,GAAIwL,QAAUC,EAAG,UAAWC,EAAG,QAASC,EAAG,OAAQC,EAAG,SAClDC,MAAQ,uBAAuBC,KAAKlO,UAAUgG,aAAaqB,SAAS8G,4BACpEF,SACFvM,MAAM0M,WAAY,EAClB1M,MAAMwK,MAAME,SAAWpF,SAASiH,MAAM,IACtCvM,MAAMwK,MAAMG,KAAOuB,MAAMK,MAAM,OAKnClP,KAAKqP,UAAY9O,QAAQiF,UAAU9C,KAAKyK,OAI1CnN,KAAKsP,oBAAsBtP,KAAK0G,IAE5B1G,KAAKuP,WAAavP,KAAKuP,UAAUC,QACnCxP,KAAKuP,UAAUE,OAASxO,UAAUiG,UAAUlH,KAAKuP,UAAUC,MAAO,KAIpExP,KAAK0P,SAAW1P,KAAK2P,yBAEjB3P,KAAK4P,WACP1N,EAAE6H,KAAK/J,KAAK4P,UAAW,SAASC,UAC9BA,SAASC,MAAQ7O,UAAUiG,UAAU2I,SAASL,MAAO,IACrD7M,MAAMoN,eAAeF,YAIzB7P,KAAK6I,UAAW,GASlB5H,UAAUwD,UAAUmK,gBAAkB,WACpC,GAAIoB,GAAIzP,QAAQiF,UAAUxF,KAAKkN,UAC1BlN,KAAKkN,OAAOoB,SAAW,GACvBtO,KAAKkN,OAAOc,MAAQhO,KAAKkN,OAAOc,KAAKlF,OAAS,GAC9C9I,KAAKkN,OAAOqB,WAAavO,KAAKkN,OAAOqB,UAAUzF,OAAS,GACxD9I,KAAKkN,OAAOsB,QAAUxO,KAAKkN,OAAOsB,OAAO1F,OAAS,EACvD,OAAOkH,IAST/O,UAAUwD,UAAUV,WAAa,WAC/B,OAAS/D,KAAKmK,eAAiBnK,KAAKiQ,YAStChP,UAAUwD,UAAUyL,qBAAuB,WACzC,MAAQlQ,MAAKmK,eAAiBnK,KAAKiQ,YASrChP,UAAUwD,UAAU0L,aAAe,WACjC,OAASnQ,KAAKmK,cAAgBnK,KAAKoQ,aASrCnP,UAAUwD,UAAU4L,uBAAyB,WAC3C,MAAQrQ,MAAKmK,cAAgBnK,KAAKoQ,aASpCnP,UAAUwD,UAAUwL,WAAa,WAC/B,MAAQjQ,MAAKiQ,aAAejQ,KAAKoQ,aAUnCnP,UAAUwD,UAAU6L,sBAAwB,WAC1C,MAAQtQ,MAAKuF,UACU,iBAAfvF,KAAKmF,QACU,aAAfnF,KAAKmF,QASflE,UAAUwD,UAAU8L,eAAiB,SAASnH,IAAKqD,KAAM+D,SACvD,GAAIR,GAAKzP,QAAQiF,UAAUxF,KAAK0P,SAAStG,OAChC7I,QAAQiF,UAAUxF,KAAK0P,SAAStG,KAAKqD,QACA,GAArCzM,KAAK0P,SAAStG,KAAKqD,MAAM+D,QAClC,OAAOR,IAST/O,UAAUwD,UAAUkL,uBAAyB,WAC3C,GAAIhN,OAAQ3C,KAAM0P,WAElB,IAAI1P,KAAKuM,OAASvM,KAAK2N,IAAK,CAC1B,GAAI8C,cAAe,GAAItH,MAAKnJ,KAAKuM,MAAMnB,WACnCsF,WAAa,GAAIvH,MAAKnJ,KAAK2N,IAAIvC,WAC/BuF,aAAe1I,SAASwI,aAAaG,aAAa,GAAK,IACvDC,WAAa5I,SAASyI,WAAWE,aAAa,GAAK,GA8BvD,OA7BAH,cAAaK,WAAW,GAAGH,cAC3BD,WAAWI,WAAW,GAAGD,YAEzB3O,EAAE6H,KAAK0G,aAAaM,SAASL,YAAa,SAAS5F,KAAMkG,OACvD,GAEIC,SAFAC,WAAapG,KAAKzB,UAClB8H,OAASrG,KAAKe,cAElB,IAAIsF,QAAUxO,MAAM4J,MAAMV,eAIxB,IAHAoF,QAAUnG,KAAKsG,WAAW/C,WAC1BqB,SAASyB,WACTzB,SAASyB,QAAQF,YACVN,aAAe,GACpBjB,SAASyB,QAAQF,SAASpO,KAAK,GAC/B8N,mBAIF7F,MAAOA,KAAKuG,aACZ3B,SAASyB,UAEX,MAAOrG,KAAKM,UAAYzI,MAAMgL,IAAIvC,WAC3BN,KAAKzB,WAAa6H,YACvBD,QAAUnG,KAAKsG,WAAW/C,WACtB9N,QAAQuE,YAAY4K,SAASyB,QAAQF,YACvCvB,SAASyB,QAAQF,aACnBvB,SAASyB,QAAQF,SAASpO,KAAK,GAC/BiI,KAAKwG,WAAW,MAGb5B,WAUXzO,UAAUwD,UAAUsL,eAAiB,SAASF,UAC5C,GAAIjG,QAAQpG,IAAKwK,IACb6B,UAAS5M,MACX2G,QAEI2H,KAAMvR,KAAKuM,MAAMV,eACjB2F,KAAMxR,KAAK2N,IAAI9B,gBAEnBrI,KAAO,KAAM,KAAMqM,SAAS5M,IAAK,gBACjC+K,KAAO9L,EAAEuP,IAAIzR,KAAKuM,MAAMwE,SAAS/Q,KAAK2N,KAAM,SAASvE,KAAO,MAAOA,KAAIyC,iBAEnEtL,QAAQuE,YAAY+K,SAASH,YAC/BG,SAASH,aAGXzO,UAAUZ,WAAW+C,MAAMI,IAAI4G,KAAK,KAAM,WAAYR,QAAQvG,KAAK,SAASX,MAC1ER,EAAE6H,KAAKiE,KAAM,SAAS5E,KACpB,GAAIqD,KAEAlM,SAAQuE,YAAY+K,SAASH,SAAStG,QACxCyG,SAASH,SAAStG,SAEhB7I,QAAQuE,YAAYpC,KAAK0G,QAC3B1G,KAAK0G,QAEP,KAAK,GAAIxH,GAAI,EAAQ,IAALA,EAASA,IACvB6K,KAAO7K,EAAEyM,WACL3L,KAAK0G,KAAKqD,MACZoD,SAASH,SAAStG,KAAKqD,OACrB/J,KAAK0G,KAAKqD,MAAM,GAChB/J,KAAK0G,KAAKqD,MAAM,IAChB/J,KAAK0G,KAAKqD,MAAM,IAChB/J,KAAK0G,KAAKqD,MAAM,KAGlBoD,SAASH,SAAStG,KAAKqD,OAAS,EAAG,EAAG,EAAG,SAcrDxL,UAAUwD,UAAUG,aAAe,SAASC,MAG1C,MAFItE,SAAQuE,YAAYD,QACtBA,KAAO,MACFA,KAAO,WAAa7E,KAAKsP,qBAAuBtP,KAAKyF,WAS9DxE,UAAUwD,UAAUiN,YAAc,SAASC,MACzC,GAAI9B,SACA8B,QACF9B,UACE3P,KAAMyR,KAAKC,KACXpC,MAAOmC,KAAKE,kBACZC,KAAM,kBACN3M,OAAQ,eACRlC,IAAK0O,KAAKI,OAEP7P,EAAEC,KAAKnC,KAAK4P,UAAW,SAASxN,GACnC,MAAOA,GAAEoN,OAASK,SAASL,UAE3BK,SAASC,MAAQ7O,UAAUiG,UAAU2I,SAASL,MAAO,IACjDxP,KAAK4P,UACP5P,KAAK4P,UAAU/M,KAAKgN,UAEpB7P,KAAK4P,WAAaC,UACpB7P,KAAK+P,eAAeF,aAY1B5O,UAAUwD,UAAUuN,YAAc,SAASL,MACzC,GAAI9B,UAAW3N,EAAEC,KAAKnC,KAAK4P,UAAW,SAASC,UAC7C,MAAO3N,GAAEC,KAAKwP,KAAKM,OAAQ,SAASzC,OAClC,MAAOA,OAAMjJ,OAASsJ,SAASL,SAGnC,OAAOjP,SAAQiF,UAAUqK,WAS3B5O,UAAUwD,UAAUyN,0BAA4B,WAC9C,MAA4B,SAArBlS,KAAKmN,MAAMC,SACfpN,KAAKiQ,YACNjQ,KAAK4P,WAAa5P,KAAK4P,UAAU9G,OAAS,GAU9C7H,UAAUwD,UAAU0N,aAAe,SAASC,WAC1C,GAAI7R,QAAQuE,YAAY9E,KAAKqS,YAC3BrS,KAAKqS,aAAe9L,MAAO6L,gBAExB,CACH,IAAK,GAAIxQ,GAAI,EAAGA,EAAI5B,KAAKqS,WAAWvJ,QAC9B9I,KAAKqS,WAAWzQ,GAAG2E,OAAS6L,UADUxQ,KAKxCA,GAAK5B,KAAKqS,WAAWvJ,QACvB9I,KAAKqS,WAAWxP,MAAM0D,MAAO6L,YAEjC,MAAOpS,MAAKqS,WAAWvJ,OAAS,GASlC7H,UAAUwD,UAAU6N,gBAAkB,SAAStB,OACzCA,MAAQ,IAAMhR,KAAKqS,WAAWvJ,OAASkI,OACzChR,KAAKqS,WAAW7P,OAAOwO,MAAO,IASlC/P,UAAUwD,UAAU8N,YAAc,WAChCvS,KAAK8N,IAAM,GAAI3E,MACfnJ,KAAK6N,QAAU7N,KAAK8N,IAAI0E,eAQ1BvR,UAAUwD,UAAUgO,eAAiB,iBAC5BzS,MAAK8N,KASd7M,UAAUwD,UAAUiO,cAAgB,WAClC1S,KAAKuM,MAAQ,GAAIpD,OASnBlI,UAAUwD,UAAUkO,iBAAmB,iBAC9B3S,MAAKuM,YACLvM,MAAKgL,WAQd/J,UAAUwD,UAAUmO,OAAS,WAC3B,GAAIjQ,OAAQ3C,IACZO,SAAQqC,QAAQ5C,KAAM,SAASuG,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,UACvB7D,OAAM6D,OAGjBxG,KAAKC,KAAKD,KAAK6S,aACf7S,KAAK6S,YAAc7S,KAAKgG,OAAM,IAShC/E,UAAUwD,UAAUqO,OAAS,WAC3B,GAAkBpQ,MAAdC,MAAQ3C,KAAYkD,MAAQlD,KAAK0G,IAAK1G,KAAKG,GAW/C,OATIH,MAAKmK,cACPjH,KAAKL,KAAK7C,KAAKmK,cAEjBzH,MACEqQ,MAAO/S,KAAK+S,MACZC,YAAahT,KAAKgT,YAClB7F,MAAOnN,KAAKqP,UAAWrP,KAAKmN,UAGvBlM,UAAUZ,WAAW0F,KAAK7C,KAAKkH,KAAK,KAAM1H,MAAQ0K,OAAQ,oBAC9D/J,KAAK,SAASX,MAGb,MADAC,OAAMkQ,YAAclQ,MAAMqD,OAAM,GACzBtD,QASbzB,UAAUwD,UAAUO,MAAQ,WAC1B,GAAkBiE,SAAdtG,MAAQ3C,KAAekD,MAAQlD,KAAK0G,IAAK1G,KAAKG,GAQlD,OANIH,MAAK8G,QACPmC,SAAYmE,OAAQ,SAAWpN,KAAKgJ,KAAKW,eAEvC3J,KAAKmK,cACPjH,KAAKL,KAAK7C,KAAKmK,cAEVlJ,UAAUZ,WAAW0F,KAAK7C,KAAKkH,KAAK,KAAMpK,KAAKgG,QAASiD,SAC5D5F,KAAK,SAASX,MAGb,MADAC,OAAMkQ,YAAclQ,MAAMqD,OAAM,GACzBtD,QAUbzB,UAAUwD,UAAUoC,QAAU,SAASJ,qBACrC,GAAI9D,OAAQ3C,IAGZA,MAAKiT,qBAAuBxM,oBAG5BzG,KAAKiT,qBAAqB5P,KAAK,SAASX,MACtCC,MAAM1C,KAAKyC,MAEXC,MAAMkQ,YAAclQ,MAAMqD,SACzB,SAAStD,MACVnC,QAAQC,OAAOmC,MAAOD,MACtBC,MAAMuQ,SAAU,EAChBjS,UAAUH,KAAKqS,MAAMxQ,MAAMwQ,UAU/BlS,UAAUwD,UAAUuB,MAAQ,WA0D1B,QAASoN,YAAWtI,MAClB,GAAIuI,OAAQvI,KAAKsG,UACL,IAARiC,QAAYA,MAAQ,IAAMA,MAE9B,IAAIC,SAAUxI,KAAK8F,YAEnB,OADc,IAAV0C,UAAcA,QAAU,IAAMA,SAC3BD,MAAQ,IAAMC,QAGvB,QAASC,YAAWzI,MAClB,GAAItB,MAAOsB,KAAK0I,SACL,KAAPhK,OAAaA,MAAQ,KAEzB,IAAIF,OAAQ,IAAMwB,KAAKvB,WAAa,EAChB,IAAhBD,MAAMR,SACRQ,MAAQ,IAAMA,MAEhB,IAAIF,KAAM,GAAK0B,KAAKzB,SAIpB,OAHkB,IAAdD,IAAIN,SACNM,IAAM,IAAMA,KAEPI,KAAO,IAAMF,MAAQ,IAAMF,IA9EpC,GAAI7D,aAiFJ,OAhFAhF,SAAQqC,QAAQ5C,KAAM,SAASuG,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,KAC9BjB,UAAUiB,KAAOjG,QAAQkT,KAAKlN,UAKlChB,UAAUyF,UAAYzF,UAAUgH,MAAQgH,WAAWhO,UAAUgH,OAAS,GACtEhH,UAAUmO,UAAYnO,UAAUgH,MAAQ6G,WAAW7N,UAAUgH,OAAS,GACtEhH,UAAU0F,QAAU1F,UAAUoI,IAAM4F,WAAWhO,UAAUoI,KAAO,GAChEpI,UAAUoO,QAAUpO,UAAUoI,IAAMyF,WAAW7N,UAAUoI,KAAO,GAChEpI,UAAUsI,QAAUtI,UAAUuI,IAAMyF,WAAWhO,UAAUuI,KAAO,GAChEvI,UAAUqO,QAAUrO,UAAUuI,IAAMsF,WAAW7N,UAAUuI,KAAO,GAG5D9N,KAAK2O,iBACsB,WAAzB3O,KAAKkN,OAAOiB,WAA0BnO,KAAKkN,OAAO5D,MAAMN,MAAkC,SAA1BhJ,KAAKkN,OAAO5D,MAAMN,MACzD,UAAzBhJ,KAAKkN,OAAOiB,WAAyBnO,KAAKkN,OAAO1D,KAAK4E,aAEjD7I,WAAU2H,OAAOqB,UACxBhJ,UAAU2H,OAAOc,OAAU5E,IAAKpJ,KAAKkN,OAAO5D,MAAMF,IAAK8E,WAAYlO,KAAKkN,OAAO5D,MAAM4E,WAAWG,cAEzFrO,KAAKkN,OAAO5D,MAAMN,YAElBzD,WAAU2H,OAAOc,KAGnBhO,KAAKkN,OAAOiB,YACnB5I,UAAU2H,QAAWiB,UAAWnO,KAAKkN,OAAOiB,YAE1CnO,KAAKkN,OAAOiB,UACS,SAAnBnO,KAAKkN,OAAOS,KAAkB3N,KAAKkN,OAAOuB,MAC5ClJ,UAAU2H,OAAOuB,MAAQzO,KAAKkN,OAAOuB,MAAMoF,oBAAoB,KACrC,SAAnB7T,KAAKkN,OAAOS,KAAkB3N,KAAKkN,OAAOxE,MACjDnD,UAAU2H,OAAOxE,MAAQ1I,KAAKkN,OAAOxE,aAE9BnD,WAAU2H,OAAOuB,YACjBlJ,WAAU2H,OAAOxE,aAInBnD,WAAU2H,OAGflN,KAAKqP,WACHrP,KAAKmN,MAAMC,QAA+B,SAArBpN,KAAKmN,MAAMC,QAC9BpN,KAAK4P,WAAa5P,KAAK4P,UAAU9G,OAAS,IAE9C9I,KAAKmN,MAAMyC,UAAY,EACvB5P,KAAKmN,MAAMoC,UAAY,GAIzBhK,UAAU4H,SA2BL5H","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 _.union(this.$calendars, this.$subscriptions, this.$webcalendars);\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 $deleteComponents\n * @memberof Calendar\n * @desc Delete multiple components from calendar.\n * @return a promise of the HTTP operation\n */\n Calendar.$deleteComponents = function(components) {\n\n // We create a c_folder -> event hash\n var calendars = {}, _this = this;\n\n _.forEach(components, function(component) {\n if (!angular.isDefined(calendars[component.c_folder]))\n calendars[component.c_folder] = [];\n\n calendars[component.c_folder].push(component.c_name);\n });\n\n _.forEach(calendars, function(uids, c_folder) {\n Calendar.$$resource.post(c_folder, 'batchDelete', {uids: uids});\n });\n\n // We slice both arrays - might be useful if in the future, we can delete\n // events and tasks at the same time.\n _this.$Component.$events = _.difference(_this.$Component.$events, components);\n _this.$Component.$tasks = _.difference(_this.$Component.$tasks, components);\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_incomplete' }\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n if (Preferences.settings.Calendar.EventsFilterState)\n Component.$queryEvents.filterpopup = Preferences.settings.Calendar.EventsFilterState;\n if (Preferences.settings.Calendar.TasksFilterState)\n Component.$queryTasks.filterpopup = Preferences.settings.Calendar.TasksFilterState;\n if (Preferences.settings.Calendar.EventsSortingState) {\n Component.$queryEvents.sort = Preferences.settings.Calendar.EventsSortingState[0];\n Component.$queryEvents.asc = parseInt(Preferences.settings.Calendar.EventsSortingState[1]);\n }\n if (Preferences.settings.Calendar.TasksSortingState) {\n Component.$queryTasks.sort = Preferences.settings.Calendar.TasksSortingState[0];\n Component.$queryTasks.asc = parseInt(Preferences.settings.Calendar.TasksSortingState[1]);\n }\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 $selectedCount\n * @memberof Component\n * @desc Return the number of events or tasks selected by the user.\n * @returns the number of selected events or tasks\n */\n Component.$selectedCount = function() {\n var count;\n\n count = 0;\n if (Component.$events) {\n count = (_.filter(Component.$events, function(event) { return event.selected; })).length;\n }\n if (Component.$tasks) {\n count = (_.filter(Component.$tasks, function(event) { return event.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Component\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 saveSelectedList\n * @desc Save to the user's settings the currently selected list.\n * @param {string} componentType - either \"events\" or \"tasks\"\n * @returns a promise of the HTTP operation\n */\n Component.saveSelectedList = function(componentType) {\n return this.$$resource.post(null, 'saveSelectedList', { list: componentType + 'ListView' });\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 else if (this.type == 'appointment') {\n this.start = new Date();\n //this.startDate = this.start.toISOString();\n }\n\n if (this.endDate)\n this.end = new Date(this.endDate.substring(0,10) + ' ' + this.endDate.substring(11,16));\n else if (this.type == 'appointment') {\n this.end = new Date();\n this.end.addHours(1);\n //this.endDate = this.end.toISOString();\n }\n\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 // TODO: initialize this.repeat.monthdays with month day of start date\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n // TODO: initialize this.repeat.months with month of start date\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 this.selected = false;\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 $addDueDate\n * @memberof Component.prototype\n * @desc Add a due date\n */\n Component.prototype.$addDueDate = function() {\n this.due = new Date();\n this.dueDate = this.due.toISOString();\n };\n\n /**\n * @function $deleteDueDate\n * @memberof Component.prototype\n * @desc Delete a due date\n */\n Component.prototype.$deleteDueDate = function() {\n delete this.due;\n //delete this.dueDate;\n };\n\n /**\n * @function $addStartDate\n * @memberof Component.prototype\n * @desc Add a start date\n */\n Component.prototype.$addStartDate = function() {\n this.start = new Date();\n //this.startDate = this.due.toISOString();\n };\n\n /**\n * @function $deleteStartDate\n * @memberof Component.prototype\n * @desc Delete a start date\n */\n Component.prototype.$deleteStartDate = function() {\n delete this.start;\n delete this.startDate;\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 this.init(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 dates and times\n component.startDate = component.start ? formatDate(component.start) : '';\n component.startTime = component.start ? formatTime(component.start) : '';\n component.endDate = component.end ? formatDate(component.end) : '';\n component.endTime = component.end ? formatTime(component.end) : '';\n component.dueDate = component.due ? formatDate(component.due) : '';\n component.dueTime = component.due ? formatTime(component.due) : '';\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(date) {\n var hours = date.getHours();\n if (hours < 10) hours = '0' + hours;\n\n var minutes = date.getMinutes();\n if (minutes < 10) minutes = '0' + minutes;\n return hours + ':' + minutes;\n }\n\n function formatDate(date) {\n var year = date.getYear();\n if (year < 1000) year += 1900;\n\n var month = '' + (date.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n\n var day = '' + date.getDate();\n if (day.length == 1)\n day = '0' + day;\n\n return year + '-' + month + '-' + day;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/vendor/angular-material.js b/UI/WebServerResources/js/vendor/angular-material.js index d41c03a66..e7f616120 100644 --- a/UI/WebServerResources/js/vendor/angular-material.js +++ b/UI/WebServerResources/js/vendor/angular-material.js @@ -2,7 +2,7 @@ * Angular Material Design * https://github.com/angular/material * @license MIT - * v0.10.1-master-e4ca61f + * v0.10.1-master-e26a275 */ (function( window, angular, undefined ){ "use strict"; @@ -2632,7 +2632,6 @@ function InterimElementProvider() { "use strict"; (function () { - 'use strict'; /** @@ -2674,131 +2673,175 @@ function InterimElementProvider() { * } * ``` */ - angular.module('material.layout', [ ]) + angular.module('material.layout', [ 'ng' ]) // Attribute directives with optional value(s) - .directive('layout' , attribute_withValue('layout' , true) ) - .directive('layoutSm' , attribute_withValue('layout-sm' , true) ) - .directive('layoutGtSm' , attribute_withValue('layout-gt-sm', true) ) - .directive('layoutMd' , attribute_withValue('layout-md' , true) ) - .directive('layoutGtMd' , attribute_withValue('layout-gt-md', true) ) - .directive('layoutLg' , attribute_withValue('layout-lg' , true) ) - .directive('layoutGtLg' , attribute_withValue('layout-gt-lg', true) ) + .directive('layout' , attributeWithObserve('layout' , true) ) + .directive('layoutSm' , attributeWithObserve('layout-sm' , true) ) + .directive('layoutGtSm' , attributeWithObserve('layout-gt-sm', true) ) + .directive('layoutLtMd' , warnAttrNotSupported('layout-lt-md',true) ) + .directive('layoutMd' , attributeWithObserve('layout-md' , true) ) + .directive('layoutGtMd' , attributeWithObserve('layout-gt-md', true) ) + .directive('layoutLtLg' , warnAttrNotSupported('layout-lt-lg',true) ) + .directive('layoutLg' , attributeWithObserve('layout-lg' , true) ) + .directive('layoutGtLg' , attributeWithObserve('layout-gt-lg', true) ) - .directive('flex' , attribute_withValue('flex' , true) ) - .directive('flexSm' , attribute_withValue('flex-sm' , true) ) - .directive('flexGtSm' , attribute_withValue('flex-gt-sm' , true) ) - .directive('flexMd' , attribute_withValue('flex-md' , true) ) - .directive('flexGtMd' , attribute_withValue('flex-gt-md' , true) ) - .directive('flexLg' , attribute_withValue('flex-lg' , true) ) - .directive('flexGtLg' , attribute_withValue('flex-gt-lg' , true) ) + .directive('flex' , attributeWithObserve('flex' , true) ) + .directive('flexSm' , attributeWithObserve('flex-sm' , true) ) + .directive('flexGtSm' , attributeWithObserve('flex-gt-sm' , true) ) + .directive('flexLtMd' , warnAttrNotSupported('flex-lt-md' ,true) ) + .directive('flexMd' , attributeWithObserve('flex-md' , true) ) + .directive('flexGtMd' , attributeWithObserve('flex-gt-md' , true) ) + .directive('flexLtLg' , warnAttrNotSupported('flex-lt-lg' ,true) ) + .directive('flexLg' , attributeWithObserve('flex-lg' , true) ) + .directive('flexGtLg' , attributeWithObserve('flex-gt-lg' , true) ) // Attribute directives with optional value(s) but directiveName is NOT added as a class - .directive('layoutAlign' , attribute_withValue('layout-align') ) - .directive('layoutAlignSm' , attribute_withValue('layout-align-sm') ) - .directive('layoutAlignGtSm' , attribute_withValue('layout-align-gt-sm') ) - .directive('layoutAlignMd' , attribute_withValue('layout-align-md') ) - .directive('layoutAlignGtMd' , attribute_withValue('layout-align-gt-md') ) - .directive('layoutAlignLg' , attribute_withValue('layout-align-lg') ) - .directive('layoutAlignGtLg' , attribute_withValue('layout-align-gt-lg') ) + .directive('layoutAlign' , attributeWithObserve('layout-align') ) + .directive('layoutAlignSm' , attributeWithObserve('layout-align-sm') ) + .directive('layoutAlignGtSm' , attributeWithObserve('layout-align-gt-sm') ) + .directive('layoutAlignLtMd' , warnAttrNotSupported('layout-align-lt-md') ) + .directive('layoutAlignMd' , attributeWithObserve('layout-align-md') ) + .directive('layoutAlignGtMd' , attributeWithObserve('layout-align-gt-md') ) + .directive('layoutAlignLtLg' , warnAttrNotSupported('layout-align-lt-lg') ) + .directive('layoutAlignLg' , attributeWithObserve('layout-align-lg') ) + .directive('layoutAlignGtLg' , attributeWithObserve('layout-align-gt-lg') ) - .directive('flexOrder' , attribute_withValue('flex-order') ) - .directive('flexOrderSm' , attribute_withValue('flex-order-sm') ) - .directive('flexOrderGtSm' , attribute_withValue('flex-order-gt-sm') ) - .directive('flexOrderMd' , attribute_withValue('flex-order-md') ) - .directive('flexOrderGtMd' , attribute_withValue('flex-order-gt-md') ) - .directive('flexOrderLg' , attribute_withValue('flex-order-lg') ) - .directive('flexOrderGtLg' , attribute_withValue('flex-order-gt-lg') ) + .directive('flexOrder' , attributeWithObserve('flex-order') ) + .directive('flexOrderSm' , attributeWithObserve('flex-order-sm') ) + .directive('flexOrderGtSm' , attributeWithObserve('flex-order-gt-sm') ) + .directive('flexOrderLtMd' , warnAttrNotSupported('flex-order-lt-md') ) + .directive('flexOrderMd' , attributeWithObserve('flex-order-md') ) + .directive('flexOrderGtMd' , attributeWithObserve('flex-order-gt-md') ) + .directive('flexOrderLtLg' , warnAttrNotSupported('flex-order-lt-lg') ) + .directive('flexOrderLg' , attributeWithObserve('flex-order-lg') ) + .directive('flexOrderGtLg' , attributeWithObserve('flex-order-gt-lg') ) - .directive('offset' , attribute_withValue('offset') ) - .directive('offsetSm' , attribute_withValue('offset-sm') ) - .directive('offsetGtSm' , attribute_withValue('offset-gt-sm') ) - .directive('offsetMd' , attribute_withValue('offset-md') ) - .directive('offsetGtMd' , attribute_withValue('offset-gt-md') ) - .directive('offsetLg' , attribute_withValue('offset-lg') ) - .directive('offsetGtLg' , attribute_withValue('offset-gt-lg') ) + .directive('offset' , attributeWithObserve('offset') ) + .directive('offsetSm' , attributeWithObserve('offset-sm') ) + .directive('offsetGtSm' , attributeWithObserve('offset-gt-sm') ) + .directive('offsetLtMd' , warnAttrNotSupported('offset-lt-md') ) + .directive('offsetMd' , attributeWithObserve('offset-md') ) + .directive('offsetGtMd' , attributeWithObserve('offset-gt-md') ) + .directive('offsetLtLg' , warnAttrNotSupported('offset-lt-lg') ) + .directive('offsetLg' , attributeWithObserve('offset-lg') ) + .directive('offsetGtLg' , attributeWithObserve('offset-gt-lg') ) - // Attribute directives with no value(s ) + // Attribute directives with no value(s) - .directive('layoutMargin' , attribute_noValue('layout-margin') ) - .directive('layoutPadding' , attribute_noValue('layout-padding') ) - .directive('layoutWrap' , attribute_noValue('layout-wrap') ) - .directive('layoutFill' , attribute_noValue('layout-fill') ) + .directive('layoutMargin' , attributeWithoutValue('layout-margin') ) + .directive('layoutPadding' , attributeWithoutValue('layout-padding') ) + .directive('layoutWrap' , attributeWithoutValue('layout-wrap') ) + .directive('layoutFill' , attributeWithoutValue('layout-fill') ) - .directive('hide' , attribute_noValue('hide') ) - .directive('hideSm' , attribute_noValue('hide-sm') ) - .directive('hideGtSm' , attribute_noValue('hide-gt-sm') ) - .directive('hideMd' , attribute_noValue('hide-md') ) - .directive('hideGtMd' , attribute_noValue('hide-gt-md') ) - .directive('hideLg' , attribute_noValue('hide-lg') ) - .directive('hideGtLg' , attribute_noValue('hide-gt-lg') ) - .directive('show' , attribute_noValue('show') ) - .directive('showSm' , attribute_noValue('show-sm') ) - .directive('showGtSm' , attribute_noValue('show-gt-sm') ) - .directive('showMd' , attribute_noValue('show-md') ) - .directive('showGtMd' , attribute_noValue('show-gt-md') ) - .directive('showLg' , attribute_noValue('show-lg') ) - .directive('showGtLg' , attribute_noValue('show-gt-lg') ); + .directive('hide' , attributeWithoutValue('hide') ) + .directive('hideSm' , attributeWithoutValue('hide-sm') ) + .directive('hideGtSm' , attributeWithoutValue('hide-gt-sm') ) + .directive('hideLtMd' , warnAttrNotSupported ('hide-lt-md') ) + .directive('hideMd' , attributeWithoutValue('hide-md') ) + .directive('hideGtMd' , attributeWithoutValue('hide-gt-md') ) + .directive('hideLtLg' , warnAttrNotSupported ('hide-lt-lg') ) + .directive('hideLg' , attributeWithoutValue('hide-lg') ) + .directive('hideGtLg' , attributeWithoutValue('hide-gt-lg') ) + .directive('show' , attributeWithoutValue('show') ) + .directive('showSm' , attributeWithoutValue('show-sm') ) + .directive('showGtSm' , attributeWithoutValue('show-gt-sm') ) + .directive('showLtMd' , warnAttrNotSupported ('show-lt-md') ) + .directive('showMd' , attributeWithoutValue('show-md') ) + .directive('showGtMd' , attributeWithoutValue('show-gt-md') ) + .directive('showLtLg' , warnAttrNotSupported ('show-lt-lg') ) + .directive('showLg' , attributeWithoutValue('show-lg') ) + .directive('showGtLg' , attributeWithoutValue('show-gt-lg') ); /** - * Creates a registration function with for ngMaterial Layout attribute directive - * - * Note: This provides easy translation to switch ngMaterial - * attribute selectors to CLASS selectors and directives. - * - * !! This is important for IE Browser performance - * - * @param classname String attribute name; eg `layout-gt-md` with value ="row" - * @param addDirectiveAsClass Boolean + * These functions create registration functions for ngMaterial Layout attribute directives + * This provides easy translation to switch ngMaterial attribute selectors to + * CLASS selectors and directives; which has huge performance implications + * for IE Browsers */ - function attribute_withValue(className, addDirectiveAsClass) { - return [function() { - return { - compile : function (element, attr) { - attributeValueToClass(null, element, attr); - // !! use for postLink to account for transforms after ng-transclude - return attributeValueToClass; - } - }; - }]; + /** + * Creates a directive registration function where a possbile dynamic attribute value will + * be observed/watched. + * @param {string} className attribute name; eg `md-layout-gt-md` with value ="row" + * @param {boolean=} addDirectiveAsClass + */ + function attributeWithObserve(className, addDirectiveAsClass) { + return function() { + return { + compile: function(element, attr) { + attributeValueToClass(null, element, attr); - /** - * Add as transformed class selector(s), then - * remove the deprecated attribute selector - */ - function attributeValueToClass(scope, element, attr) { - var directive = attr.$normalize(className); + // Use for postLink to account for transforms after ng-transclude. + return attributeValueToClass; + } + }; + }; - // Add transformed class selector(s) - if (addDirectiveAsClass) element.addClass(className); - if (attr[directive]) - element.addClass(className + "-" + attr[directive].replace(/\s+/g, "-")); + /** + * Add as transformed class selector(s), then + * remove the deprecated attribute selector + */ + function attributeValueToClass(scope, element, attr) { + var directive = attr.$normalize(className); - try { - element.removeAttr(className); - } catch(e) { } + // Add transformed class selector(s) + if (addDirectiveAsClass) { + element.addClass(className); } + + if (attr[directive]) { + element.addClass(className + "-" + attr[directive].replace(/\s+/g, "-")); + } + + if ( scope ) { + /** + * After link-phase, do NOT remove deprecated layout attribute selector. + * Instead watch the attribute so interpolated data-bindings to layout + * selectors will continue to be supported. + * + * $observe the className and update with new class (after removing the last one) + * + * e.g. `layout="{{layoutDemo.direction}}"` will update... + */ + var lastClass; + + attr.$observe(function() { + + return attr[className]; + + }, function(newVal) { + + element.removeClass(lastClass); + + lastClass = className + "-" + String(newVal).replace(/\s+/g, "-"); + + element.addClass(lastClass); + + }); + + } + + } } /** - * Creates a registration function with for ngMaterial Layout attribute directive - * - * Simple transpose of attribute usage to class usage + * Creates a registration function with for ngMaterial Layout attribute directive. + * This is a `simple` transpose of attribute usage to class usage */ - function attribute_noValue(className) { - return [function() { - return { - compile : function (element, attr) { - attributeToClass(null, element); + function attributeWithoutValue(className) { + return function() { + return { + compile: function(element, attr) { + attributeToClass(null, element); - // !! use for postLink to account for transforms after ng-transclude - return attributeToClass; - } - }; - }]; + // Use for postLink to account for transforms after ng-transclude. + return attributeToClass; + } + }; + }; /** * Add as transformed class selector, then @@ -2806,12 +2849,27 @@ function InterimElementProvider() { */ function attributeToClass(scope, element) { element.addClass(className); - try { + + if ( scope ) { + // After link-phase, remove deprecated layout attribute selector element.removeAttr(className); - } catch(e) { } + } } } + /** + * Provide console warning that this layout attribute has been deprecated + */ + function warnAttrNotSupported(className) { + var parts = className.split("-"); + + return ["$log", function($log) { + $log.warn( className + "has been deprecated. Please use a `" + parts[0] + "-gt-` variant."); + return angular.noop; + }]; + + } + })(); })(); @@ -3776,9 +3834,9 @@ angular.module('material.core.theming', ['material.core.theming.palette']) .run(generateThemes); /** - * @ngdoc provider + * @ngdoc service * @name $mdThemingProvider - * @module material.core + * @module material.core.theming * * @description Provider to configure the `$mdTheming` service. */ @@ -5125,10 +5183,11 @@ angular * @description * BottomSheet */ -angular.module('material.components.bottomSheet', [ - 'material.core', - 'material.components.backdrop' -]) +angular + .module('material.components.bottomSheet', [ + 'material.core', + 'material.components.backdrop' + ]) .directive('mdBottomSheet', MdBottomSheetDirective) .provider('$mdBottomSheet', MdBottomSheetProvider); @@ -5282,7 +5341,7 @@ function MdBottomSheetProvider($$interimElementProvider) { $mdTheming.inherit(bottomSheet.element, options.parent); if (options.disableParentScroll) { - options.restoreScroll = $mdUtil.disableScrollAround(options.parent); + options.restoreScroll = $mdUtil.disableScrollAround(bottomSheet.element, options.parent); } return $animate.enter(bottomSheet.element, options.parent) @@ -11339,9 +11398,9 @@ var SELECT_EDGE_MARGIN = 8; var selectNextId = 0; angular.module('material.components.select', [ - 'material.core', - 'material.components.backdrop' -]) + 'material.core', + 'material.components.backdrop' + ]) .directive('mdSelect', SelectDirective) .directive('mdSelectMenu', SelectMenuDirective) .directive('mdOption', OptionDirective) @@ -12668,7 +12727,8 @@ SelectProvider.$inject = ["$$interimElementProvider"]; * @description * A Sidenav QP component. */ -angular.module('material.components.sidenav', [ +angular + .module('material.components.sidenav', [ 'material.core', 'material.components.backdrop' ]) @@ -12679,7 +12739,6 @@ angular.module('material.components.sidenav', [ /** - * @private * @ngdoc service * @name $mdSidenav * @module material.components.sidenav @@ -13478,21 +13537,21 @@ SliderDirective.$inject = ["$$rAF", "$window", "$mdAria", "$mdUtil", "$mdConstan (function(){ "use strict"; -/* +/** * @ngdoc module * @name material.components.sticky * @description - * * Sticky effects for md + * */ - -angular.module('material.components.sticky', [ - 'material.core', - 'material.components.content' -]) +angular + .module('material.components.sticky', [ + 'material.core', + 'material.components.content' + ]) .factory('$mdSticky', MdSticky); -/* +/** * @ngdoc service * @name $mdSticky * @module material.components.sticky @@ -13507,7 +13566,6 @@ angular.module('material.components.sticky', [ * when the user starts scrolling past the original element. * If not provided, it will use the result of `element.clone()`. */ - function MdSticky($document, $mdConstant, $$rAF, $mdUtil) { var browserStickySupport = checkStickySupport(); @@ -13614,7 +13672,6 @@ function MdSticky($document, $mdConstant, $$rAF, $mdUtil) { setCurrentItem(item); } - /*************** * Private ***************/ @@ -13639,7 +13696,6 @@ function MdSticky($document, $mdConstant, $$rAF, $mdUtil) { } } - // As we scroll, push in and select the correct sticky element. function onScroll() { var scrollTop = contentEl.prop('scrollTop'); @@ -13687,7 +13743,7 @@ function MdSticky($document, $mdConstant, $$rAF, $mdUtil) { } // If the next item is close to the current one, pull the current one down into view - if (self.next && scrollTop >= self.next.top - self.current.height) { + if (self.next && self.current && (scrollTop >= (self.next.top - self.current.height))) { translate(self.current, scrollTop + (self.next.top - scrollTop - self.current.height)); return; } @@ -13700,55 +13756,55 @@ function MdSticky($document, $mdConstant, $$rAF, $mdUtil) { translate(self.current, scrollTop); } } - - function setCurrentItem(item) { - if (self.current === item) return; - // Deactivate currently active item - if (self.current) { - translate(self.current, null); - setStickyState(self.current, null); - } - // Activate new item if given - if (item) { - setStickyState(item, 'active'); - } + function setCurrentItem(item) { + if (self.current === item) return; + // Deactivate currently active item + if (self.current) { + translate(self.current, null); + setStickyState(self.current, null); + } - self.current = item; - var index = self.items.indexOf(item); - // If index === -1, index + 1 = 0. It works out. - self.next = self.items[index + 1]; - self.prev = self.items[index - 1]; - setStickyState(self.next, 'next'); - setStickyState(self.prev, 'prev'); - } + // Activate new item if given + if (item) { + setStickyState(item, 'active'); + } - function setStickyState(item, state) { - if (!item || item.state === state) return; - if (item.state) { - item.clone.attr('sticky-prev-state', item.state); - item.element.attr('sticky-prev-state', item.state); - } - item.clone.attr('sticky-state', state); - item.element.attr('sticky-state', state); - item.state = state; - } + self.current = item; + var index = self.items.indexOf(item); + // If index === -1, index + 1 = 0. It works out. + self.next = self.items[index + 1]; + self.prev = self.items[index - 1]; + setStickyState(self.next, 'next'); + setStickyState(self.prev, 'prev'); + } - function translate(item, amount) { - if (!item) return; - if (amount === null || amount === undefined) { - if (item.translateY) { - item.translateY = null; - item.clone.css($mdConstant.CSS.TRANSFORM, ''); - } - } else { - item.translateY = amount; - item.clone.css( - $mdConstant.CSS.TRANSFORM, - 'translate3d(' + item.left + 'px,' + amount + 'px,0)' - ); - } - } + function setStickyState(item, state) { + if (!item || item.state === state) return; + if (item.state) { + item.clone.attr('sticky-prev-state', item.state); + item.element.attr('sticky-prev-state', item.state); + } + item.clone.attr('sticky-state', state); + item.element.attr('sticky-state', state); + item.state = state; + } + + function translate(item, amount) { + if (!item) return; + if (amount === null || amount === undefined) { + if (item.translateY) { + item.translateY = null; + item.clone.css($mdConstant.CSS.TRANSFORM, ''); + } + } else { + item.translateY = amount; + item.clone.css( + $mdConstant.CSS.TRANSFORM, + 'translate3d(' + item.left + 'px,' + amount + 'px,0)' + ); + } + } } // Function to check for browser sticky support @@ -13824,10 +13880,11 @@ MdSticky.$inject = ["$document", "$mdConstant", "$$rAF", "$mdUtil"]; * > To improve the visual grouping of content, use the system color for your subheaders. * */ -angular.module('material.components.subheader', [ - 'material.core', - 'material.components.sticky' -]) +angular + .module('material.components.subheader', [ + 'material.core', + 'material.components.sticky' + ]) .directive('mdSubheader', MdSubheaderDirective); /** @@ -20230,7 +20287,7 @@ angular * @ngInject */ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipple, - $mdUtil, $animate, $attrs, $compile, $mdTheming) { + $mdUtil, $animateCss, $attrs, $compile, $mdTheming) { // define private properties var ctrl = this, locked = false, @@ -20859,17 +20916,41 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp newHeight = contentHeight + tabsHeight, currentHeight = $element.prop('clientHeight'); if (currentHeight === newHeight) return; + + // Lock during animation so the user can't change tabs locked = true; - $animate - .animate( - $element, - { height: currentHeight + 'px' }, - { height: newHeight + 'px' } - ) - .then(function () { - $element.css('height', ''); - locked = false; - }); + + var fromHeight = { height: currentHeight + 'px'}, + toHeight = { height: newHeight + 'px' }; + + // Set the height to the current, specific pixel height to fix a bug on iOS where the height + // first animates to 0, then back to the proper height causing a visual glitch + $element.css(fromHeight); + + // Animate the height from the old to the new + $animateCss($element, { + from: fromHeight, + to: toHeight, + easing: 'cubic-bezier(0.35, 0, 0.25, 1)', + duration: 0.5 + }).start().done(function () { + // Then (to fix the same iOS issue as above), disable transitions and remove the specific + // pixel height so the height can size with browser width/content changes, etc. + $element.css({ + transition: 'none', + height: '' + }); + + // In the next tick, re-allow transitions (if we do it all at once, $element.css is "smart" + // enough to batch it for us instead of doing it immediately, which undoes the original + // transition: none) + $mdUtil.nextTick(function() { + $element.css('transition', ''); + }); + + // And unlock so tab changes can occur + locked = false; + }); } /** @@ -20938,7 +21019,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp $mdTabInkRipple.attach(scope, element, options); } } -MdTabsController.$inject = ["$scope", "$element", "$window", "$mdConstant", "$mdTabInkRipple", "$mdUtil", "$animate", "$attrs", "$compile", "$mdTheming"]; +MdTabsController.$inject = ["$scope", "$element", "$window", "$mdConstant", "$mdTabInkRipple", "$mdUtil", "$animateCss", "$attrs", "$compile", "$mdTheming"]; })(); (function(){ diff --git a/UI/WebServerResources/js/vendor/angular-material.min.js b/UI/WebServerResources/js/vendor/angular-material.min.js index 7c54a4a37..717a6db70 100644 --- a/UI/WebServerResources/js/vendor/angular-material.min.js +++ b/UI/WebServerResources/js/vendor/angular-material.min.js @@ -2,14 +2,13 @@ * Angular Material Design * https://github.com/angular/material * @license MIT - * v0.10.1-master-e4ca61f + * v0.10.1-master-e26a275 */ -!function(e,t,n){"use strict";!function(){t.module("ngMaterial",["ng","ngAnimate","ngAria","material.core","material.core.gestures","material.layout","material.core.theming.palette","material.core.theming","material.animate","material.components.autocomplete","material.components.backdrop","material.components.bottomSheet","material.components.button","material.components.card","material.components.checkbox","material.components.chips","material.components.content","material.components.datepicker","material.components.dialog","material.components.divider","material.components.fabActions","material.components.fabShared","material.components.fabSpeedDial","material.components.fabToolbar","material.components.fabTrigger","material.components.gridList","material.components.icon","material.components.input","material.components.list","material.components.menu","material.components.menuBar","material.components.progressCircular","material.components.progressLinear","material.components.radioButton","material.components.select","material.components.sidenav","material.components.slider","material.components.sticky","material.components.subheader","material.components.swipe","material.components.switch","material.components.tabs","material.components.toast","material.components.toolbar","material.components.tooltip","material.components.virtualRepeat","material.components.whiteframe"])}(),function(){function e(e,t){e.decorator("$$rAF",["$delegate",o]),t.theme("default").primaryPalette("indigo").accentPalette("pink").warnPalette("red").backgroundPalette("grey")}function n(e){return{restrict:"A",scope:{template:"=mdTemplate"},link:function(t,n){function o(o){n.html(o),e(n.contents())(t)}t.$watch("template",o)}}}function o(e){return e.throttle=function(t){var n,o,r,i;return function(){n=arguments,i=this,r=t,o||(o=!0,e(function(){r.apply(i,Array.prototype.slice.call(n)),o=!1}))}},e}t.module("material.core",["ngAnimate","material.animate","material.layout","material.core.gestures","material.core.theming"]).directive("mdTemplate",n).config(e),e.$inject=["$provide","$mdThemingProvider"],n.$inject=["$compile"]}(),function(){function e(e){function t(e){return n?"webkit"+e.charAt(0).toUpperCase()+e.substring(1):e}var n=/webkit/i.test(e.vendorPrefix);return{KEY_CODE:{ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,TAB:9,BACKSPACE:8,DELETE:46},CSS:{TRANSITIONEND:"transitionend"+(n?" webkitTransitionEnd":""),ANIMATIONEND:"animationend"+(n?" webkitAnimationEnd":""),TRANSFORM:t("transform"),TRANSFORM_ORIGIN:t("transformOrigin"),TRANSITION:t("transition"),TRANSITION_DURATION:t("transitionDuration"),ANIMATION_PLAY_STATE:t("animationPlayState"),ANIMATION_DURATION:t("animationDuration"),ANIMATION_NAME:t("animationName"),ANIMATION_TIMING:t("animationTimingFunction"),ANIMATION_DIRECTION:t("animationDirection")},MEDIA:{sm:"(max-width: 599px)","gt-sm":"(min-width: 600px)",md:"(min-width: 600px) and (max-width: 959px)","gt-md":"(min-width: 960px)",lg:"(min-width: 960px) and (max-width: 1199px)","gt-lg":"(min-width: 1200px)"},MEDIA_PRIORITY:["gt-lg","lg","gt-md","md","gt-sm","sm"]}}t.module("material.core").factory("$mdConstant",e),e.$inject=["$sniffer"]}(),function(){function e(e,n){function o(){return[].concat(E)}function r(){return E.length}function i(e){return E.length&&e>-1&&e-1}function p(){return E.length?E[0]:null}function f(){return E.length?E[E.length-1]:null}function g(e,o,r,a){r=r||b;for(var d=u(o);;){if(!i(d))return null;var c=d+(e?-1:1),l=null;if(i(c)?l=E[c]:n&&(l=e?f():p(),c=u(l)),null===l||c===a)return null;if(r(l))return l;t.isUndefined(a)&&(a=c),d=c}}var b=function(){return!0};e&&!t.isArray(e)&&(e=Array.prototype.slice.call(e)),n=!!n;var E=e||[];return{items:o,count:r,inRange:i,contains:h,indexOf:u,itemAt:c,findBy:l,add:s,remove:m,first:p,last:f,next:t.bind(null,g,!1),previous:t.bind(null,g,!0),hasPrevious:d,hasNext:a}}t.module("material.core").config(["$provide",function(t){t.decorator("$mdUtil",["$delegate",function(t){return t.iterator=e,t}])}])}(),function(){function e(e,n,o){function r(e){var n=u[e];t.isUndefined(n)&&(n=u[e]=i(e));var o=p[n];return t.isUndefined(o)&&(o=a(n)),o}function i(t){return e.MEDIA[t]||("("!==t.charAt(0)?"("+t+")":t)}function a(e){var t=h[e]=o.matchMedia(e);return t.addListener(d),p[t.media]=!!t.matches}function d(e){n.$evalAsync(function(){p[e.media]=!!e.matches})}function c(e){return h[e]}function l(t,n){for(var o=0;o
');return e.appendChild(a[0]),a.on("wheel",r),a.on("touchmove",r),o.on("keydown",n),function(){a.off("wheel"),a.off("touchmove"),a[0].parentNode.removeChild(a[0]),o.off("keydown",n),delete p.disableScrollAround._enableScrolling}}function i(){var e=d.parentNode,t=e.getAttribute("style")||"",n=d.getAttribute("style")||"",o=p.scrollTop(d),r=d.clientWidth;return d.scrollHeight>d.clientHeight&&(a(d,{position:"fixed",width:"100%",top:-o+"px"}),a(e,{overflowY:"scroll"})),d.clientWidth
');o[0].body.appendChild(e[0]),this.floatingScrollbars.cached=e[0].offsetWidth==e[0].childNodes[0].offsetWidth,e.remove()}return this.floatingScrollbars.cached},forceFocus:function(t){var n=t[0]||t;document.addEventListener("click",function r(e){e.target===n&&e.$focus&&(n.focus(),e.stopImmediatePropagation(),e.preventDefault(),n.removeEventListener("click",r))},!0);var o=document.createEvent("MouseEvents");o.initMouseEvent("click",!1,!0,e,{},0,0,0,0,!1,!1,!1,!1,0,null),o.$material=!0,o.$focus=!0,n.dispatchEvent(o)},createBackdrop:function(e,t){return a(p.supplant('',[t]))(e)},supplant:function(e,t,n){return n=n||/\{([^\{\}]*)\}/g,e.replace(n,function(e,n){var o=n.split("."),r=t;try{for(var i in o)r=r[o[i]]}catch(a){r=e}return"string"==typeof r||"number"==typeof r?r:e})},fakeNgModel:function(){return{$fake:!0,$setTouched:t.noop,$setViewValue:function(e){this.$viewValue=e,this.$render(e),this.$viewChangeListeners.forEach(function(e){e()})},$isEmpty:function(e){return 0===(""+e).length},$parsers:[],$formatters:[],$viewChangeListeners:[],$render:t.noop}},debounce:function(e,t,o,r){var a;return function(){var d=o,c=Array.prototype.slice.call(arguments);i.cancel(a),a=i(function(){a=n,e.apply(d,c)},t||10,r)}},throttle:function(e,t){var n;return function(){var o=this,r=arguments,i=p.now();(!n||i-n>t)&&(e.apply(o,r),n=i)}},time:function(e){var t=p.now();return e(),p.now()-t},valueOnUse:function(e,t,n){var o=null,r=Array.prototype.slice.call(arguments),i=r.length>3?r.slice(3):[];Object.defineProperty(e,t,{get:function(){return null===o&&(o=n.apply(e,i)),o}})},nextUid:function(){return""+r++},disconnectScope:function(e){if(e&&e.$root!==e&&!e.$$destroyed){var t=e.$parent;e.$$disconnected=!0,t.$$childHead===e&&(t.$$childHead=e.$$nextSibling),t.$$childTail===e&&(t.$$childTail=e.$$prevSibling),e.$$prevSibling&&(e.$$prevSibling.$$nextSibling=e.$$nextSibling),e.$$nextSibling&&(e.$$nextSibling.$$prevSibling=e.$$prevSibling),e.$$nextSibling=e.$$prevSibling=null}},reconnectScope:function(e){if(e&&e.$root!==e&&e.$$disconnected){var t=e,n=t.$parent;t.$$disconnected=!1,t.$$prevSibling=n.$$childTail,n.$$childHead?(n.$$childTail.$$nextSibling=t,n.$$childTail=t):n.$$childHead=n.$$childTail=t}},getClosest:function(e,n,o){if(e instanceof t.element&&(e=e[0]),n=n.toUpperCase(),o&&(e=e.parentNode),!e)return null;do if(e.nodeName===n)return e;while(e=e.parentNode);return null},elementContains:function(n,o){var r=e.Node&&e.Node.prototype&&Node.prototype.contains,i=r?t.bind(n,n.contains):t.bind(n,function(e){return n===o||!!(16&this.compareDocumentPosition(e))});return i(o)},extractElementByName:function(e,n){for(var o=0,r=e.length;r>o;o++)if(e[o].nodeName.toLowerCase()===n)return t.element(e[o]);return e},initOptionalProperties:function(e,n,o){o=o||{},t.forEach(e.$$isolateBindings,function(r,i){if(r.optional&&t.isUndefined(e[i])){var a=t.isDefined(n[r.attrName]);e[i]=t.isDefined(o[i])?o[i]:a}})},nextTick:function(e,t){function n(){var e=o.queue,t=o.digest;o.queue=[],o.timeout=null,o.digest=!1,e.forEach(function(e){e()}),t&&d.$digest()}var o=p.nextTick,r=o.timeout,a=o.queue||[];return a.push(e),null==t&&(t=!0),o.digest=o.digest||t,o.queue=a,r||(o.timeout=i(n,0,!1))},processTemplate:function(e){return h?e:e&&t.isString(e)?e.replace(/\{\{/g,m).replace(/}}/g,u):e}};return p.dom.animator=c(p),p}var r=0;t.module("material.core").factory("$mdUtil",o),o.$inject=["$document","$timeout","$compile","$rootScope","$$mdAnimate","$interpolate"],t.element.prototype.focus=t.element.prototype.focus||function(){return this.length&&this[0].focus(),this},t.element.prototype.blur=t.element.prototype.blur||function(){return this.length&&this[0].blur(),this}}(),function(){function e(e,n,o){function r(e,o,r){var i=e[0]||e;!i||i.hasAttribute(o)&&0!==i.getAttribute(o).length||c(i,o)||(r=t.isString(r)?r.trim():"",r.length?e.attr(o,r):n.warn('ARIA: Attribute "',o,'", required for accessibility, is missing on node:',i))}function i(t,n,o){e(function(){r(t,n,o())})}function a(e,t){i(e,t,function(){return d(e)})}function d(e){return e.text().trim()}function c(e,t){function n(e){var t=e.currentStyle?e.currentStyle:o.getComputedStyle(e);return"none"===t.display}var r=e.hasChildNodes(),i=!1;if(r)for(var a=e.childNodes,d=0;d").html(o.trim()).contents(),c=r(a);return n={locals:e,element:a,link:function(o){if(e.$scope=o,s){var r=i(s,e,!0);f&&t.extend(r.instance,e);var d=r();a.data("$ngControllerController",d),a.children().data("$ngControllerController",d),m&&(o[m]=d),n.controller=d}return c(o)}}})}}t.module("material.core").service("$mdCompiler",e),e.$inject=["$q","$http","$injector","$compile","$controller","$templateCache"]}(),function(){function n(){}function o(n,o,r){function i(e,t,n){var o=p[t.replace(/^\$md./,"")];if(!o)throw new Error("Failed to register element with handler "+t+". Available handlers: "+Object.keys(p).join(", "));return o.registerElement(e,n)}function a(e,o){var r=new n(e);return t.extend(r,o),p[e]=r,h}var c=navigator.userAgent||navigator.vendor||e.opera,l=c.match(/ipad|iphone|ipod/i),m=c.match(/android/i),u="undefined"!=typeof e.jQuery&&t.element===e.jQuery,h={handler:a,register:i,isHijackingClicks:(l||m)&&!u&&!f};return h.isHijackingClicks&&h.handler("click",{options:{maxDistance:6},onEnd:function(e,t){t.distancethis.options.maxDistance&&this.cancel()},onEnd:function(){this.onCancel()}}).handler("drag",{options:{minDistance:6,horizontal:!0,cancelMultiplier:1.5},onStart:function(e){this.state.registeredParent||this.cancel()},onMove:function(e,t){var n,o;e.preventDefault(),this.state.dragPointer?this.dispatchDragMove(e):(this.state.options.horizontal?(n=Math.abs(t.distanceX)>this.state.options.minDistance,o=Math.abs(t.distanceY)>this.state.options.minDistance*this.state.options.cancelMultiplier):(n=Math.abs(t.distanceY)>this.state.options.minDistance,o=Math.abs(t.distanceX)>this.state.options.minDistance*this.state.options.cancelMultiplier),n?(this.state.dragPointer=d(e),s(e,this.state.dragPointer),this.dispatchEvent(e,"$md.dragstart",this.state.dragPointer)):o&&this.cancel())},dispatchDragMove:o.throttle(function(e){this.state.isRunning&&(s(e,this.state.dragPointer),this.dispatchEvent(e,"$md.drag",this.state.dragPointer))}),onEnd:function(e,t){this.state.dragPointer&&(s(e,this.state.dragPointer),this.dispatchEvent(e,"$md.dragend",this.state.dragPointer))}}).handler("swipe",{options:{minVelocity:.65,minDistance:10},onEnd:function(e,t){if(Math.abs(t.velocityX)>this.state.options.minVelocity&&Math.abs(t.distanceX)>this.state.options.minDistance){var n="left"==t.directionX?"$md.swipeleft":"$md.swiperight";this.dispatchEvent(e,n)}}})}function r(e){this.name=e,this.state={}}function i(){function n(e,n,o){o=o||u;var r=new t.element.Event(n);r.$material=!0,r.pointer=o,r.srcEvent=e,t.extend(r,{clientX:o.x,clientY:o.y,screenX:o.x,screenY:o.y,pageX:o.x,pageY:o.y,ctrlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey,metaKey:e.metaKey}),t.element(o.target).trigger(r)}function o(t,n,o){o=o||u;var r;"click"===n?(r=document.createEvent("MouseEvents"),r.initMouseEvent("click",!0,!0,e,t.detail,o.x,o.y,o.x,o.y,t.ctrlKey,t.altKey,t.shiftKey,t.metaKey,t.button,t.relatedTarget||null)):(r=document.createEvent("CustomEvent"),r.initCustomEvent(n,!0,!0,{})),r.$material=!0,r.pointer=o,r.srcEvent=t,o.target.dispatchEvent(r)}var i="undefined"!=typeof e.jQuery&&t.element===e.jQuery;return r.prototype={options:{},dispatchEvent:i?n:o,onStart:t.noop,onMove:t.noop,onEnd:t.noop,onCancel:t.noop,start:function(e,n){if(!this.state.isRunning){var o=this.getNearestParent(e.target),r=o&&o.$mdGesture[this.name]||{};this.state={isRunning:!0,options:t.extend({},this.options,r),registeredParent:o},this.onStart(e,n)}},move:function(e,t){this.state.isRunning&&this.onMove(e,t)},end:function(e,t){this.state.isRunning&&(this.onEnd(e,t),this.state.isRunning=!1)},cancel:function(e,t){this.onCancel(e,t),this.state={}},getNearestParent:function(e){for(var t=e;t;){if((t.$mdGesture||{})[this.name])return t;t=t.parentNode}return null},registerElement:function(e,t){function n(){delete e[0].$mdGesture[o.name],e.off("$destroy",n)}var o=this;return e[0].$mdGesture=e[0].$mdGesture||{},e[0].$mdGesture[this.name]=t||{},e.on("$destroy",n),n}},r}function a(e,n){function o(e,t){var o;for(var r in p)o=p[r],o instanceof n&&("start"===e&&o.cancel(),o[e](t,u))}function r(e){if(!u){var t=+Date.now();h&&!c(e,h)&&t-h.endTime<1500||(u=d(e),o("start",e))}}function i(e){u&&c(e,u)&&(s(e,u),o("move",e))}function a(e){u&&c(e,u)&&(s(e,u),u.endTime=+Date.now(),o("end",e),h=u,u=null)}document.contains||(document.contains=function(e){return document.body.contains(e)}),!b&&e.isHijackingClicks&&(document.addEventListener("click",function(e){var t=0===e.clientX&&0===e.clientY;t||e.$material||e.isIonicTap||l(e)?(g=null,"label"==e.target.tagName.toLowerCase()&&(g={x:e.x,y:e.y})):(e.preventDefault(),e.stopPropagation(),g=null)},!0),b=!0);var m="mousedown touchstart pointerdown",f="mousemove touchmove pointermove",E="mouseup mouseleave touchend touchcancel pointerup pointercancel";t.element(document).on(m,r).on(f,i).on(E,a).on("$$mdGestureReset",function(){h=u=null})}function d(e){var t=m(e),n={startTime:+Date.now(),target:e.target,type:e.type.charAt(0)};return n.startX=n.x=t.pageX,n.startY=n.y=t.pageY,n}function c(e,t){return e&&t&&e.type.charAt(0)===t.type}function l(e){return g&&g.x==e.x&&g.y==e.y}function s(e,t){var n=m(e),o=t.x=n.pageX,r=t.y=n.pageY;t.distanceX=o-t.startX,t.distanceY=r-t.startY,t.distance=Math.sqrt(t.distanceX*t.distanceX+t.distanceY*t.distanceY),t.directionX=t.distanceX>0?"right":t.distanceX<0?"left":"",t.directionY=t.distanceY>0?"up":t.distanceY<0?"down":"",t.duration=+Date.now()-t.startTime,t.velocityX=t.distanceX/t.duration,t.velocityY=t.distanceY/t.duration}function m(e){return e=e.originalEvent||e,e.touches&&e.touches[0]||e.changedTouches&&e.changedTouches[0]||e}var u,h,p={},f=!1,g=null,b=!1;t.module("material.core.gestures",[]).provider("$mdGesture",n).factory("$$MdGestureHandler",i).run(a),n.prototype={skipClickHijack:function(){return f=!0},$get:["$$MdGestureHandler","$$rAF","$timeout",function(e,t,n){return new o(e,t,n)}]},o.$inject=["$$MdGestureHandler","$$rAF","$timeout"],a.$inject=["$mdGesture","$$MdGestureHandler"]}(),function(){function e(){function e(e){function n(e){return c.optionsFactory=e.options,c.methods=(e.methods||[]).concat(a),l}function o(e,t){return d[e]=t,l}function r(t,n){if(n=n||{},n.methods=n.methods||[],n.options=n.options||function(){return{}},/^cancel|hide|show$/.test(t))throw new Error("Preset '"+t+"' in "+e+" is reserved!");if(n.methods.indexOf("_options")>-1)throw new Error("Method '_options' in "+e+" is reserved!");return c.presets[t]={methods:n.methods.concat(a),optionsFactory:n.options,argOption:n.argOption},l}function i(n,o){function r(e){return e=e||{},e._options&&(e=e._options),s.show(t.extend({},l,e))}function i(t,n){var r={};return r[e]=m,o.invoke(t||function(){return n},{},r)}var a,l,s=n(),m={hide:s.hide,cancel:s.cancel,show:r};return a=c.methods||[],l=i(c.optionsFactory,{}),t.forEach(d,function(e,t){m[t]=e}),t.forEach(c.presets,function(e,n){function o(e){this._options=t.extend({},r,e)}var r=i(e.optionsFactory,{}),d=(e.methods||[]).concat(a);if(t.extend(r,{$type:n}),t.forEach(d,function(e){o.prototype[e]=function(t){return this._options[e]=t,this}}),e.argOption){var c="show"+n.charAt(0).toUpperCase()+n.slice(1);m[c]=function(e){var t=m[n](e);return m.show(t)}}m[n]=function(n){return arguments.length&&e.argOption&&!t.isObject(n)&&!t.isArray(n)?(new o)[e.argOption](n):new o(n)}}),m}var a=["onHide","onShow","onRemove"],d={},c={presets:{}},l={setDefaults:n,addPreset:r,addMethod:o,$get:i};return l.addPreset("build",{methods:["controller","controllerAs","resolve","template","templateUrl","themable","transformTemplate","parent"]}),i.$inject=["$$interimElement","$injector"],l}function o(e,o,r,i,a,d,c,l,s,m){return function(){function m(e){e=e||{};var t=new p(e),n=!e.skipHide&&E.length?f.hide():o.when(!0);return n["finally"](function(){E.push(t),t.show()["catch"](function(e){})}),t.deferred.promise}function u(e,t){function r(t){return t.remove(e||b,!1)["catch"](function(e){}),t.deferred.promise}if(!E.length)return o.when(e);if(t=t||{},t.closeAll){var i=o.all(E.reverse().map(r));return E=[],i}if(t.closeTo!==n)return o.all(E.splice(t.closeTo).map(r));var a=E.pop();return r(a)}function h(e){var t=E.shift();return t?(t.remove(e||g,!0)["catch"](function(e){}),t.deferred.promise):o.when(e)}function p(m){function u(){return o(function(e,t){function n(e){y.deferred.reject(e),t(e)}g(m).then(function(t){A=b(t,m),C=M(A,m,t.controller).then(e,n)})})}function h(e,t){return m.cancelAutoHide&&m.cancelAutoHide(),o(function(n,r){function i(){y.deferred.resolve(e),n(e)}function a(e){y.deferred.reject(e),r(e)}o.when(C)["finally"](function(){m.element.triggerHandler("$mdInterimElementRemove"),$(m.element,m).then(function(){t&&a(e)||i()},a)})})}function p(e){return e=e||{},e.template&&(e.template=c.processTemplate(e.template)),t.extend({preserveScope:!1,cancelAutoHide:t.noop,scope:e.scope||r.$new(e.isolateScope),onShow:function(e,t,n){return d.enter(t,n.parent)},onRemove:function(e,t){return t&&d.leave(t)||o.when()}},e)}function g(e){var t=e.skipCompile?null:l.compile(e);return t||o(function(t){t({locals:{},link:function(){return e.element}})})}function b(e,n){t.extend(e.locals,n);var o=e.link(n.scope);return n.element=o,n.parent=E(o,n),n.themable&&s(o),o}function E(n,o){var r=o.parent;if(r=t.isFunction(r)?r(o.scope,n,o):t.element(t.isString(r)?e[0].querySelector(r):r),!(r||{}).length){var i;return a[0]&&a[0].querySelector&&(i=a[0].querySelector(":not(svg) > body")),i||(i=a[0]),"#comment"==i.nodeName&&(i=e[0].body),t.element(i)}return r}function v(){var e,o=t.noop;m.hideDelay&&(e=i(f.hide,m.hideDelay),o=function(){i.cancel(e)}),m.cancelAutoHide=function(){o(),m.cancelAutoHide=n}}function M(e,n,r){var i=n.onComplete||t.noop;return o(function(t,a){try{o.when(n.onShow(n.scope,e,n,r)).then(function(){i(n.scope,e,n),v(),t(e)},a)}catch(d){a(d.message)}})}function $(e,n){var r=n.onRemoving||t.noop;return o(function(t,i){try{var a=o.when(e?n.onRemove(n.scope,e,n):!0);r(e,a),a.then(function(){!n.preserveScope&&n.scope.$destroy(),t(e)},i)}catch(d){i(d.message)}})}var y,A,C=o.when(!0);return m=p(m),y={options:m,deferred:o.defer(),show:u,remove:h}}var f,g=!1,b=!0,E=[];return f={show:m,hide:u,cancel:h}}}return e.$get=o,o.$inject=["$document","$q","$rootScope","$timeout","$rootElement","$animate","$mdUtil","$mdCompiler","$mdTheming","$log"],e}t.module("material.core").provider("$$interimElement",e)}(),function(){!function(){function e(e,t){function n(n,o,r){var i=r.$normalize(e);t&&o.addClass(e),r[i]&&o.addClass(e+"-"+r[i].replace(/\s+/g,"-"));try{o.removeAttr(e)}catch(a){}}return[function(){return{compile:function(e,t){return n(null,e,t),n}}}]}function n(e){function t(t,n){n.addClass(e);try{n.removeAttr(e)}catch(o){}}return[function(){return{compile:function(e,n){return t(null,e),t}}}]}t.module("material.layout",[]).directive("layout",e("layout",!0)).directive("layoutSm",e("layout-sm",!0)).directive("layoutGtSm",e("layout-gt-sm",!0)).directive("layoutMd",e("layout-md",!0)).directive("layoutGtMd",e("layout-gt-md",!0)).directive("layoutLg",e("layout-lg",!0)).directive("layoutGtLg",e("layout-gt-lg",!0)).directive("flex",e("flex",!0)).directive("flexSm",e("flex-sm",!0)).directive("flexGtSm",e("flex-gt-sm",!0)).directive("flexMd",e("flex-md",!0)).directive("flexGtMd",e("flex-gt-md",!0)).directive("flexLg",e("flex-lg",!0)).directive("flexGtLg",e("flex-gt-lg",!0)).directive("layoutAlign",e("layout-align")).directive("layoutAlignSm",e("layout-align-sm")).directive("layoutAlignGtSm",e("layout-align-gt-sm")).directive("layoutAlignMd",e("layout-align-md")).directive("layoutAlignGtMd",e("layout-align-gt-md")).directive("layoutAlignLg",e("layout-align-lg")).directive("layoutAlignGtLg",e("layout-align-gt-lg")).directive("flexOrder",e("flex-order")).directive("flexOrderSm",e("flex-order-sm")).directive("flexOrderGtSm",e("flex-order-gt-sm")).directive("flexOrderMd",e("flex-order-md")).directive("flexOrderGtMd",e("flex-order-gt-md")).directive("flexOrderLg",e("flex-order-lg")).directive("flexOrderGtLg",e("flex-order-gt-lg")).directive("offset",e("offset")).directive("offsetSm",e("offset-sm")).directive("offsetGtSm",e("offset-gt-sm")).directive("offsetMd",e("offset-md")).directive("offsetGtMd",e("offset-gt-md")).directive("offsetLg",e("offset-lg")).directive("offsetGtLg",e("offset-gt-lg")).directive("layoutMargin",n("layout-margin")).directive("layoutPadding",n("layout-padding")).directive("layoutWrap",n("layout-wrap")).directive("layoutFill",n("layout-fill")).directive("hide",n("hide")).directive("hideSm",n("hide-sm")).directive("hideGtSm",n("hide-gt-sm")).directive("hideMd",n("hide-md")).directive("hideGtMd",n("hide-gt-md")).directive("hideLg",n("hide-lg")).directive("hideGtLg",n("hide-gt-lg")).directive("show",n("show")).directive("showSm",n("show-sm")).directive("showGtSm",n("show-gt-sm")).directive("showMd",n("show-md")).directive("showGtMd",n("show-gt-md")).directive("showLg",n("show-lg")).directive("showGtLg",n("show-gt-lg"))}()}(),function(){function e(e,n){function o(e){return e&&""!==e}var r,i=[],a={};return r={notFoundError:function(t){e.error("No instance found for handle",t)},getInstances:function(){return i},get:function(e){if(!o(e))return null;var t,n,r;for(t=0,n=i.length;n>t;t++)if(r=i[t],r.$$mdHandle===e)return r;return null},register:function(e,n){function o(){var t=i.indexOf(e);-1!==t&&i.splice(t,1)}function r(){var t=a[n];t&&(t.resolve(e),delete a[n])}return n?(e.$$mdHandle=n,i.push(e),r(),o):t.noop},when:function(e){if(o(e)){var t=n.defer(),i=r.get(e);return i?t.resolve(i):a[e]=t,t.promise}return n.reject("Invalid `md-component-id` value.")}}}t.module("material.core").factory("$mdComponentRegistry",e),e.$inject=["$log","$q"]}(),function(){!function(){function e(e){function n(n,r,i){var a=o(r);return e.attach(n,r,t.extend(a,i))}function o(e){return e.hasClass("md-icon-button")?{isMenuItem:e.hasClass("md-menu-item"),fitRipple:!0,center:!0}:{isMenuItem:e.hasClass("md-menu-item"),dimBackground:!0}}return{attach:n}}t.module("material.core").factory("$mdButtonInkRipple",e),e.$inject=["$mdInkRipple"]}()}(),function(){!function(){function e(e){function n(n,o,r){return e.attach(n,o,t.extend({center:!0,dimBackground:!1,fitRipple:!0},r))}return{attach:n}}t.module("material.core").factory("$mdCheckboxInkRipple",e),e.$inject=["$mdInkRipple"]}()}(),function(){!function(){function e(e){function n(n,o,r){return e.attach(n,o,t.extend({center:!1,dimBackground:!0,outline:!1,rippleSize:"full"},r))}return{attach:n}}t.module("material.core").factory("$mdListInkRipple",e),e.$inject=["$mdInkRipple"]}()}(),function(){function e(e,n){return{controller:t.noop,link:function(t,o,r){r.hasOwnProperty("mdInkRippleCheckbox")?n.attach(t,o):e.attach(t,o)}}}function n(e){function n(n,r,i){return r.controller("mdNoInk")?t.noop:e.instantiate(o,{$scope:n,$element:r,rippleOptions:i})}return{attach:n}}function o(e,n,o,r,i,a){this.$window=r,this.$timeout=i,this.$mdUtil=a,this.$scope=e,this.$element=n,this.options=o,this.mousedown=!1,this.ripples=[],this.timeout=null,this.lastRipple=null,a.valueOnUse(this,"container",this.createContainer),a.valueOnUse(this,"color",this.getColor,1),a.valueOnUse(this,"background",this.getColor,.5),(n.controller("mdInkRipple")||{}).createRipple=t.bind(this,this.createRipple),this.bindEvents()}function r(){return{controller:t.noop}}t.module("material.core").factory("$mdInkRipple",n).directive("mdInkRipple",e).directive("mdNoInk",r).directive("mdNoBar",r).directive("mdNoStretch",r);var i=450;e.$inject=["$mdButtonInkRipple","$mdCheckboxInkRipple"],n.$inject=["$injector"],o.$inject=["$scope","$element","rippleOptions","$window","$timeout","$mdUtil"],o.prototype.getColor=function(e){function t(){var e=this.options.colorElement&&this.options.colorElement[0];return e=e||this.$element[0],e?this.$window.getComputedStyle(e).color:"rgb(0,0,0)"}function n(t){function n(e){var t="#"===e[0]?e.substr(1):e,n=t.length/3,o=t.substr(0,n),r=t.substr(n,n),i=t.substr(2*n);return 1===n&&(o+=o,r+=r,i+=i),"rgba("+parseInt(o,16)+","+parseInt(r,16)+","+parseInt(i,16)+",0.1)"}function o(e){return e.replace(")",", 0.1)").replace("(","a(")}if(t)return 0===t.indexOf("rgba")?t.replace(/\d?\.?\d*\s*\)\s*$/,(.1*e).toString()+")"):0===t.indexOf("rgb")?o(t):0===t.indexOf("#")?n(t):void 0}return e=e||1,n(this.$element.attr("md-ink-ripple"))||n(t.call(this))},o.prototype.bindEvents=function(){this.$element.on("mousedown",t.bind(this,this.handleMousedown)),this.$element.on("mouseup",t.bind(this,this.handleMouseup)),this.$element.on("mouseleave",t.bind(this,this.handleMouseup))},o.prototype.handleMousedown=function(e){this.mousedown=!0,this.options.center?this.createRipple(this.container.prop("clientWidth")/2,this.container.prop("clientWidth")/2):this.createRipple(e.layerX,e.layerY)},o.prototype.handleMouseup=function(){var e=this;this.mousedown=!1,this.$mdUtil.nextTick(function(){e.clearRipples()},!1)},o.prototype.clearRipples=function(){for(var e=0;e');return this.$element.append(e),e},o.prototype.clearTimeout=function(){this.timeout&&(this.$timeout.cancel(this.timeout),this.timeout=null)},o.prototype.createRipple=function(e,n){function o(e){return e?e.replace("rgba","rgb").replace(/,[^\),]+\)/,")"):"rgb(0,0,0)"}function r(e,t,n){return e?Math.max(t,n):Math.sqrt(Math.pow(t,2)+Math.pow(n,2))}var a=this,d=t.element('
'),c=this.$element.prop("clientWidth"),l=this.$element.prop("clientHeight"),s=2*Math.max(Math.abs(c-e),e),m=2*Math.max(Math.abs(l-n),n),u=r(this.options.fitRipple,s,m);d.css({left:e+"px",top:n+"px",background:"black",width:u+"px",height:u+"px",backgroundColor:o(this.color),borderColor:o(this.color)}),this.lastRipple=d,this.clearTimeout(),this.timeout=this.$timeout(function(){a.clearTimeout(),a.mousedown||a.fadeInComplete(d)},.35*i,!1),this.options.dimBackground&&this.container.css({backgroundColor:this.background}),this.container.append(d),this.ripples.push(d),d.addClass("md-ripple-placed"),this.$mdUtil.nextTick(function(){d.addClass("md-ripple-scaled md-ripple-active"),a.$timeout(function(){a.clearRipples()},i,!1)},!1)},o.prototype.fadeInComplete=function(e){this.lastRipple===e?this.timeout||this.mousedown||this.removeRipple(e):this.removeRipple(e)},o.prototype.removeRipple=function(e){ -var t=this,n=this.ripples.indexOf(e);0>n||(this.ripples.splice(this.ripples.indexOf(e),1),e.removeClass("md-ripple-active"),0===this.ripples.length&&this.container.css({backgroundColor:""}),this.$timeout(function(){t.fadeOutComplete(e)},i,!1))},o.prototype.fadeOutComplete=function(e){e.remove()}}(),function(){!function(){function e(e){function n(n,o,r){return e.attach(n,o,t.extend({center:!1,dimBackground:!0,outline:!1,rippleSize:"full"},r))}return{attach:n}}t.module("material.core").factory("$mdTabInkRipple",e),e.$inject=["$mdInkRipple"]}()}(),function(){t.module("material.core.theming.palette",[]).constant("$mdColorPalette",{red:{50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 300 A100",contrastStrongLightColors:"400 500 600 700 A200 A400 A700"},pink:{50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"500 600 A200 A400 A700"},purple:{50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400 A200 A400 A700"},"deep-purple":{50:"#ede7f6",100:"#d1c4e9",200:"#b39ddb",300:"#9575cd",400:"#7e57c2",500:"#673ab7",600:"#5e35b1",700:"#512da8",800:"#4527a0",900:"#311b92",A100:"#b388ff",A200:"#7c4dff",A400:"#651fff",A700:"#6200ea",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400 A200"},indigo:{50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400 A200 A400"},blue:{50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 300 400 A100",contrastStrongLightColors:"500 600 700 A200 A400 A700"},"light-blue":{50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea",contrastDefaultColor:"dark",contrastLightColors:"600 700 800 900 A700",contrastStrongLightColors:"600 700 800 A700"},cyan:{50:"#e0f7fa",100:"#b2ebf2",200:"#80deea",300:"#4dd0e1",400:"#26c6da",500:"#00bcd4",600:"#00acc1",700:"#0097a7",800:"#00838f",900:"#006064",A100:"#84ffff",A200:"#18ffff",A400:"#00e5ff",A700:"#00b8d4",contrastDefaultColor:"dark",contrastLightColors:"700 800 900",contrastStrongLightColors:"700 800 900"},teal:{50:"#e0f2f1",100:"#b2dfdb",200:"#80cbc4",300:"#4db6ac",400:"#26a69a",500:"#009688",600:"#00897b",700:"#00796b",800:"#00695c",900:"#004d40",A100:"#a7ffeb",A200:"#64ffda",A400:"#1de9b6",A700:"#00bfa5",contrastDefaultColor:"dark",contrastLightColors:"500 600 700 800 900",contrastStrongLightColors:"500 600 700"},green:{50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853",contrastDefaultColor:"dark",contrastLightColors:"600 700 800 900",contrastStrongLightColors:"600 700"},"light-green":{50:"#f1f8e9",100:"#dcedc8",200:"#c5e1a5",300:"#aed581",400:"#9ccc65",500:"#8bc34a",600:"#7cb342",700:"#689f38",800:"#558b2f",900:"#33691e",A100:"#ccff90",A200:"#b2ff59",A400:"#76ff03",A700:"#64dd17",contrastDefaultColor:"dark",contrastLightColors:"700 800 900",contrastStrongLightColors:"700 800 900"},lime:{50:"#f9fbe7",100:"#f0f4c3",200:"#e6ee9c",300:"#dce775",400:"#d4e157",500:"#cddc39",600:"#c0ca33",700:"#afb42b",800:"#9e9d24",900:"#827717",A100:"#f4ff81",A200:"#eeff41",A400:"#c6ff00",A700:"#aeea00",contrastDefaultColor:"dark",contrastLightColors:"900",contrastStrongLightColors:"900"},yellow:{50:"#fffde7",100:"#fff9c4",200:"#fff59d",300:"#fff176",400:"#ffee58",500:"#ffeb3b",600:"#fdd835",700:"#fbc02d",800:"#f9a825",900:"#f57f17",A100:"#ffff8d",A200:"#ffff00",A400:"#ffea00",A700:"#ffd600",contrastDefaultColor:"dark"},amber:{50:"#fff8e1",100:"#ffecb3",200:"#ffe082",300:"#ffd54f",400:"#ffca28",500:"#ffc107",600:"#ffb300",700:"#ffa000",800:"#ff8f00",900:"#ff6f00",A100:"#ffe57f",A200:"#ffd740",A400:"#ffc400",A700:"#ffab00",contrastDefaultColor:"dark"},orange:{50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00",contrastDefaultColor:"dark",contrastLightColors:"800 900",contrastStrongLightColors:"800 900"},"deep-orange":{50:"#fbe9e7",100:"#ffccbc",200:"#ffab91",300:"#ff8a65",400:"#ff7043",500:"#ff5722",600:"#f4511e",700:"#e64a19",800:"#d84315",900:"#bf360c",A100:"#ff9e80",A200:"#ff6e40",A400:"#ff3d00",A700:"#dd2c00",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 300 400 A100 A200",contrastStrongLightColors:"500 600 700 800 900 A400 A700"},brown:{50:"#efebe9",100:"#d7ccc8",200:"#bcaaa4",300:"#a1887f",400:"#8d6e63",500:"#795548",600:"#6d4c41",700:"#5d4037",800:"#4e342e",900:"#3e2723",A100:"#d7ccc8",A200:"#bcaaa4",A400:"#8d6e63",A700:"#5d4037",contrastDefaultColor:"light",contrastDarkColors:"50 100 200",contrastStrongLightColors:"300 400"},grey:{50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",1000:"#000000",A100:"#ffffff",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161",contrastDefaultColor:"dark",contrastLightColors:"600 700 800 900"},"blue-grey":{50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 300",contrastStrongLightColors:"400 500"}})}(),function(){function e(e){function o(e,t){return t=t||{},s[e]=a(e,t),b}function r(e,n){return a(e,t.extend({},s[e]||{},n))}function a(e,t){var n=C.filter(function(e){return!t[e]});if(n.length)throw new Error("Missing colors %1 in palette %2!".replace("%1",n.join(", ")).replace("%2",e));return t}function d(e,n){if(m[e])return m[e];n=n||"default";var o="string"==typeof n?m[n]:n,r=new c(e);return o&&t.forEach(o.colors,function(e,n){r.colors[n]={name:e.name,hues:t.extend({},e.hues)}}),m[e]=r,r}function c(e){function n(e){if(e=0===arguments.length?!0:!!e,e!==o.isDark){o.isDark=e,o.foregroundPalette=o.isDark?p:h,o.foregroundShadow=o.isDark?f:g;var n=o.isDark?A:y,r=o.isDark?y:A;return t.forEach(n,function(e,t){var n=o.colors[t],i=r[t];if(n)for(var a in n.hues)n.hues[a]===i[a]&&(n.hues[a]=e[a])}),o}}var o=this;o.name=e,o.colors={},o.dark=n,n(!1),M.forEach(function(e){var n=(o.isDark?A:y)[e];o[e+"Palette"]=function(r,i){var a=o.colors[e]={name:r,hues:t.extend({},n,i)};return Object.keys(a.hues).forEach(function(e){if(!n[e])throw new Error("Invalid hue name '%1' in theme %2's %3 color %4. Available hue names: %4".replace("%1",e).replace("%2",o.name).replace("%3",r).replace("%4",Object.keys(n).join(", ")))}),Object.keys(a.hues).map(function(e){return a.hues[e]}).forEach(function(t){if(-1==C.indexOf(t))throw new Error("Invalid hue value '%1' in theme %2's %3 color %4. Available hue values: %5".replace("%1",t).replace("%2",o.name).replace("%3",e).replace("%4",r).replace("%5",C.join(", ")))}),o},o[e+"Color"]=function(){var t=Array.prototype.slice.call(arguments);return console.warn("$mdThemingProviderTheme."+e+"Color() has been deprecated. Use $mdThemingProviderTheme."+e+"Palette() instead."),o[e+"Palette"].apply(o,t)}})}function u(e,o){function r(e){return e===n||""===e?!0:i.THEMES[e]!==n}function i(t,o){o===n&&(o=t,t=n),t===n&&(t=e),i.inherit(o,o)}return i.inherit=function(n,i){function a(e){r(e)||o.warn("Attempted to use unregistered theme '"+e+"'. Register it with $mdThemingProvider.theme().");var t=n.data("$mdThemeName");t&&n.removeClass("md-"+t+"-theme"),n.addClass("md-"+e+"-theme"),n.data("$mdThemeName",e),d&&n.data("$mdThemeController",d)}var d=i.controller("mdTheme"),c=n.attr("md-theme-watch");if((v||t.isDefined(c))&&"false"!=c){var l=e.$watch(function(){return d&&d.$mdTheme||E},a);n.on("$destroy",l)}else{var s=d&&d.$mdTheme||E;a(s)}},i.THEMES=t.extend({},m),i.defaultTheme=function(){return E},i.registered=r,i}s={},m={};var b,E="default",v=!1;return t.extend(s,e),u.$inject=["$rootScope","$log"],b={definePalette:o,extendPalette:r,theme:d,setDefaultTheme:function(e){E=e},alwaysWatchTheme:function(e){v=e},$get:u,_LIGHT_DEFAULT_HUES:y,_DARK_DEFAULT_HUES:A,_PALETTES:s,_THEMES:m,_parseRules:i,_rgba:l}}function o(e,t,n){return{priority:100,link:{pre:function(o,r,i){var a={$setTheme:function(t){e.registered(t)||n.warn("attempted to use unregistered theme '"+t+"'"),a.$mdTheme=t}};r.data("$mdThemeController",a),a.$setTheme(t(i.mdTheme)(o)),i.$observe("mdTheme",a.$setTheme)}}}}function r(e){return e}function i(e,n,o){d(e,n),o=o.replace(/THEME_NAME/g,e.name);var r=[],i=e.colors[n],a=new RegExp(".md-"+e.name+"-theme","g"),c=new RegExp("('|\")?{{\\s*("+n+")-(color|contrast)-?(\\d\\.?\\d*)?\\s*}}(\"|')?","g"),m=/'?"?\{\{\s*([a-zA-Z]+)-(A?\d+|hue\-[0-3]|shadow)-?(\d\.?\d*)?(contrast)?\s*\}\}'?"?/g,u=s[i.name];return o=o.replace(m,function(t,n,o,r,i){return"foreground"===n?"shadow"==o?e.foregroundShadow:e.foregroundPalette[o]||e.foregroundPalette[1]:(0===o.indexOf("hue")&&(o=e.colors[n].hues[o]),l((s[e.colors[n].name][o]||"")[i?"contrast":"value"],r))}),t.forEach(i.hues,function(t,n){var i=o.replace(c,function(e,n,o,r,i){return l(u[t]["color"===r?"value":"contrast"],i)});"default"!==n&&(i=i.replace(a,".md-"+e.name+"-theme.md-"+n)),"default"==e.name&&(i=i.replace(/\.md-default-theme/g,"")),r.push(i)}),r}function a(e){function n(e){var n=e.contrastDefaultColor,o=e.contrastLightColors||[],r=e.contrastStrongLightColors||[],i=e.contrastDarkColors||[];"string"==typeof o&&(o=o.split(" ")),"string"==typeof r&&(r=r.split(" ")),"string"==typeof i&&(i=i.split(" ")),delete e.contrastDefaultColor,delete e.contrastLightColors,delete e.contrastStrongLightColors,delete e.contrastDarkColors,t.forEach(e,function(a,d){function l(){return"light"===n?i.indexOf(d)>-1?b:r.indexOf(d)>-1?v:E:o.indexOf(d)>-1?r.indexOf(d)>-1?v:E:b}if(!t.isObject(a)){var s=c(a);if(!s)throw new Error("Color %1, in palette %2's hue %3, is invalid. Hex or rgb(a) color expected.".replace("%1",a).replace("%2",e.name).replace("%3",d));e[d]={value:s,contrast:l()}}})}var o=document.getElementsByTagName("head")[0],r=o?o.firstElementChild:null,a=e.has("$MD_THEME_CSS")?e.get("$MD_THEME_CSS"):"";if(r&&0!==a.length){t.forEach(s,n);var d={},l=a.split(/\}(?!(\}|'|"|;))/).filter(function(e){return e&&e.length}).map(function(e){return e.trim()+"}"}),h=new RegExp("md-("+M.join("|")+")","g");M.forEach(function(e){d[e]=""}),l.forEach(function(e){for(var t,n=(e.match(h),0);t=M[n];n++)if(e.indexOf(".md-"+t)>-1)return d[t]+=e;for(n=0;t=M[n];n++)if(e.indexOf(t)>-1)return d[t]+=e;return d[$]+=e}),t.forEach(m,function(e){u[e.name]||(M.forEach(function(t){for(var n=i(e,t,d[t]);n.length;){var a=document.createElement("style");a.setAttribute("type","text/css"),a.appendChild(document.createTextNode(n.shift())),o.insertBefore(a,r)}}),e.colors.primary.name==e.colors.accent.name&&console.warn("$mdThemingProvider: Using the same palette for primary and accent. This violates the material design spec."),u[e.name]=!0)})}}function d(e,t){if(!s[(e.colors[t]||{}).name])throw new Error("You supplied an invalid color palette for theme %1's %2 palette. Available palettes: %3".replace("%1",e.name).replace("%2",t).replace("%3",Object.keys(s).join(", ")))}function c(e){if(t.isArray(e)&&3==e.length)return e;if(/^rgb/.test(e))return e.replace(/(^\s*rgba?\(|\)\s*$)/g,"").split(",").map(function(e,t){return 3==t?parseFloat(e,10):parseInt(e,10)});if("#"==e.charAt(0)&&(e=e.substring(1)),/^([a-fA-F0-9]{3}){1,2}$/g.test(e)){var n=e.length/3,o=e.substr(0,n),r=e.substr(n,n),i=e.substr(2*n);return 1===n&&(o+=o,r+=r,i+=i),[parseInt(o,16),parseInt(r,16),parseInt(i,16)]}}function l(e,n){return e?(4==e.length&&(e=t.copy(e),n?e.pop():n=e.pop()),n&&("number"==typeof n||"string"==typeof n&&n.length)?"rgba("+e.join(",")+","+n+")":"rgb("+e.join(",")+")"):"rgb('0,0,0')"}t.module("material.core.theming",["material.core.theming.palette"]).directive("mdTheme",o).directive("mdThemable",r).provider("$mdTheming",e).run(a);var s,m,u={},h={name:"dark",1:"rgba(0,0,0,0.87)",2:"rgba(0,0,0,0.54)",3:"rgba(0,0,0,0.26)",4:"rgba(0,0,0,0.12)"},p={name:"light",1:"rgba(255,255,255,1.0)",2:"rgba(255,255,255,0.7)",3:"rgba(255,255,255,0.3)",4:"rgba(255,255,255,0.12)"},f="1px 1px 0px rgba(0,0,0,0.4), -1px -1px 0px rgba(0,0,0,0.4)",g="",b=c("rgba(0,0,0,0.87)"),E=c("rgba(255,255,255,0.87"),v=c("rgb(255,255,255)"),M=["primary","accent","warn","background"],$="primary",y={accent:{"default":"A200","hue-1":"A100","hue-2":"A400","hue-3":"A700"},background:{"default":"A100","hue-1":"300","hue-2":"800","hue-3":"900"}},A={background:{"default":"800","hue-1":"300","hue-2":"600","hue-3":"900"}};M.forEach(function(e){var t={"default":"500","hue-1":"300","hue-2":"800","hue-3":"A100"};y[e]||(y[e]=t),A[e]||(A[e]=t)});var C=["50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700"];e.$inject=["$mdColorPalette"],o.$inject=["$mdTheming","$interpolate","$log"],r.$inject=["$mdTheming"],a.$inject=["$injector"]}(),function(){function e(e,n,o,r,i){var a;return a={translate3d:function(e,t,n,o){function r(n){return i(e,{to:n||t,addClass:o.transitionOutClass,removeClass:o.transitionInClass}).start()}return i(e,{from:t,to:n,addClass:o.transitionInClass}).start().then(function(){return r})},waitTransitionEnd:function(e,t){var i=3e3;return n(function(n,a){function d(t){t&&t.target!==e[0]||(t&&o.cancel(c),e.off(r.CSS.TRANSITIONEND,d),n())}t=t||{};var c=o(d,t.timeout||i);e.on(r.CSS.TRANSITIONEND,d)})},calculateZoomToOrigin:function(n,o){var r=o.element,i="translate3d( {centerX}px, {centerY}px, 0 ) scale( {scaleX}, {scaleY} )",d=t.bind(null,e.supplant,i),c=d({centerX:0,centerY:0,scaleX:.5,scaleY:.5});if(r){var l=a.clientRect(r)||a.copyRect(o.bounds),s=a.copyRect(n[0].getBoundingClientRect()),m=a.centerPointFor(s),u=a.centerPointFor(l);c=d({centerX:u.x-m.x,centerY:u.y-m.y,scaleX:Math.round(100*Math.min(.5,l.width/s.width))/100,scaleY:Math.round(100*Math.min(.5,l.height/s.height))/100})}return c},toCss:function(e){function n(e,n,r){t.forEach(n.split(" "),function(e){o[e]=r})}var o={},i="left top right bottom width height x y min-width min-height max-width max-height";return t.forEach(e,function(e,a){if(!t.isUndefined(e))if(i.indexOf(a)>=0)o[a]=e+"px";else switch(a){case"transform":n(a,r.CSS.TRANSFORM,e);break;case"transformOrigin":n(a,r.CSS.TRANSFORM_ORIGIN,e)}}),o},toTransformCss:function(e,n,o){var i={};return t.forEach(r.CSS.TRANSFORM.split(" "),function(t){i[t]=e}),n&&(o=o||"all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) !important",i.transition=o),i},copyRect:function(e,n){return e?(n=n||{},t.forEach("left top right bottom width height".split(" "),function(t){n[t]=Math.round(e[t])}),n.width=n.width||n.right-n.left,n.height=n.height||n.bottom-n.top,n):null},clientRect:function(e){var n=t.element(e)[0].getBoundingClientRect(),o=function(e){return e&&e.width>0&&e.height>0};return o(n)?a.copyRect(n):null},centerPointFor:function(e){return{x:Math.round(e.left+e.width/2),y:Math.round(e.top+e.height/2)}}}}t.module("material.core").factory("$$mdAnimate",["$q","$timeout","$mdConstant","$animateCss",function(t,n,o,r){return function(i){return e(i,t,n,o,r)}}])}(),function(){t.version.minor>=4?t.module("material.animate",[]):!function(){function o(e){return e.replace(/-[a-z]/g,function(e){return e.charAt(1).toUpperCase()})}var r=t.forEach,i=e.ontransitionend===n&&e.onwebkittransitionend!==n,a=i?"-webkit-":"",d=(i?"webkitTransitionEnd ":"")+"transitionend",c=(i?"webkitAnimationEnd ":"")+"animationend",l=["$document",function(e){return function(){return e[0].body.clientWidth+1}}],s=["$$rAF",function(e){return function(){var t=!1;return e(function(){t=!0}),function(n){t?n():e(n)}}}],m=["$q","$$rAFMutex",function(e,n){function o(e){this.setHost(e),this._doneCallbacks=[],this._runInAnimationFrame=n(),this._state=0}var i=0,a=1,d=2;return o.prototype={setHost:function(e){this.host=e||{}},done:function(e){this._state===d?e():this._doneCallbacks.push(e)},progress:t.noop,getPromise:function(){if(!this.promise){var t=this;this.promise=e(function(e,n){t.done(function(t){t===!1?n():e()})})}return this.promise},then:function(e,t){return this.getPromise().then(e,t)},"catch":function(e){return this.getPromise()["catch"](e)},"finally":function(e){return this.getPromise()["finally"](e)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(e){var t=this;t._state===i&&(t._state=a,t._runInAnimationFrame(function(){t._resolve(e)}))},_resolve:function(e){this._state!==d&&(r(this._doneCallbacks,function(t){t(e)}),this._doneCallbacks.length=0,this._state=d)}},o}];t.module("material.animate",[]).factory("$$forceReflow",l).factory("$$AnimateRunner",m).factory("$$rAFMutex",s).factory("$animateCss",["$window","$$rAF","$$AnimateRunner","$$forceReflow","$$jqLite","$timeout",function(e,t,n,l,s,m){function u(e,t){var i=[],l=M(e);t.transitionStyle&&i.push([a+"transition",t.transitionStyle]),t.keyframeStyle&&i.push([a+"animation",t.keyframeStyle]),t.delay&&i.push([a+"transition-delay",t.delay+"s"]),t.duration&&i.push([a+"transition-duration",t.duration+"s"]);var s=t.keyframeStyle||t.to&&(t.duration>0||t.transitionStyle),u=!!t.addClass||!!t.removeClass,f=s||u;$(e,!0),E(e,t);var y,A,C=!1;return{close:close,start:function(){function s(){return C?void 0:(C=!0,y&&A&&e.off(y,A),h(e,t),b(e,t),r(i,function(e){l.style[o(e[0])]=""}),u.complete(!0),u)}var u=new n;return g(function(){if($(e,!1),!f)return s();r(i,function(e){var t=e[0],n=e[1];l.style[o(t)]=n}),h(e,t);var n=p(e);if(0===n.duration)return s();var u=[];t.easing&&(n.transitionDuration&&u.push([a+"transition-timing-function",t.easing]),n.animationDuration&&u.push([a+"animation-timing-function",t.easing])),t.delay&&n.animationDelay&&u.push([a+"animation-delay",t.delay+"s"]),t.duration&&n.animationDuration&&u.push([a+"animation-duration",t.duration+"s"]),r(u,function(e){var t=e[0],n=e[1];l.style[o(t)]=n,i.push(e)});var g=n.delay,b=1e3*g,E=n.duration,M=1e3*E,C=Date.now();y=[],n.transitionDuration&&y.push(d),n.animationDuration&&y.push(c),y=y.join(" "),A=function(e){e.stopPropagation();var t=e.originalEvent||e,n=t.timeStamp||Date.now(),o=parseFloat(t.elapsedTime.toFixed(3));Math.max(n-C,0)>=b&&o>=E&&s()},e.on(y,A),v(e,t),m(s,b+1.5*M,!1)}),u}}}function h(e,t){t.addClass&&(s.addClass(e,t.addClass),t.addClass=null),t.removeClass&&(s.removeClass(e,t.removeClass),t.removeClass=null)}function p(t){function n(e){return i?"Webkit"+e.charAt(0).toUpperCase()+e.substr(1):e}var o=M(t),r=e.getComputedStyle(o),a=f(r[n("transitionDuration")]),d=f(r[n("animationDuration")]),c=f(r[n("transitionDelay")]),l=f(r[n("animationDelay")]);d*=parseInt(r[n("animationIterationCount")],10)||1;var s=Math.max(d,a),m=Math.max(l,c);return{duration:s,delay:m,animationDuration:d,transitionDuration:a,animationDelay:l,transitionDelay:c}}function f(e){var t=0,n=e.split(/\s*,\s*/);return r(n,function(e){"s"==e.charAt(e.length-1)&&(e=e.substring(0,e.length-1)),e=parseFloat(e)||0,t=t?Math.max(e,t):e}),t}function g(e){y&&y(),A.push(e),y=t(function(){y=null;for(var e=l(),t=0;to&&(o=Math.max(-r,o/2)),e.css(n.CSS.TRANSFORM,"translate3d(0,"+(r+o)+"px,0)")}function s(t){if(t.pointer.distanceY>0&&(t.pointer.distanceY>20||Math.abs(t.pointer.velocityY)>o)){var r=e.prop("offsetHeight")-t.pointer.distanceY,a=Math.min(r/t.pointer.velocityY*.75,500);e.css(n.CSS.TRANSITION_DURATION,a+"ms"),i.nextTick(d.cancel,!0)}else e.css(n.CSS.TRANSITION_DURATION,""),e.css(n.CSS.TRANSFORM,"")}var m=l.register(t,"drag",{horizontal:!1});return t.on("$md.dragstart",a).on("$md.drag",c).on("$md.dragend",s),{element:e,cleanup:function(){m(),t.off("$md.dragstart",a),t.off("$md.drag",c),t.off("$md.dragend",s)}}}var h;return{themable:!0,targetEvent:null,onShow:s,onRemove:m,escapeToClose:!0,disableParentScroll:!0}}var o=.5,r=80;return n.$inject=["$animate","$mdConstant","$mdUtil","$mdTheming","$mdBottomSheet","$rootElement","$mdGesture"],e("$mdBottomSheet").setDefaults({methods:["disableParentScroll","escapeToClose","targetEvent"],options:n})}t.module("material.components.bottomSheet",["material.core","material.components.backdrop"]).directive("mdBottomSheet",e).provider("$mdBottomSheet",n),n.$inject=["$$interimElementProvider"]}(),function(){function e(e,n,o,r){function i(e){return t.isDefined(e.href)||t.isDefined(e.ngHref)||t.isDefined(e.ngLink)||t.isDefined(e.uiSref)}function a(e,t){return i(t)?'
':''}function d(a,d,c){var l=d[0];n(d),e.attach(a,d);var s=l.textContent.trim();s||o.expect(d,"aria-label"),i(c)&&t.isDefined(c.ngDisabled)&&a.$watch(c.ngDisabled,function(e){d.attr("tabindex",e?-1:0)}),d.on("click",function(e){c.disabled===!0&&(e.preventDefault(),e.stopImmediatePropagation())}),a.mouseActive=!1,d.on("mousedown",function(){a.mouseActive=!0,r(function(){a.mouseActive=!1},100)}).on("focus",function(){a.mouseActive===!1&&d.addClass("md-focused")}).on("blur",function(){d.removeClass("md-focused")})}return{restrict:"EA",replace:!0,transclude:!0,template:a,link:d}}t.module("material.components.button",["material.core"]).directive("mdButton",e),e.$inject=["$mdButtonInkRipple","$mdTheming","$mdAria","$timeout"]}(),function(){function e(e){return{restrict:"E",link:function(t,n,o){e(n)}}}t.module("material.components.card",["material.core"]).directive("mdCard",e),e.$inject=["$mdTheming"]}(),function(){function e(e,n,o,r,i,a){function d(d,l){return l.type="checkbox",l.tabindex=l.tabindex||"0",d.attr("role",l.type),function(d,l,s,m){function u(e,t,n){s[e]&&d.$watch(s[e],function(e){n[e]&&l.attr(t,n[e])})}function h(e){var t=e.which||e.keyCode;(t===o.KEY_CODE.SPACE||t===o.KEY_CODE.ENTER)&&(e.preventDefault(),l.hasClass("md-focused")||l.addClass("md-focused"),p(e))}function p(e){l[0].hasAttribute("disabled")||d.$apply(function(){var t=s.ngChecked?s.checked:!m.$viewValue;m.$setViewValue(t,e&&e.type),m.$render()})}function f(){m.$viewValue?l.addClass(c):l.removeClass(c)}m=m||i.fakeNgModel(),r(l),s.ngChecked&&d.$watch(d.$eval.bind(d,s.ngChecked),m.$setViewValue.bind(m)),u("ngDisabled","tabindex",{"true":"-1","false":s.tabindex}),n.expectWithText(l,"aria-label"),e.link.pre(d,{on:t.noop,0:{}},s,[m]),d.mouseActive=!1,l.on("click",p).on("keypress",h).on("mousedown",function(){d.mouseActive=!0,a(function(){d.mouseActive=!1},100)}).on("focus",function(){d.mouseActive===!1&&l.addClass("md-focused")}).on("blur",function(){l.removeClass("md-focused")}),m.$render=f}}e=e[0];var c="md-checked";return{restrict:"E",transclude:!0,require:"?ngModel",priority:210,template:'
',compile:d}}t.module("material.components.checkbox",["material.core"]).directive("mdCheckbox",e),e.$inject=["inputDirective","$mdAria","$mdConstant","$mdTheming","$mdUtil","$timeout"]}(),function(){t.module("material.components.chips",["material.core","material.components.autocomplete"])}(),function(){function e(e){function t(e,t){this.$scope=e,this.$element=t}return{restrict:"E",controller:["$scope","$element",t],link:function(t,o,r){o[0];e(o),t.$broadcast("$mdContentLoaded",o),n(o[0])}}}function n(e){t.element(e).on("$md.pressdown",function(t){"t"===t.pointer.type&&(t.$materialScrollFixed||(t.$materialScrollFixed=!0,0===e.scrollTop?e.scrollTop=1:e.scrollHeight===e.scrollTop+e.offsetHeight&&(e.scrollTop-=1)))})}t.module("material.components.content",["material.core"]).directive("mdContent",e),e.$inject=["$mdTheming"]}(),function(){!function(){function e(){return{template:'
',scope:{minDate:"=mdMinDate",maxDate:"=mdMaxDate"},require:["ngModel","mdCalendar"],controller:n,controllerAs:"ctrl",bindToController:!0,link:function(e,t,n,o){var r=o[0],i=o[1];i.configureNgModel(r)}}}function n(e,t,n,o,r,i,a,c,l,s,m){if(a(e),this.items={length:2e3},this.maxDate&&this.minDate){var u=c.getMonthDistance(this.minDate,this.maxDate)+1;u=Math.max(u,1),u+=1,this.items.length=u}if(this.$animate=o,this.$q=r,this.$mdInkRipple=s,this.$mdUtil=m,this.keyCode=i.KEY_CODE,this.dateUtil=c,this.dateLocale=l,this.$element=e,this.$scope=n,this.calendarElement=e[0].querySelector(".md-calendar"),this.calendarScroller=e[0].querySelector(".md-virtual-repeat-scroller"),this.today=this.dateUtil.createDateAtMidnight(),this.firstRenderableDate=this.dateUtil.incrementMonths(this.today,-this.items.length/2),this.minDate&&this.minDate>this.firstRenderableDate)this.firstRenderableDate=this.minDate;else if(this.maxDate){{this.items.length-2}this.firstRenderableDate=this.dateUtil.incrementMonths(this.maxDate,-(this.items.length-2))}this.id=d++,this.ngModelCtrl=null,this.selectedDate=null,this.displayDate=null,this.focusDate=null,this.isInitialized=!1,this.isMonthTransitionInProgress=!1,t.tabindex||e.attr("tabindex","-1");var h=this;this.cellClickHandler=function(){var e=this;this.hasAttribute("data-timestamp")&&n.$apply(function(){var t=Number(e.getAttribute("data-timestamp"));h.setNgModelValue(h.dateUtil.createDateAtMidnight(t))})},this.attachCalendarEventListeners()}t.module("material.components.datepicker",["material.core","material.components.icon","material.components.virtualRepeat"]).directive("mdCalendar",e);var o=265,r=45,i="md-calendar-selected-date",a="md-focus",d=0;n.$inject=["$element","$attrs","$scope","$animate","$q","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil"],n.prototype.configureNgModel=function(e){this.ngModelCtrl=e;var t=this;e.$render=function(){t.changeSelectedDate(t.ngModelCtrl.$viewValue)}},n.prototype.buildInitialCalendarDisplay=function(){this.buildWeekHeader(),this.hideVerticalScrollbar(),this.displayDate=this.selectedDate||this.today,this.isInitialized=!0},n.prototype.hideVerticalScrollbar=function(){var e=this.$element[0],t=e.querySelector(".md-calendar-scroll-mask"),n=this.calendarScroller,o=e.querySelector(".md-calendar-day-header").clientWidth,r=n.offsetWidth-n.clientWidth;t.style.width=o+"px",n.style.width=o+r+"px",n.style.paddingRight=r+"px"},n.prototype.attachCalendarEventListeners=function(){this.$element.on("keydown",t.bind(this,this.handleKeyEvent))},n.prototype.handleKeyEvent=function(e){var t=this;this.$scope.$apply(function(){if(e.which==t.keyCode.ESCAPE||e.which==t.keyCode.TAB)return t.$scope.$emit("md-calendar-close"),void(e.which==t.keyCode.TAB&&e.preventDefault());if(e.which===t.keyCode.ENTER)return t.setNgModelValue(t.displayDate),void e.preventDefault();var n=t.getFocusDateFromKeyEvent(e);n&&(n=t.boundDateByMinAndMax(n),e.preventDefault(),e.stopPropagation(),t.changeDisplayDate(n).then(function(){t.focus(n)}))})},n.prototype.getFocusDateFromKeyEvent=function(e){var t=this.dateUtil,n=this.keyCode;switch(e.which){case n.RIGHT_ARROW:return t.incrementDays(this.displayDate,1);case n.LEFT_ARROW:return t.incrementDays(this.displayDate,-1);case n.DOWN_ARROW:return e.metaKey?t.incrementMonths(this.displayDate,1):t.incrementDays(this.displayDate,7);case n.UP_ARROW:return e.metaKey?t.incrementMonths(this.displayDate,-1):t.incrementDays(this.displayDate,-7);case n.PAGE_DOWN:return t.incrementMonths(this.displayDate,1);case n.PAGE_UP:return t.incrementMonths(this.displayDate,-1);case n.HOME:return t.getFirstDateOfMonth(this.displayDate);case n.END:return t.getLastDateOfMonth(this.displayDate);default:return null}},n.prototype.getSelectedMonthIndex=function(){return this.dateUtil.getMonthDistance(this.firstRenderableDate,this.selectedDate||this.today)},n.prototype.scrollToMonth=function(e){if(this.dateUtil.isValidDate(e)){var t=this.dateUtil.getMonthDistance(this.firstRenderableDate,e);this.calendarScroller.scrollTop=t*o}},n.prototype.setNgModelValue=function(e){this.$scope.$emit("md-calendar-change",e),this.ngModelCtrl.$setViewValue(e),this.ngModelCtrl.$render()},n.prototype.focus=function(e){var t=e||this.selectedDate||this.today,n=this.calendarElement.querySelector(".md-focus");n&&n.classList.remove(a);var o=this.getDateId(t),r=document.getElementById(o);r?(r.classList.add(a), -r.focus()):this.focusDate=t},n.prototype.boundDateByMinAndMax=function(e){var t=e;return this.minDate&&ethis.maxDate&&(t=new Date(this.maxDate.getTime())),t},n.prototype.changeSelectedDate=function(e){var t=this,n=this.selectedDate;this.selectedDate=e,this.changeDisplayDate(e).then(function(){if(n){var o=document.getElementById(t.getDateId(n));o&&(o.classList.remove(i),o.setAttribute("aria-selected","false"))}if(e){var r=document.getElementById(t.getDateId(e));r&&(r.classList.add(i),r.setAttribute("aria-selected","true"))}})},n.prototype.changeDisplayDate=function(e){if(!this.isInitialized)return this.buildInitialCalendarDisplay(),this.$q.when();if(!this.dateUtil.isValidDate(e)||this.isMonthTransitionInProgress)return this.$q.when();this.isMonthTransitionInProgress=!0;var t=this.animateDateChange(e);this.displayDate=e;var n=this;return t.then(function(){n.isMonthTransitionInProgress=!1}),t},n.prototype.animateDateChange=function(e){return this.scrollToMonth(e),this.$q.when()},n.prototype.buildWeekHeader=function(){for(var e=document.createElement("tr"),t=0;7>t;t++){var n=document.createElement("th");n.textContent=this.dateLocale.shortDays[t],e.appendChild(n)}this.$element.find("thead").append(e)},n.prototype.getDateId=function(e){return["md",this.id,e.getFullYear(),e.getMonth(),e.getDate()].join("-")}}()}(),function(){!function(){function e(){return{require:["^^mdCalendar","mdCalendarMonth"],scope:{offset:"=mdMonthOffset"},controller:n,controllerAs:"mdMonthCtrl",bindToController:!0,link:function(e,t,n,o){var r=o[0],i=o[1];i.calendarCtrl=r,i.generateContent(),e.$watch(function(){return i.offset},function(e,t){e!=t&&i.generateContent()})}}}function n(e,t,n){this.dateUtil=t,this.dateLocale=n,this.$element=e,this.calendarCtrl=null,this.offset,this.focusAfterAppend=null}t.module("material.components.datepicker").directive("mdCalendarMonth",e);var o="md-calendar-date-today",r="md-calendar-selected-date",i="md-focus";n.$inject=["$element","$$mdDateUtil","$mdDateLocale"],n.prototype.generateContent=function(){var e=this.calendarCtrl,t=this.dateUtil.incrementMonths(e.firstRenderableDate,this.offset);this.$element.empty(),this.$element.append(this.buildCalendarForMonth(t)),this.focusAfterAppend&&(this.focusAfterAppend.classList.add(i),this.focusAfterAppend.focus(),this.focusAfterAppend=null)},n.prototype.buildDateCell=function(e){var t=this.calendarCtrl,n=document.createElement("td");if(n.tabIndex=-1,n.classList.add("md-calendar-date"),n.setAttribute("role","gridcell"),e){n.setAttribute("tabindex","-1"),n.setAttribute("aria-label",this.dateLocale.longDateFormatter(e)),n.id=t.getDateId(e),n.setAttribute("data-timestamp",e.getTime()),this.dateUtil.isSameDay(e,t.today)&&n.classList.add(o),this.dateUtil.isValidDate(t.selectedDate)&&this.dateUtil.isSameDay(e,t.selectedDate)&&(n.classList.add(r),n.setAttribute("aria-selected","true"));var i=this.dateLocale.dates[e.getDate()];if(this.dateUtil.isDateWithinRange(e,this.calendarCtrl.minDate,this.calendarCtrl.maxDate)){var a=document.createElement("span");n.appendChild(a),a.classList.add("md-calendar-date-selection-indicator"),a.textContent=i,n.addEventListener("click",t.cellClickHandler),t.focusDate&&this.dateUtil.isSameDay(e,t.focusDate)&&(this.focusAfterAppend=n)}else n.classList.add("md-calendar-date-disabled"),n.textContent=i}return n},n.prototype.buildDateRow=function(e){var t=document.createElement("tr");return t.setAttribute("role","row"),t.setAttribute("aria-label",this.dateLocale.weekNumberFormatter(e)),t},n.prototype.buildCalendarForMonth=function(e){var t=this.dateUtil.isValidDate(e)?e:new Date,n=this.dateUtil.getFirstDateOfMonth(t),o=n.getDay(),r=this.dateUtil.getNumberOfDaysInMonth(t),i=document.createDocumentFragment(),a=1,d=this.buildDateRow(a);i.appendChild(d);var c=this.offset===this.calendarCtrl.items.length-1,l=0,s=document.createElement("td");if(s.classList.add("md-calendar-month-label"),this.calendarCtrl.maxDate&&n>this.calendarCtrl.maxDate&&s.classList.add("md-calendar-month-label-disabled"),s.textContent=this.dateLocale.monthHeaderFormatter(t),2>=o){s.setAttribute("colspan","7");var m=this.buildDateRow();if(m.appendChild(s),i.insertBefore(m,d),c)return i}else l=2,s.setAttribute("colspan","2"),d.appendChild(s);for(var u=l;o>u;u++)d.appendChild(this.buildDateCell());for(var h=o,p=n,f=1;r>=f;f++){if(7===h){if(c)return i;h=0,a++,d=this.buildDateRow(a),i.appendChild(d)}p.setDate(f);var g=this.buildDateCell(p);d.appendChild(g),h++}for(;d.childNodes.length<7;)d.appendChild(this.buildDateCell());for(;i.childNodes.length<6;){for(var b=this.buildDateRow(),u=0;7>u;u++)b.appendChild(this.buildDateCell());i.appendChild(b)}return i}}()}(),function(){!function(){t.module("material.components.datepicker").config(["$provide",function(e){function t(){this.months=null,this.shortMonths=null,this.days=null,this.shortDays=null,this.dates=null,this.formatDate=null,this.parseDate=null,this.monthHeaderFormatter=null,this.weekNumberFormatter=null,this.longDateFormatter=null,this.msgCalendar="",this.msgOpenCalendar=""}t.prototype.$get=function(e){function t(e){return e?e.toLocaleDateString():""}function n(e){return new Date(e)}function o(e){e=e.trim();var t=/^(([a-zA-Z]{3,}|[0-9]{1,4})([ \.,]+|[\/\-])){2}([a-zA-Z]{3,}|[0-9]{1,4})$/;return t.test(e)}function r(e){return u.shortMonths[e.getMonth()]+" "+e.getFullYear()}function i(e){return"Week "+e}function a(e){return[u.days[e.getDay()],u.months[e.getMonth()],u.dates[e.getDate()],e.getFullYear()].join(" ")}for(var d=e.DATETIME_FORMATS.DAY.map(function(e){return e[0]}),c=Array(32),l=1;31>=l;l++)c[l]=l;var s="Calendar",m="Open calendar",u={months:this.months||e.DATETIME_FORMATS.MONTH,shortMonths:this.shortMonths||e.DATETIME_FORMATS.SHORTMONTH,days:this.days||e.DATETIME_FORMATS.DAY,shortDays:this.shortDays||d,dates:this.dates||c,formatDate:this.formatDate||t,parseDate:this.parseDate||n,isDateComplete:this.isDateComplete||o,monthHeaderFormatter:this.monthHeaderFormatter||r,weekNumberFormatter:this.weekNumberFormatter||i,longDateFormatter:this.longDateFormatter||a,msgCalendar:this.msgCalendar||s,msgOpenCalendar:this.msgOpenCalendar||m};return u},t.prototype.$get.$inject=["$locale"],e.provider("$mdDateLocale",new t)}])}()}(),function(){!function(){function e(){return{template:'
',require:["ngModel","mdDatepicker"],scope:{minDate:"=mdMinDate",maxDate:"=mdMaxDate",placeholder:"@mdPlaceholder"},controller:n,controllerAs:"ctrl",bindToController:!0,link:function(e,t,n,o){var r=o[0],i=o[1];i.configureNgModel(r)}}}function n(e,n,o,r,i,a,d,c,l,s,m){this.$compile=r,this.$timeout=i,this.dateLocale=l,this.dateUtil=s,this.$mdConstant=a,this.$mdUtil=c,this.$$rAF=m,this.ngModelCtrl=null,this.inputElement=n[0].querySelector("input"),this.ngInputElement=t.element(this.inputElement),this.inputContainer=n[0].querySelector(".md-datepicker-input-container"),this.calendarPane=n[0].querySelector(".md-datepicker-calendar-pane"),this.calendarButton=n[0].querySelector(".md-datepicker-button"),this.inputMask=n[0].querySelector(".md-datepicker-input-mask-opaque"),this.$element=n,this.$attrs=o,this.$scope=e,this.date=null,this.isFocused=!1,this.isDisabled,this.setDisabled(n[0].disabled||t.isString(o.disabled)),this.isCalendarOpen=!1,this.calendarPaneOpenedFrom=null,this.calendarPane.id="md-date-pane"+c.nextUid(),d(n),this.bodyClickHandler=t.bind(this,this.handleBodyClick),o.tabindex||n.attr("tabindex","-1"),this.installPropertyInterceptors(),this.attachChangeListeners(),this.attachInteractionListeners();var u=this;e.$on("$destroy",function(){u.detachCalendarPane()})}t.module("material.components.datepicker").directive("mdDatepicker",e);var o=3,r="md-datepicker-invalid",i=500;n.$inject=["$scope","$element","$attrs","$compile","$timeout","$mdConstant","$mdTheming","$mdUtil","$mdDateLocale","$$mdDateUtil","$$rAF"],n.prototype.configureNgModel=function(e){this.ngModelCtrl=e;var t=this;e.$render=function(){t.date=t.ngModelCtrl.$viewValue,t.inputElement.value=t.dateLocale.formatDate(t.date),t.resizeInputElement()}},n.prototype.attachChangeListeners=function(){var e=this;e.$scope.$on("md-calendar-change",function(t,n){e.ngModelCtrl.$setViewValue(n),e.date=n,e.inputElement.value=e.dateLocale.formatDate(n),e.closeCalendarPane(),e.resizeInputElement(),e.inputContainer.classList.remove(r)}),e.ngInputElement.on("input",t.bind(e,e.resizeInputElement)),e.ngInputElement.on("input",e.$mdUtil.debounce(e.handleInputEvent,i,e))},n.prototype.attachInteractionListeners=function(){var e=this,t=this.$scope,n=this.$mdConstant.KEY_CODE;e.ngInputElement.on("keydown",function(o){o.altKey&&o.keyCode==n.DOWN_ARROW&&(e.openCalendarPane(o),t.$digest())}),t.$on("md-calendar-close",function(){e.closeCalendarPane()})},n.prototype.installPropertyInterceptors=function(){var e=this;this.$attrs.ngDisabled&&this.$element.scope().$watch(this.$attrs.ngDisabled,function(t){e.setDisabled(t)}),Object.defineProperty(this,"placeholder",{get:function(){return e.inputElement.placeholder},set:function(t){e.inputElement.placeholder=t||""}})},n.prototype.setDisabled=function(e){this.isDisabled=e,this.inputElement.disabled=e,this.calendarButton.disabled=e},n.prototype.resizeInputElement=function(){this.inputElement.size=this.inputElement.value.length+o},n.prototype.handleInputEvent=function(){var e=this.inputElement.value,t=this.dateLocale.parseDate(e);this.dateUtil.setDateTimeToMidnight(t),this.dateUtil.isValidDate(t)&&this.dateLocale.isDateComplete(e)&&this.dateUtil.isDateWithinRange(t,this.minDate,this.maxDate)?(this.ngModelCtrl.$setViewValue(t),this.date=t,this.inputContainer.classList.remove(r)):this.inputContainer.classList.toggle(r,e)},n.prototype.attachCalendarPane=function(){var e=this.calendarPane;this.$element.addClass("md-datepicker-open");var t=this.inputContainer.getBoundingClientRect(),n=document.body.getBoundingClientRect();e.style.left=t.left-n.left+"px",e.style.top=t.top-n.top+"px",document.body.appendChild(this.calendarPane),this.inputMask.style.left=t.width+"px",this.$$rAF(function(){e.classList.add("md-pane-open")})},n.prototype.detachCalendarPane=function(){this.$element.removeClass("md-datepicker-open"),this.calendarPane.classList.remove("md-pane-open"),this.calendarPane.parentNode&&this.calendarPane.parentNode.removeChild(this.calendarPane)},n.prototype.openCalendarPane=function(e){if(!this.isCalendarOpen&&!this.isDisabled){this.isCalendarOpen=!0,this.calendarPaneOpenedFrom=e.target,this.attachCalendarPane(),this.focusCalendar(),this.$mdUtil.disableScrollAround(this.calendarPane);var t=this;this.$mdUtil.nextTick(function(){document.body.addEventListener("click",t.bodyClickHandler)},!1)}},n.prototype.closeCalendarPane=function(){this.isCalendarOpen=!1,this.detachCalendarPane(),this.calendarPaneOpenedFrom.focus(),this.calendarPaneOpenedFrom=null,this.$mdUtil.enableScrolling(),document.body.removeEventListener("click",this.bodyClickHandler)},n.prototype.getCalendarCtrl=function(){return t.element(this.calendarPane.querySelector("md-calendar")).controller("mdCalendar")},n.prototype.focusCalendar=function(){var e=this;this.$mdUtil.nextTick(function(){e.getCalendarCtrl().focus()},!1)},n.prototype.setFocused=function(e){this.isFocused=e},n.prototype.handleBodyClick=function(e){if(this.isCalendarOpen){var t=this.$mdUtil.getClosest(e.target,"md-calendar");t||this.closeCalendarPane(),this.$scope.$digest()}}}()}(),function(){!function(){t.module("material.components.datepicker").factory("$$mdDateUtil",function(){function e(e){return new Date(e.getFullYear(),e.getMonth(),1)}function n(e){return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()}function o(e){return new Date(e.getFullYear(),e.getMonth()+1,1)}function r(e){return new Date(e.getFullYear(),e.getMonth()-1,1)}function i(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()}function a(e,t){return e.getDate()==t.getDate()&&i(e,t)}function d(e,t){var n=o(e);return i(n,t)}function c(e,t){var n=r(e);return i(t,n)}function l(e,t){return b((e.getTime()+t.getTime())/2)}function s(t){var n=e(t);return Math.floor((n.getDay()+t.getDate()-1)/7)}function m(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)}function u(e,t){var o=new Date(e.getFullYear(),e.getMonth()+t,1),r=n(o);return o.setDate(r=n)&&(!t.isDate(o)||o>=e)}return{getFirstDateOfMonth:e,getNumberOfDaysInMonth:n,getDateInNextMonth:o,getDateInPreviousMonth:r,isInNextMonth:d,isInPreviousMonth:c,getDateMidpoint:l,isSameMonthAndYear:i,getWeekOfMonth:s,incrementDays:m,incrementMonths:u,getLastDateOfMonth:p,isSameDay:a,getMonthDistance:h,isValidDate:f,setDateTimeToMidnight:g,createDateAtMidnight:b,isDateWithinRange:E}})}()}(),function(){function e(e,n){return{restrict:"E",link:function(o,r,i){n(r),e(function(){function e(){r.toggleClass("md-content-overflow",o.scrollHeight>o.clientHeight)}var n,o=r[0].querySelector("md-dialog-content");o&&(n=o.getElementsByTagName("img"),e(),t.element(n).on("load",e))})}}}function n(e){function n(e,t){return{template:['',' ','

{{ dialog.title }}

','
',"
",'
',' '," {{ dialog.cancel }}"," ",' '," {{ dialog.ok }}"," ","
","
"].join("").replace(/\s\s+/g,""),controller:function(){this.hide=function(){e.hide(!0)},this.abort=function(){e.cancel()}},controllerAs:"dialog",bindToController:!0,theme:t.defaultTheme()}}function o(e,n,o,r,i,a,d,c){function l(e,n,r,i){function d(){function e(){var e=n[0].querySelector(".dialog-close");if(!e){var o=n[0].querySelectorAll(".md-actions button");e=o[o.length-1]}return t.element(e)}if(r.focusOnOpen){var i=o.findFocusTarget(n)||e();i.focus()}}function c(){if(i){var e=/<\/[\w-]*>/gm,t=i.content,n=e.test(t);n||(t=o.supplant("

{0}

",[t])),i.content=t}}return n=o.extractElementByName(n,"md-dialog"),t.element(a[0].body).addClass("md-dialog-is-showing"),c(),m(n,r),p(n.find("md-dialog"),r),h(e,n,r),b(n,r).then(function(){u(n,r),f(n,r),d()})}function s(e,n,o){return o.deactivateListeners(),o.unlockScreenReader(),o.hideBackdrop(),E(n,o)["finally"](function(){t.element(a[0].body).removeClass("md-dialog-is-showing"),n.remove(),o.origin.focus()})}function m(e,n){var o={element:null,bounds:null,focus:t.noop};n.origin=t.extend({},o,n.origin||{});var r=t.element((n.targetEvent||{}).target);r&&r.length&&(n.origin.element=r,n.origin.bounds=r[0].getBoundingClientRect(),n.origin.focus=function(){r.focus()}),n.parent=t.element(n.parent||c)}function u(t,n){var i=[],a=function(){var t="alert"==n.$type?e.hide:e.cancel;o.nextTick(t,!0)};if(n.escapeToClose){var d=n.parent,c=function(e){e.keyCode===r.KEY_CODE.ESCAPE&&(e.stopPropagation(),e.preventDefault(),a())};t.on("keyup",c),d.on("keyup",c),i.push(function(){t.off("keyup",c),d.off("keyup",c)})}if(n.clickOutsideToClose){var d=t,l=function(e){e.target===d[0]&&(e.stopPropagation(),e.preventDefault(),a())};d.on("click",l),i.push(function(){d.off("click",l)})}n.deactivateListeners=function(){i.forEach(function(e){e()}),n.deactivateListeners=null}}function h(e,t,n){n.disableParentScroll&&(n.restoreScroll=o.disableScrollAround(t,n.parent)),n.hasBackdrop&&(n.backdrop=o.createBackdrop(e,"md-dialog-backdrop md-opaque"),i.enter(n.backdrop,n.parent)),n.hideBackdrop=function(){n.backdrop&&i.leave(n.backdrop),n.disableParentScroll&&(n.restoreScroll(),delete n.restoreScroll),n.hideBackdrop=null}}function p(e,t){var r="alert"===t.$type?"alertdialog":"dialog",i=e.find("md-dialog-content"),a=e.attr("id")||"dialog_"+o.nextUid();e.attr({role:r,tabIndex:"-1"}),0===i.length&&(i=e),i.attr("id",a),e.attr("aria-describedby",a),t.ariaLabel?n.expect(e,"aria-label",t.ariaLabel):n.expectAsync(e,"aria-label",function(){var e=i.text().split(/\s+/);return e.length>3&&(e=e.slice(0,3).concat("...")),e.join(" ")})}function f(e,t){function n(e){for(;e.parentNode;){if(e===document.body)return;for(var t=e.parentNode.children,r=0;r'+e+""}}}return n.$inject=["$mdDialog","$mdTheming"],o.$inject=["$mdDialog","$mdAria","$mdUtil","$mdConstant","$animate","$document","$window","$rootElement"],e("$mdDialog").setDefaults({methods:["disableParentScroll","hasBackdrop","clickOutsideToClose","escapeToClose","targetEvent","parent"],options:o}).addPreset("alert",{methods:["title","content","ariaLabel","ok","theme"],options:n}).addPreset("confirm",{methods:["title","content","ariaLabel","ok","cancel","theme"],options:n})}t.module("material.components.dialog",["material.core","material.components.backdrop"]).directive("mdDialog",e).provider("$mdDialog",n),e.$inject=["$$rAF","$mdTheming"],n.$inject=["$$interimElementProvider"]}(),function(){function e(e){return{restrict:"E",link:e}}t.module("material.components.divider",["material.core"]).directive("mdDivider",e),e.$inject=["$mdTheming"]}(),function(){!function(){function e(){return{restrict:"E",require:["^?mdFabSpeedDial","^?mdFabToolbar"],compile:function(e,n){var o=e.children(),r=!1;t.forEach(["","data-","x-"],function(e){r=r||(o.attr(e+"ng-repeat")?!0:!1)}),r?o.addClass("md-fab-action-item"):o.wrap('
')}}}t.module("material.components.fabActions",["material.core"]).directive("mdFabActions",e)}()}(),function(){!function(){function n(n,o,r,i,a){function d(){H.direction=H.direction||"down",H.isOpen=H.isOpen||!1,p()}function c(){var e=["mousedown","mouseup","click","touchstart","touchend","focusin","focusout"];t.forEach(e,function(e){o.on(e,u)}),n.$on("$destroy",function(){t.forEach(e,function(e){o.off(e,u)})})}function l(){I=[]}function s(e){var n,o,r,i=0;do o=e.map(function(e){return e.replace("?","")}),n=t.equals(I,o),n||(e=m(e),r=e.length>=I.length&&e.length!==o.length);while(10>i&&!n&&r);return n}function m(e){var t=!1;return e.filter(function(e){return t||-1===e.indexOf("?")?!0:(t=!0,!1)})}function u(e){return I.push(e.type),s(["mousedown","focusout?","focusin?","mouseup","click"])?(N(e),void l()):s(["touchstart?","touchend?","click"])?(N(e),void l()):s(["focusin"])?(H.open(),void l()):s(["focusout"])?(H.close(),void l()):void h()}function h(){D&&e.clearTimeout(D),D=e.setTimeout(function(){l()},250)}function p(){H.currentActionIndex=-1}function f(){n.$watch("vm.direction",function(e,t){r.removeClass(o,"md-"+t),r.addClass(o,"md-"+e),p()});var e,t;n.$watch("vm.isOpen",function(n){p(),e&&t||(e=_(),t=S()),n?b():E();var i=n?"md-is-open":"",a=n?"":"md-is-open";e.attr("aria-haspopup",!0),e.attr("aria-expanded",n),t.attr("aria-hidden",!n),r.setClass(o,i,a)})}function g(){i.nextTick(function(){r.addClass(o,"md-noop")})}function b(){t.element(document).on("keydown",v)}function E(){t.element(document).off("keydown",v)}function v(e){switch(e.which){case a.KEY_CODE.SPACE:return e.preventDefault(),!1;case a.KEY_CODE.ESCAPE:return H.close(),e.preventDefault(),!1;case a.KEY_CODE.LEFT_ARROW:return A(e),!1;case a.KEY_CODE.UP_ARROW:return C(e),!1;case a.KEY_CODE.RIGHT_ARROW:return T(e),!1;case a.KEY_CODE.DOWN_ARROW:return k(e),!1}}function M(e){y(e,-1)}function $(e){y(e,1)}function y(e,n){var o=S()[0].querySelectorAll(".md-fab-action-item");t.forEach(o,function(e){t.element(t.element(e).children()[0]).attr("tabindex",-1)}),H.currentActionIndex=H.currentActionIndex+n,H.currentActionIndex=Math.min(o.length-1,H.currentActionIndex),H.currentActionIndex=Math.max(0,H.currentActionIndex);var r=t.element(o[H.currentActionIndex]).children()[0];t.element(r).attr("tabindex",0),r.focus(),e.preventDefault(),e.stopImmediatePropagation()}function A(e){"left"===H.direction?$(e):M(e)}function C(e){"down"===H.direction?M(e):$(e)}function T(e){"left"===H.direction?M(e):$(e)}function k(e){"up"===H.direction?M(e):$(e)}function w(e){return i.getClosest(e,"md-fab-trigger")}function x(e){return i.getClosest(e,"md-fab-actions")}function N(e){w(e.target)&&H.toggle(),x(e.target)&&H.close()}function _(){return o.find("md-fab-trigger")}function S(){return o.find("md-fab-actions")}var H=this;H.open=function(){n.$evalAsync("vm.isOpen = true")},H.close=function(){n.$evalAsync("vm.isOpen = false"),o.find("md-fab-trigger")[0].focus()},H.toggle=function(){n.$evalAsync("vm.isOpen = !vm.isOpen")},d(),c(),f(),g();var D,I=[]}t.module("material.components.fabShared",["material.core"]).controller("FabController",n),n.$inject=["$scope","$element","$animate","$mdUtil","$mdConstant"]}()}(),function(){!function(){function n(){function e(e,t){t.prepend('
')}return{restrict:"E",scope:{direction:"@?mdDirection",isOpen:"=?mdOpen"},bindToController:!0,controller:"FabController",controllerAs:"vm",link:e}}function o(){function n(n){var o=n[0],r=n.controller("mdFabSpeedDial"),i=o.querySelectorAll(".md-fab-action-item"),a=o.querySelector("md-fab-trigger"),d=o.querySelector(".md-css-variables"),c=parseInt(e.getComputedStyle(d).zIndex);t.forEach(i,function(e,t){var n=e.style;n.transform=n.webkitTransform="",n.transitionDelay="",n.opacity=1,n.zIndex=i.length-t+c}),a.style.zIndex=c+i.length+1,r.isOpen||t.forEach(i,function(e,t){var n,o,i=e.style;switch(r.direction){case"up":n=e.scrollHeight*(t+1),o="Y";break;case"down":n=-e.scrollHeight*(t+1),o="Y";break;case"left":n=e.scrollWidth*(t+1),o="X";break;case"right":n=-e.scrollWidth*(t+1),o="X"}var a="translate"+o+"("+n+"px)";i.transform=i.webkitTransform=a})}return{addClass:function(e,t,o){e.hasClass("md-fling")&&(n(e),o())},removeClass:function(e,t,o){n(e),o()}}}function r(){function e(e){var o=e[0],r=e.controller("mdFabSpeedDial"),i=o.querySelectorAll(".md-fab-action-item");t.forEach(i,function(e,t){var o=e.style,a=t*n;o.opacity=r.isOpen?1:0,o.transform=o.webkitTransform=r.isOpen?"scale(1)":"scale(0)",o.transitionDelay=(r.isOpen?a:i.length-a)+"ms"})}var n=65;return{addClass:function(t,n,o){e(t),o()},removeClass:function(t,n,o){e(t),o()}}}t.module("material.components.fabSpeedDial",["material.core","material.components.fabShared","material.components.fabTrigger","material.components.fabActions"]).directive("mdFabSpeedDial",n).animation(".md-fling",o).animation(".md-scale",r).service("mdFabSpeedDialFlingAnimation",o).service("mdFabSpeedDialScaleAnimation",r)}()}(),function(){!function(){function n(){function e(e,t,n){t.addClass("md-fab-toolbar"),t.find("md-fab-trigger").find("button").prepend('
')}return{restrict:"E",transclude:!0,template:'
',scope:{direction:"@?mdDirection",isOpen:"=?mdOpen"},bindToController:!0,controller:"FabController",controllerAs:"vm",link:e}}function o(){function n(n,o,r){if(o){var i=n[0],a=n.controller("mdFabToolbar"),d=i.querySelector(".md-fab-toolbar-background"),c=i.querySelector("md-fab-trigger button"),l=i.querySelector("md-toolbar"),s=i.querySelector("md-fab-trigger button md-icon"),m=n.find("md-fab-actions").children();if(c&&d){var u=e.getComputedStyle(c).getPropertyValue("background-color"),h=i.offsetWidth,p=(i.offsetHeight,2*h);d.style.backgroundColor=u,d.style.borderRadius=h+"px",a.isOpen?(l.style.pointerEvents="initial",d.style.width=p+"px",d.style.height=p+"px",d.style.top=-(p/2)+"px",n.hasClass("md-right")&&(d.style.left=-(p/2)+"px",d.style.right=null),n.hasClass("md-left")&&(d.style.right=-(p/2)+"px",d.style.left=null),d.style.transitionDelay="0ms",s&&(s.style.transitionDelay=".3s"),t.forEach(m,function(e,t){e.style.transitionDelay=25*(m.length-t)+"ms"})):(l.style.pointerEvents="none",d.style.width=c.offsetWidth+"px",d.style.height=c.offsetHeight+"px",d.style.top="0px",n.hasClass("md-right")&&(d.style.left="0px",d.style.right=null),n.hasClass("md-left")&&(d.style.right="0px",d.style.left=null),d.style.transitionDelay="200ms",s&&(s.style.transitionDelay="0ms"),t.forEach(m,function(e,t){e.style.transitionDelay=200+25*t+"ms"}))}}}return{addClass:function(e,t,o){n(e,t,o),o()},removeClass:function(e,t,o){n(e,t,o),o()}}}t.module("material.components.fabToolbar",["material.core","material.components.fabShared","material.components.fabTrigger","material.components.fabActions"]).directive("mdFabToolbar",n).animation(".md-fab-toolbar",o).service("mdFabToolbarAnimation",o)}()}(),function(){!function(){function e(){return{restrict:"E",require:["^?mdFabSpeedDial","^?mdFabToolbar"]}}t.module("material.components.fabTrigger",["material.core"]).directive("mdFabTrigger",e)}()}(),function(){function e(e,o,r,i){function a(n,a,d,c){function l(){for(var e in o.MEDIA)i(e),i.getQuery(o.MEDIA[e]).addListener(A);return i.watchResponsiveAttributes(["md-cols","md-row-height"],d,m)}function s(){c.layoutDelegate=t.noop,C();for(var e in o.MEDIA)i.getQuery(o.MEDIA[e]).removeListener(A)}function m(e){null==e?c.invalidateLayout():i(e)&&c.invalidateLayout()}function u(e){var o=g(),i={tileSpans:b(o),colCount:E(),rowMode:$(),rowHeight:M(),gutter:v()};if(e||!t.equals(i,T)){var d=r(i.colCount,i.tileSpans,o).map(function(e,n){return{grid:{element:a,style:f(i.colCount,n,i.gutter,i.rowMode,i.rowHeight)},tiles:e.map(function(e,n){return{element:t.element(o[n]),style:p(e.position,e.spans,i.colCount,i.rowCount,i.gutter,i.rowMode,i.rowHeight)}})}}).reflow().performance();n.mdOnLayout({$event:{performance:d}}),T=i}}function h(e){return k+e+w}function p(e,t,n,o,r,i,a){var d=1/n*100,c=(n-1)/n,l=x({share:d,gutterShare:c,gutter:r}),s={left:N({unit:l,offset:e.col,gutter:r}),width:_({unit:l,span:t.col,gutter:r}),paddingTop:"",marginTop:"",top:"",height:""};switch(i){case"fixed":s.top=N({unit:a,offset:e.row,gutter:r}),s.height=_({unit:a,span:t.row,gutter:r});break;case"ratio":var m=d/a,u=x({share:m,gutterShare:c,gutter:r});s.paddingTop=_({unit:u,span:t.row,gutter:r}),s.marginTop=N({unit:u,offset:e.row,gutter:r});break;case"fit":var h=(o-1)/o,m=1/o*100,u=x({share:m,gutterShare:h,gutter:r});s.top=N({unit:u,offset:e.row,gutter:r}),s.height=_({unit:u,span:t.row,gutter:r})}return s}function f(e,t,n,o,r){var i={height:"",paddingBottom:""};switch(o){case"fixed":i.height=_({unit:r,span:t,gutter:n});break;case"ratio":var a=1===e?0:(e-1)/e,d=1/e*100,c=d*(1/r),l=x({share:c,gutterShare:a,gutter:n});i.paddingBottom=_({unit:l,span:t,gutter:n});break;case"fit":}return i}function g(){return[].filter.call(a.children(),function(e){return"MD-GRID-TILE"==e.tagName})}function b(e){return[].map.call(e,function(e){var n=t.element(e).controller("mdGridTile");return{row:parseInt(i.getResponsiveAttribute(n.$attrs,"md-rowspan"),10)||1,col:parseInt(i.getResponsiveAttribute(n.$attrs,"md-colspan"),10)||1}})}function E(){var e=parseInt(i.getResponsiveAttribute(d,"md-cols"),10);if(isNaN(e))throw"md-grid-list: md-cols attribute was not found, or contained a non-numeric value";return e}function v(){return y(i.getResponsiveAttribute(d,"md-gutter")||1)}function M(){var e=i.getResponsiveAttribute(d,"md-row-height");switch($()){case"fixed":return y(e);case"ratio":var t=e.split(":");return parseFloat(t[0])/parseFloat(t[1]);case"fit":return 0}}function $(){var e=i.getResponsiveAttribute(d,"md-row-height");return"fit"==e?"fit":-1!==e.indexOf(":")?"ratio":"fixed"}function y(e){return/\D$/.test(e)?e:e+"px"}a.attr("role","list"),c.layoutDelegate=u;var A=t.bind(c,c.invalidateLayout),C=l();n.$on("$destroy",s);var T,k=e.startSymbol(),w=e.endSymbol(),x=e(h("share")+"% - ("+h("gutter")+" * "+h("gutterShare")+")"),N=e("calc(("+h("unit")+" + "+h("gutter")+") * "+h("offset")+")"),_=e("calc(("+h("unit")+") * "+h("span")+" + ("+h("span")+" - 1) * "+h("gutter")+")")}return{restrict:"E",controller:n,scope:{mdOnLayout:"&"},link:a}}function n(e){this.layoutInvalidated=!1,this.tilesInvalidated=!1,this.$timeout_=e.nextTick,this.layoutDelegate=t.noop}function o(e){function n(t,n){var o,a,d,c,l,s;return c=e.time(function(){a=r(t,n)}),o={layoutInfo:function(){return a},map:function(t){return l=e.time(function(){var e=o.layoutInfo();d=t(e.positioning,e.rowCount)}),o},reflow:function(t){return s=e.time(function(){var e=t||i;e(d.grid,d.tiles)}),o},performance:function(){return{tileCount:n.length,layoutTime:c,mapTime:l,reflowTime:s,totalTime:c+l+s}}}}function o(e,t){e.element.css(e.style),t.forEach(function(e){e.element.css(e.style)})}function r(e,t){function n(t,n){if(t.col>e)throw"md-grid-list: Tile at position "+n+" has a colspan ("+t.col+") that exceeds the column count ("+e+")";for(var a=0,s=0;s-a=e?o():(a=l.indexOf(0,d),-1!==a&&-1!==(s=i(a+1))?d=s+1:(a=s=0,o()));return r(a,t.col,t.row),d=a+t.col,{col:a,row:c}}function o(){d=0,c++,r(0,e,-1)}function r(e,t,n){for(var o=e;e+t>o;o++)l[o]=Math.max(l[o]+n,0)}function i(e){var t;for(t=e;tn;n++)t.push(0);return t}var d=0,c=0,l=a();return{positioning:t.map(function(e,t){return{spans:e,position:n(e,t)}}),rowCount:c+Math.max.apply(Math,l)}}var i=o;return n.animateWith=function(e){i=t.isFunction(e)?e:o},n}function r(e){function n(n,o,r,i){o.attr("role","listitem");var a=e.watchResponsiveAttributes(["md-colspan","md-rowspan"],r,t.bind(i,i.invalidateLayout));i.invalidateTiles(),n.$on("$destroy",function(){a(), -i.invalidateLayout()}),t.isDefined(n.$parent.$index)&&n.$watch(function(){return n.$parent.$index},function(e,t){e!==t&&i.invalidateTiles()})}return{restrict:"E",require:"^mdGridList",template:"
",transclude:!0,scope:{},controller:["$attrs",function(e){this.$attrs=e}],link:n}}function i(){return{template:"
",transclude:!0}}t.module("material.components.gridList",["material.core"]).directive("mdGridList",e).directive("mdGridTile",r).directive("mdGridTileFooter",i).directive("mdGridTileHeader",i).factory("$mdGridLayout",o),e.$inject=["$interpolate","$mdConstant","$mdGridLayout","$mdMedia"],n.$inject=["$mdUtil"],n.prototype={invalidateTiles:function(){this.tilesInvalidated=!0,this.invalidateLayout()},invalidateLayout:function(){this.layoutInvalidated||(this.layoutInvalidated=!0,this.$timeout_(t.bind(this,this.layout)))},layout:function(){try{this.layoutDelegate(this.tilesInvalidated)}finally{this.layoutInvalidated=!1,this.tilesInvalidated=!1}}},o.$inject=["$mdUtil"],r.$inject=["$mdMedia"]}(),function(){t.module("material.components.icon",["material.core"])}(),function(){function e(e,t){function n(t,n,o){e(n)}function o(e,n,o){var r=this;r.isErrorGetter=o.mdIsError&&t(o.mdIsError),r.delegateClick=function(){r.input.focus()},r.element=n,r.setFocused=function(e){n.toggleClass("md-input-focused",!!e)},r.setHasValue=function(e){n.toggleClass("md-input-has-value",!!e)},r.setInvalid=function(e){n.toggleClass("md-input-invalid",!!e)},e.$watch(function(){return r.label&&r.input},function(e){e&&!r.label.attr("for")&&r.label.attr("for",r.input.attr("id"))})}return o.$inject=["$scope","$element","$attrs"],{restrict:"E",link:n,controller:o}}function n(){return{restrict:"E",require:"^?mdInputContainer",link:function(e,t,n,o){o&&!n.mdNoFloat&&(o.label=t,e.$on("$destroy",function(){o.label=null}))}}}function o(e,n,o){function r(r,i,a,d){function c(e){return m.setHasValue(!h.$isEmpty(e)),e}function l(){m.setHasValue(i.val().length>0||(i[0].validity||{}).badInput)}function s(){function o(e){return f(),e}function a(){if(s.style.height=s.offsetHeight+"px",i.addClass("md-no-flex"),isNaN(u)){l.style.height="auto",l.scrollTop=0;var e=d();e&&(l.style.height=e+"px")}else{l.setAttribute("rows",1),p||(l.style.minHeight="0",p=i.prop("clientHeight"),l.style.minHeight=null);var t=Math.max(u,Math.round(l.scrollHeight/p));l.setAttribute("rows",t)}i.removeClass("md-no-flex"),s.style.height="auto"}function d(){var e=l.scrollHeight-l.offsetHeight;return l.offsetHeight+(e>0?e:0)}function c(e){l.scrollTop=0;var t=l.scrollHeight-l.offsetHeight,n=l.offsetHeight+t;l.style.height=n+"px"}if(!t.isDefined(i.attr("md-no-autogrow"))){var l=i[0],s=m.element[0],u=0/0,p=null;l.hasAttribute("rows")&&(u=parseInt(l.getAttribute("rows")));var f=e.debounce(a,1);h?(h.$formatters.push(o),h.$viewChangeListeners.push(o)):f(),i.on("keydown input",f),isNaN(u)&&(i.attr("rows","1"),i.on("scroll",c)),t.element(n).on("resize",f),r.$on("$destroy",function(){t.element(n).off("resize",f)})}}var m=d[0],u=!!d[1],h=d[1]||e.fakeNgModel(),p=t.isDefined(a.readonly);if(m){if(m.input)throw new Error(" can only have *one* ,