From c51bed258080303937bae494f665b04c9d2d8911 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Aug 2015 09:43:55 -0400 Subject: [PATCH] (fix) updated js/css/map files for packaging --- UI/WebServerResources/angular-material | 2 +- UI/WebServerResources/css/styles.css | 881 +++++++----------- UI/WebServerResources/css/styles.css.map | 2 +- UI/WebServerResources/js/Common.js | 2 +- UI/WebServerResources/js/Common.js.map | 2 +- .../js/Common/Acl.service.js | 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 | 2 +- .../js/Mailer.services.js.map | 2 +- UI/WebServerResources/js/Main.js | 2 +- UI/WebServerResources/js/Main.js.map | 2 +- UI/WebServerResources/js/Scheduler.js | 2 +- UI/WebServerResources/js/Scheduler.js.map | 2 +- .../js/Scheduler.services.js | 2 +- .../js/Scheduler.services.js.map | 2 +- .../js/vendor/angular-file-upload.min.js | 4 +- .../js/vendor/angular-material.js | 127 ++- .../js/vendor/angular-material.min.js | 15 +- 23 files changed, 465 insertions(+), 600 deletions(-) diff --git a/UI/WebServerResources/angular-material b/UI/WebServerResources/angular-material index c5c148df8..f60b5e5a7 160000 --- a/UI/WebServerResources/angular-material +++ b/UI/WebServerResources/angular-material @@ -1 +1 @@ -Subproject commit c5c148df85b900830c3afffc43668b26e25c3e24 +Subproject commit f60b5e5a7713af9058f9a29966f6e324cae901b9 diff --git a/UI/WebServerResources/css/styles.css b/UI/WebServerResources/css/styles.css index 6efc4eec1..b2f1239b3 100644 --- a/UI/WebServerResources/css/styles.css +++ b/UI/WebServerResources/css/styles.css @@ -6140,327 +6140,6 @@ md-autocomplete { .md-autocomplete-suggestions { border: 1px solid #fff; } } -/*! _extends.scss - */ -md-list { - display: block; - padding: 8px 0px 8px 0px; } - md-list .md-subheader { - font-size: 14px; - font-weight: 500; - letter-spacing: 0.010em; - line-height: 0.75em; } - -md-list-item.md-proxy-focus.md-focused .md-no-style { - -webkit-transition: background-color 0.15s linear; - transition: background-color 0.15s linear; } - -md-list-item.md-no-proxy, -md-list-item .md-no-style { - position: relative; - padding: 0px 16px; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - md-list-item.md-no-proxy.md-button, - md-list-item .md-no-style.md-button { - font-size: inherit; - height: inherit; - text-align: left; - text-transform: none; - width: 100%; - white-space: normal; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: inherit; - -ms-flex-direction: inherit; - flex-direction: inherit; - -webkit-box-align: inherit; - -webkit-align-items: inherit; - -ms-flex-align: inherit; - align-items: inherit; } - md-list-item.md-no-proxy:focus, - md-list-item .md-no-style:focus { - outline: none; } - -md-list-item.md-with-secondary { - position: relative; } - -md-list-item.md-clickable:hover { - cursor: pointer; } - -md-list-item md-divider { - position: absolute; - bottom: 0; - left: 0; - width: 100%; } - md-list-item md-divider[md-inset] { - left: 96px; - width: calc(100% - 96px); - margin: 0; } - -md-list-item, md-list-item .md-list-item-inner { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - min-height: 64px; } - md-list-item > div.md-primary > md-icon, - md-list-item > div.md-secondary > md-icon, - md-list-item > md-icon:first-child, - md-list-item > md-icon.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-icon, - md-list-item .md-list-item-inner > div.md-secondary > md-icon, - md-list-item .md-list-item-inner > md-icon:first-child, - md-list-item .md-list-item-inner > md-icon.md-secondary { - width: 24px; - margin-top: 16px; - margin-bottom: 12px; - box-sizing: content-box; } - md-list-item > div.md-primary > md-checkbox, - md-list-item > div.md-secondary > md-checkbox, - md-list-item > md-checkbox:first-child, - md-list-item md-checkbox.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-checkbox, - md-list-item .md-list-item-inner > div.md-secondary > md-checkbox, - md-list-item .md-list-item-inner > md-checkbox:first-child, - md-list-item .md-list-item-inner md-checkbox.md-secondary { - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; } - md-list-item > div.md-primary > md-checkbox .md-label, - md-list-item > div.md-secondary > md-checkbox .md-label, - md-list-item > md-checkbox:first-child .md-label, - md-list-item md-checkbox.md-secondary .md-label, md-list-item .md-list-item-inner > div.md-primary > md-checkbox .md-label, - md-list-item .md-list-item-inner > div.md-secondary > md-checkbox .md-label, - md-list-item .md-list-item-inner > md-checkbox:first-child .md-label, - md-list-item .md-list-item-inner md-checkbox.md-secondary .md-label { - display: none; } - md-list-item > md-icon:first-child, md-list-item .md-list-item-inner > md-icon:first-child { - margin-right: 32px; } - md-list-item > md-checkbox:first-child, md-list-item .md-list-item-inner > md-checkbox:first-child { - width: 24px; - margin-left: 3px; - margin-right: 29px; } - md-list-item > .md-avatar:first-child, md-list-item .md-list-item-inner > .md-avatar:first-child { - width: 40px; - height: 40px; - margin-top: 8px; - margin-bottom: 8px; - margin-right: 16px; - border-radius: 50%; - box-sizing: content-box; } - md-list-item md-checkbox.md-secondary, - md-list-item md-switch.md-secondary, md-list-item .md-list-item-inner md-checkbox.md-secondary, - md-list-item .md-list-item-inner md-switch.md-secondary { - margin-right: 0; - margin-top: 0; - margin-bottom: 0; } - md-list-item button.md-button.md-secondary-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container { - background-color: transparent; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; - border-radius: 50%; - margin: 0px; - min-width: 0px; } - md-list-item button.md-button.md-secondary-container .md-ripple, - md-list-item button.md-button.md-secondary-container .md-ripple-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple, - md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple-container { - border-radius: 50%; } - md-list-item .md-secondary-container, - md-list-item .md-secondary, md-list-item .md-list-item-inner .md-secondary-container, - md-list-item .md-list-item-inner .md-secondary { - margin-left: 16px; - position: absolute; - right: 16px; - top: 50%; - -webkit-transform: translate3d(0, -50%, 0); - transform: translate3d(0, -50%, 0); } - md-list-item > .md-button.md-secondary-container > .md-secondary, md-list-item .md-list-item-inner > .md-button.md-secondary-container > .md-secondary { - margin-left: 0px; - position: static; } - md-list-item > p, md-list-item > .md-list-item-inner > p, md-list-item .md-list-item-inner > p, md-list-item .md-list-item-inner > .md-list-item-inner > p { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - margin: 0; } - -md-list-item.md-2-line, -md-list-item.md-2-line > .md-no-style, -md-list-item.md-3-line, -md-list-item.md-3-line > .md-no-style { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - md-list-item.md-2-line .md-list-item-text, - md-list-item.md-2-line > .md-no-style .md-list-item-text, - md-list-item.md-3-line .md-list-item-text, - md-list-item.md-3-line > .md-no-style .md-list-item-text { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - padding: 16px 0; - text-overflow: ellipsis; } - md-list-item.md-2-line .md-list-item-text.md-offset, - md-list-item.md-2-line > .md-no-style .md-list-item-text.md-offset, - md-list-item.md-3-line .md-list-item-text.md-offset, - md-list-item.md-3-line > .md-no-style .md-list-item-text.md-offset { - margin-left: 56px; } - md-list-item.md-2-line .md-list-item-text h3, - md-list-item.md-2-line > .md-no-style .md-list-item-text h3, - md-list-item.md-3-line .md-list-item-text h3, - md-list-item.md-3-line > .md-no-style .md-list-item-text h3 { - font-size: 16px; - font-weight: 400; - letter-spacing: 0.010em; - margin: 0 0 6px 0; - line-height: 0.75em; } - md-list-item.md-2-line .md-list-item-text h4, - md-list-item.md-2-line > .md-no-style .md-list-item-text h4, - md-list-item.md-3-line .md-list-item-text h4, - md-list-item.md-3-line > .md-no-style .md-list-item-text h4 { - font-size: 14px; - letter-spacing: 0.010em; - margin: 10px 0 5px 0; - font-weight: 400; - line-height: 0.75em; } - md-list-item.md-2-line .md-list-item-text p, - md-list-item.md-2-line > .md-no-style .md-list-item-text p, - md-list-item.md-3-line .md-list-item-text p, - md-list-item.md-3-line > .md-no-style .md-list-item-text p { - font-size: 14px; - font-weight: 500; - letter-spacing: 0.010em; - margin: 0 0 0 0; - line-height: 1.6em; } - -md-list-item.md-2-line > .md-avatar:first-child, -md-list-item.md-2-line > .md-no-style > .md-avatar:first-child { - margin-top: 12px; } - -md-list-item.md-2-line > md-icon:first-child, -md-list-item.md-2-line > .md-no-style > md-icon:first-child { - -webkit-align-self: flex-start; - -ms-flex-item-align: start; - align-self: flex-start; } - -md-list-item.md-2-line .md-list-item-text, -md-list-item.md-2-line > .md-no-style .md-list-item-text { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - padding-top: 19px; } - -md-list-item.md-3-line > md-icon:first-child, -md-list-item.md-3-line > .md-avatar:first-child, -md-list-item.md-3-line > .md-no-style > md-icon:first-child, -md-list-item.md-3-line > .md-no-style > .md-avatar:first-child { - margin-top: 16px; } - -[id='messagesList'], -[id='contactsList'] { - border-top: 44px solid transparent; - border-bottom: 2px solid transparent; } - [id='messagesList'] md-list-item, - [id='contactsList'] md-list-item { - -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; - transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; } - [id='messagesList'] md-list-item:hover, - [id='contactsList'] md-list-item:hover { - background-color: #e6d8ba; - color: #639997; - cursor: pointer; } - [id='messagesList'] md-list-item:active, - [id='contactsList'] md-list-item:active { - color: #639997; } - [id='messagesList'] md-list-item:focus, - [id='messagesList'] md-list-item.sg-active, - [id='contactsList'] md-list-item:focus, - [id='contactsList'] md-list-item.sg-active { - background-color: #e1f5f3; } - -.sg-tile-content { - -webkit-box-align: baseline; - -webkit-align-items: baseline; - -ms-flex-align: baseline; - align-items: baseline; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .sg-tile-content p { - margin: 0 0 0 0; - font-size: 14px; } - .sg-tile-content .msg-date { - float: right; - font-size: 14px; - font-weight: 300; - line-height: 20px; - margin-left: 1em; } - .sg-tile-content .sg-md-subhead-multi, - .sg-tile-content .sg-md-subhead-solo, - .sg-tile-content .sg-md-body-multi, .sg-tile-content .mailer_mailcontent { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } - .sg-tile-content .sg-md-subhead-multi { - font-size: initial; } - -.sg-avatar { - margin-right: 0; - margin-left: 0; } - -.sg-list-avatar { - margin-right: 0; - margin-left: 0; } - -.sg-selected-avatar { - margin-right: 0; - margin-left: 0; } - -.sg-accepted { - margin-right: 0; - margin-left: 0; } - -.sg-declined { - margin-right: 0; - margin-left: 0; } - -.sg-delegated { - margin-right: 0; - margin-left: 0; } - -.sg-needs-action { - margin-right: 0; - margin-left: 0; } - -.sg-tentative { - margin-right: 0; - margin-left: 0; } - /*! _extends.scss - */ md-backdrop { z-index: 50; @@ -6730,7 +6409,6 @@ md-bottom-sheet { md-bottom-sheet.md-default-theme { border: none; background-color: inherit; - background-image: url("../img/cardboard-transp.png"); background-blend-mode: multiply; } md-bottom-sheet md-list-item md-icon { @@ -6740,7 +6418,6 @@ md-bottom-sheet md-list-item md-icon { md-bottom-sheet.md-default-theme .md-button.md-default-theme:hover:not([disabled]), md-bottom-sheet.md-default-theme .md-button.md-default-theme:hover:not([disabled]) md-icon { background-color: inherit; - background-image: url("../img/cardboard-transp.png"); background-blend-mode: multiply; color: #639997; } @@ -7089,6 +6766,9 @@ md-card .md-button .sg-tile-content { text-align: left; text-transform: none; } +md-card.sg-attachment { + background-color: rgba(211, 211, 211, 0.3); } + /*! checkbox/_extends.scss - */ md-checkbox { box-sizing: border-box; @@ -8398,9 +8078,6 @@ md-list-item .sg-item-name { md-list-item .sg-inline-list-icon-label { text-transform: uppercase; } -.md-list-item-inner > i:first-child { - margin-left: 16px; } - .md-tile-right { padding-right: 0px; } @@ -8427,6 +8104,64 @@ md-list-item .sg-inline-list-icon-label { div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-tile-left-list:before, div.sg-list-avatar:before, div.md-tile-left-selected:before, div.sg-selected-avatar:before, div.md-tile-left-accepted:before, div.sg-accepted:before, div.md-tile-left-declined:before, div.sg-declined:before, div.md-tile-left-delegated:before, div.sg-delegated:before, div.md-tile-left-needs-action:before, div.sg-needs-action:before, div.md-tile-left-tentative:before, div.sg-tentative:before { min-width: 72px; } +[id='messagesList'], +[id='contactsList'] { + border-top: 44px solid transparent; } + +.sg-section-list md-list-item { + -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; + transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; } + .sg-section-list md-list-item:hover:not([disabled]) { + background-color: #e6d8ba; + color: #639997; + cursor: pointer; } + .sg-section-list md-list-item:active { + color: #639997; } + .sg-section-list md-list-item:focus, + .sg-section-list md-list-item.sg-active { + background-color: #e1f5f3; } + .sg-section-list md-list-item .md-list-item-inner .md-secondary { + right: 0px; } + +.sg-tile-content { + -webkit-box-align: baseline; + -webkit-align-items: baseline; + -ms-flex-align: baseline; + align-items: baseline; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .sg-tile-content p { + margin: 0 0 0 0; + font-size: 14px; } + .sg-tile-content .msg-date { + float: right; + font-size: 14px; + font-weight: 300; + line-height: 20px; + margin-left: 1em; } + .sg-tile-content .sg-md-subhead-multi, + .sg-tile-content .sg-md-subhead-solo, + .sg-tile-content .sg-md-body-multi, .sg-tile-content .mailer_mailcontent { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .sg-tile-content .sg-md-subhead-multi { + font-size: initial; } + .sg-tile-icons { display: -webkit-box; display: -webkit-flex; @@ -8495,6 +8230,38 @@ div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-til background-color: rgba(255, 255, 0, 0.3) !important; content: "\e7fd"; } +.sg-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-list-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-selected-avatar { + margin-right: 0; + margin-left: 0; } + +.sg-accepted { + margin-right: 0; + margin-left: 0; } + +.sg-declined { + margin-right: 0; + margin-left: 0; } + +.sg-delegated { + margin-right: 0; + margin-left: 0; } + +.sg-needs-action { + margin-right: 0; + margin-left: 0; } + +.sg-tentative { + margin-right: 0; + margin-left: 0; } + /*! menu/_extends.scss - */ .md-open-menu-container { position: fixed; @@ -9374,7 +9141,6 @@ md-sidenav { md-sidenav md-content, .md-sidenav-left md-toolbar, md-sidenav md-toolbar { background-color: inherit; - background-image: url("../img/cardboard-transp.png"); background-blend-mode: multiply; } .md-sidenav-left md-toolbar, md-sidenav md-toolbar { @@ -9747,6 +9513,9 @@ md-slider { z-index: 1; position: relative; } +.md-subheader { + margin-right: 0; } + .md-subheader .md-subheader-inner { padding: 0 0 0 16px; } @@ -9764,7 +9533,7 @@ md-slider { font-size: 14px; font-weight: 600; } -.sg-md-subheader { +md-list .md-subheader.sg-md-subheader { font-weight: 600; font-size: 14px; } @@ -10399,7 +10168,6 @@ md-toolbar { md-toolbar { z-index: 10; font-size: 1em !important; - background-image: url("../img/felt-transp.png"); background-blend-mode: luminosity; box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); } @@ -10648,6 +10416,9 @@ md-tooltip { md-whiteframe { border: 1px solid #fff; } } +.sg-attachment { + background-color: rgba(211, 211, 211, 0.3); } + .pseudo-input-container { display: block; padding: 0 2px; } @@ -10831,8 +10602,24 @@ md-input-container .bgroup { [id=logo] img { max-width: 100%; } -label.login-lang { - margin: 0 8px 8px 0; } +.sg-login .md-button.md-raised { + width: 100%; + margin-top: 25px; + margin-bottom: 25px; + height: 48px; } + +.sg-login md-icon { + color: #526261; } + +.sg-login md-input-container.md-input-invalid > md-icon { + color: red; } + +.sg-login md-input-container.md-icon-float { + margin-bottom: 10px; } + +.sg-login md-select { + margin-left: 14px; + margin-top: 10px; } [id="messagesList"] .sg-md-subheader { -webkit-transform: translateY(-100%); @@ -10873,7 +10660,39 @@ label.login-lang { padding-top: 16px; } .msg-date { - text-align: right; } + text-align: right; + margin-bottom: 10px; } + +@media (min-width: 600px) { + .msg-attachment-image { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } } + +@media (min-width: 1024px) { + .msg-attachment-image { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.66%; + -ms-flex: 0 0 66.66%; + flex: 0 0 66.66%; + max-width: 66%; } } + +@media (min-width: 1280px) { + .msg-attachment-image { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.33%; + -ms-flex: 0 0 33.33%; + flex: 0 0 33.33%; + max-width: 33%; } } + +.msg-attachment-other { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } .sg-md-title-msg { margin: 0; @@ -10901,6 +10720,9 @@ textarea.plain-text { min-height: 192px; margin-top: 16px; } +.sg-draggable { + cursor: move; } + .dayLabels { color: #7db3b0; height: 35px; @@ -10926,6 +10748,7 @@ textarea.plain-text { border-bottom: 1px solid #e6d8ba; } .daysViewFor1Days .day { + left: 50px; width: 100%; } .daysViewFor1Days .days { @@ -10989,405 +10812,403 @@ textarea.plain-text { position: relative; right: 0; top: 0; } - .daysView .event { - cursor: default; + .daysView .sg-event { + border-radius: 10px; margin-right: 1px; position: absolute; left: 0%; right: 0%; } - .daysView .event.starts0 { + .daysView .sg-event.starts0 { top: 0px; } - .daysView .event.lasts0 { + .daysView .sg-event.lasts0 { height: 0px; } - .daysView .event.starts1 { + .daysView .sg-event.starts1 { top: 10px; } - .daysView .event.lasts1 { + .daysView .sg-event.lasts1 { height: 10px; } - .daysView .event.starts2 { + .daysView .sg-event.starts2 { top: 20px; } - .daysView .event.lasts2 { + .daysView .sg-event.lasts2 { height: 20px; } - .daysView .event.starts3 { + .daysView .sg-event.starts3 { top: 30px; } - .daysView .event.lasts3 { + .daysView .sg-event.lasts3 { height: 30px; } - .daysView .event.starts4 { + .daysView .sg-event.starts4 { top: 40px; } - .daysView .event.lasts4 { + .daysView .sg-event.lasts4 { height: 40px; } - .daysView .event.starts5 { + .daysView .sg-event.starts5 { top: 50px; } - .daysView .event.lasts5 { + .daysView .sg-event.lasts5 { height: 50px; } - .daysView .event.starts6 { + .daysView .sg-event.starts6 { top: 60px; } - .daysView .event.lasts6 { + .daysView .sg-event.lasts6 { height: 60px; } - .daysView .event.starts7 { + .daysView .sg-event.starts7 { top: 70px; } - .daysView .event.lasts7 { + .daysView .sg-event.lasts7 { height: 70px; } - .daysView .event.starts8 { + .daysView .sg-event.starts8 { top: 80px; } - .daysView .event.lasts8 { + .daysView .sg-event.lasts8 { height: 80px; } - .daysView .event.starts9 { + .daysView .sg-event.starts9 { top: 90px; } - .daysView .event.lasts9 { + .daysView .sg-event.lasts9 { height: 90px; } - .daysView .event.starts10 { + .daysView .sg-event.starts10 { top: 100px; } - .daysView .event.lasts10 { + .daysView .sg-event.lasts10 { height: 100px; } - .daysView .event.starts11 { + .daysView .sg-event.starts11 { top: 110px; } - .daysView .event.lasts11 { + .daysView .sg-event.lasts11 { height: 110px; } - .daysView .event.starts12 { + .daysView .sg-event.starts12 { top: 120px; } - .daysView .event.lasts12 { + .daysView .sg-event.lasts12 { height: 120px; } - .daysView .event.starts13 { + .daysView .sg-event.starts13 { top: 130px; } - .daysView .event.lasts13 { + .daysView .sg-event.lasts13 { height: 130px; } - .daysView .event.starts14 { + .daysView .sg-event.starts14 { top: 140px; } - .daysView .event.lasts14 { + .daysView .sg-event.lasts14 { height: 140px; } - .daysView .event.starts15 { + .daysView .sg-event.starts15 { top: 150px; } - .daysView .event.lasts15 { + .daysView .sg-event.lasts15 { height: 150px; } - .daysView .event.starts16 { + .daysView .sg-event.starts16 { top: 160px; } - .daysView .event.lasts16 { + .daysView .sg-event.lasts16 { height: 160px; } - .daysView .event.starts17 { + .daysView .sg-event.starts17 { top: 170px; } - .daysView .event.lasts17 { + .daysView .sg-event.lasts17 { height: 170px; } - .daysView .event.starts18 { + .daysView .sg-event.starts18 { top: 180px; } - .daysView .event.lasts18 { + .daysView .sg-event.lasts18 { height: 180px; } - .daysView .event.starts19 { + .daysView .sg-event.starts19 { top: 190px; } - .daysView .event.lasts19 { + .daysView .sg-event.lasts19 { height: 190px; } - .daysView .event.starts20 { + .daysView .sg-event.starts20 { top: 200px; } - .daysView .event.lasts20 { + .daysView .sg-event.lasts20 { height: 200px; } - .daysView .event.starts21 { + .daysView .sg-event.starts21 { top: 210px; } - .daysView .event.lasts21 { + .daysView .sg-event.lasts21 { height: 210px; } - .daysView .event.starts22 { + .daysView .sg-event.starts22 { top: 220px; } - .daysView .event.lasts22 { + .daysView .sg-event.lasts22 { height: 220px; } - .daysView .event.starts23 { + .daysView .sg-event.starts23 { top: 230px; } - .daysView .event.lasts23 { + .daysView .sg-event.lasts23 { height: 230px; } - .daysView .event.starts24 { + .daysView .sg-event.starts24 { top: 240px; } - .daysView .event.lasts24 { + .daysView .sg-event.lasts24 { height: 240px; } - .daysView .event.starts25 { + .daysView .sg-event.starts25 { top: 250px; } - .daysView .event.lasts25 { + .daysView .sg-event.lasts25 { height: 250px; } - .daysView .event.starts26 { + .daysView .sg-event.starts26 { top: 260px; } - .daysView .event.lasts26 { + .daysView .sg-event.lasts26 { height: 260px; } - .daysView .event.starts27 { + .daysView .sg-event.starts27 { top: 270px; } - .daysView .event.lasts27 { + .daysView .sg-event.lasts27 { height: 270px; } - .daysView .event.starts28 { + .daysView .sg-event.starts28 { top: 280px; } - .daysView .event.lasts28 { + .daysView .sg-event.lasts28 { height: 280px; } - .daysView .event.starts29 { + .daysView .sg-event.starts29 { top: 290px; } - .daysView .event.lasts29 { + .daysView .sg-event.lasts29 { height: 290px; } - .daysView .event.starts30 { + .daysView .sg-event.starts30 { top: 300px; } - .daysView .event.lasts30 { + .daysView .sg-event.lasts30 { height: 300px; } - .daysView .event.starts31 { + .daysView .sg-event.starts31 { top: 310px; } - .daysView .event.lasts31 { + .daysView .sg-event.lasts31 { height: 310px; } - .daysView .event.starts32 { + .daysView .sg-event.starts32 { top: 320px; } - .daysView .event.lasts32 { + .daysView .sg-event.lasts32 { height: 320px; } - .daysView .event.starts33 { + .daysView .sg-event.starts33 { top: 330px; } - .daysView .event.lasts33 { + .daysView .sg-event.lasts33 { height: 330px; } - .daysView .event.starts34 { + .daysView .sg-event.starts34 { top: 340px; } - .daysView .event.lasts34 { + .daysView .sg-event.lasts34 { height: 340px; } - .daysView .event.starts35 { + .daysView .sg-event.starts35 { top: 350px; } - .daysView .event.lasts35 { + .daysView .sg-event.lasts35 { height: 350px; } - .daysView .event.starts36 { + .daysView .sg-event.starts36 { top: 360px; } - .daysView .event.lasts36 { + .daysView .sg-event.lasts36 { height: 360px; } - .daysView .event.starts37 { + .daysView .sg-event.starts37 { top: 370px; } - .daysView .event.lasts37 { + .daysView .sg-event.lasts37 { height: 370px; } - .daysView .event.starts38 { + .daysView .sg-event.starts38 { top: 380px; } - .daysView .event.lasts38 { + .daysView .sg-event.lasts38 { height: 380px; } - .daysView .event.starts39 { + .daysView .sg-event.starts39 { top: 390px; } - .daysView .event.lasts39 { + .daysView .sg-event.lasts39 { height: 390px; } - .daysView .event.starts40 { + .daysView .sg-event.starts40 { top: 400px; } - .daysView .event.lasts40 { + .daysView .sg-event.lasts40 { height: 400px; } - .daysView .event.starts41 { + .daysView .sg-event.starts41 { top: 410px; } - .daysView .event.lasts41 { + .daysView .sg-event.lasts41 { height: 410px; } - .daysView .event.starts42 { + .daysView .sg-event.starts42 { top: 420px; } - .daysView .event.lasts42 { + .daysView .sg-event.lasts42 { height: 420px; } - .daysView .event.starts43 { + .daysView .sg-event.starts43 { top: 430px; } - .daysView .event.lasts43 { + .daysView .sg-event.lasts43 { height: 430px; } - .daysView .event.starts44 { + .daysView .sg-event.starts44 { top: 440px; } - .daysView .event.lasts44 { + .daysView .sg-event.lasts44 { height: 440px; } - .daysView .event.starts45 { + .daysView .sg-event.starts45 { top: 450px; } - .daysView .event.lasts45 { + .daysView .sg-event.lasts45 { height: 450px; } - .daysView .event.starts46 { + .daysView .sg-event.starts46 { top: 460px; } - .daysView .event.lasts46 { + .daysView .sg-event.lasts46 { height: 460px; } - .daysView .event.starts47 { + .daysView .sg-event.starts47 { top: 470px; } - .daysView .event.lasts47 { + .daysView .sg-event.lasts47 { height: 470px; } - .daysView .event.starts48 { + .daysView .sg-event.starts48 { top: 480px; } - .daysView .event.lasts48 { + .daysView .sg-event.lasts48 { height: 480px; } - .daysView .event.starts49 { + .daysView .sg-event.starts49 { top: 490px; } - .daysView .event.lasts49 { + .daysView .sg-event.lasts49 { height: 490px; } - .daysView .event.starts50 { + .daysView .sg-event.starts50 { top: 500px; } - .daysView .event.lasts50 { + .daysView .sg-event.lasts50 { height: 500px; } - .daysView .event.starts51 { + .daysView .sg-event.starts51 { top: 510px; } - .daysView .event.lasts51 { + .daysView .sg-event.lasts51 { height: 510px; } - .daysView .event.starts52 { + .daysView .sg-event.starts52 { top: 520px; } - .daysView .event.lasts52 { + .daysView .sg-event.lasts52 { height: 520px; } - .daysView .event.starts53 { + .daysView .sg-event.starts53 { top: 530px; } - .daysView .event.lasts53 { + .daysView .sg-event.lasts53 { height: 530px; } - .daysView .event.starts54 { + .daysView .sg-event.starts54 { top: 540px; } - .daysView .event.lasts54 { + .daysView .sg-event.lasts54 { height: 540px; } - .daysView .event.starts55 { + .daysView .sg-event.starts55 { top: 550px; } - .daysView .event.lasts55 { + .daysView .sg-event.lasts55 { height: 550px; } - .daysView .event.starts56 { + .daysView .sg-event.starts56 { top: 560px; } - .daysView .event.lasts56 { + .daysView .sg-event.lasts56 { height: 560px; } - .daysView .event.starts57 { + .daysView .sg-event.starts57 { top: 570px; } - .daysView .event.lasts57 { + .daysView .sg-event.lasts57 { height: 570px; } - .daysView .event.starts58 { + .daysView .sg-event.starts58 { top: 580px; } - .daysView .event.lasts58 { + .daysView .sg-event.lasts58 { height: 580px; } - .daysView .event.starts59 { + .daysView .sg-event.starts59 { top: 590px; } - .daysView .event.lasts59 { + .daysView .sg-event.lasts59 { height: 590px; } - .daysView .event.starts60 { + .daysView .sg-event.starts60 { top: 600px; } - .daysView .event.lasts60 { + .daysView .sg-event.lasts60 { height: 600px; } - .daysView .event.starts61 { + .daysView .sg-event.starts61 { top: 610px; } - .daysView .event.lasts61 { + .daysView .sg-event.lasts61 { height: 610px; } - .daysView .event.starts62 { + .daysView .sg-event.starts62 { top: 620px; } - .daysView .event.lasts62 { + .daysView .sg-event.lasts62 { height: 620px; } - .daysView .event.starts63 { + .daysView .sg-event.starts63 { top: 630px; } - .daysView .event.lasts63 { + .daysView .sg-event.lasts63 { height: 630px; } - .daysView .event.starts64 { + .daysView .sg-event.starts64 { top: 640px; } - .daysView .event.lasts64 { + .daysView .sg-event.lasts64 { height: 640px; } - .daysView .event.starts65 { + .daysView .sg-event.starts65 { top: 650px; } - .daysView .event.lasts65 { + .daysView .sg-event.lasts65 { height: 650px; } - .daysView .event.starts66 { + .daysView .sg-event.starts66 { top: 660px; } - .daysView .event.lasts66 { + .daysView .sg-event.lasts66 { height: 660px; } - .daysView .event.starts67 { + .daysView .sg-event.starts67 { top: 670px; } - .daysView .event.lasts67 { + .daysView .sg-event.lasts67 { height: 670px; } - .daysView .event.starts68 { + .daysView .sg-event.starts68 { top: 680px; } - .daysView .event.lasts68 { + .daysView .sg-event.lasts68 { height: 680px; } - .daysView .event.starts69 { + .daysView .sg-event.starts69 { top: 690px; } - .daysView .event.lasts69 { + .daysView .sg-event.lasts69 { height: 690px; } - .daysView .event.starts70 { + .daysView .sg-event.starts70 { top: 700px; } - .daysView .event.lasts70 { + .daysView .sg-event.lasts70 { height: 700px; } - .daysView .event.starts71 { + .daysView .sg-event.starts71 { top: 710px; } - .daysView .event.lasts71 { + .daysView .sg-event.lasts71 { height: 710px; } - .daysView .event.starts72 { + .daysView .sg-event.starts72 { top: 720px; } - .daysView .event.lasts72 { + .daysView .sg-event.lasts72 { height: 720px; } - .daysView .event.starts73 { + .daysView .sg-event.starts73 { top: 730px; } - .daysView .event.lasts73 { + .daysView .sg-event.lasts73 { height: 730px; } - .daysView .event.starts74 { + .daysView .sg-event.starts74 { top: 740px; } - .daysView .event.lasts74 { + .daysView .sg-event.lasts74 { height: 740px; } - .daysView .event.starts75 { + .daysView .sg-event.starts75 { top: 750px; } - .daysView .event.lasts75 { + .daysView .sg-event.lasts75 { height: 750px; } - .daysView .event.starts76 { + .daysView .sg-event.starts76 { top: 760px; } - .daysView .event.lasts76 { + .daysView .sg-event.lasts76 { height: 760px; } - .daysView .event.starts77 { + .daysView .sg-event.starts77 { top: 770px; } - .daysView .event.lasts77 { + .daysView .sg-event.lasts77 { height: 770px; } - .daysView .event.starts78 { + .daysView .sg-event.starts78 { top: 780px; } - .daysView .event.lasts78 { + .daysView .sg-event.lasts78 { height: 780px; } - .daysView .event.starts79 { + .daysView .sg-event.starts79 { top: 790px; } - .daysView .event.lasts79 { + .daysView .sg-event.lasts79 { height: 790px; } - .daysView .event.starts80 { + .daysView .sg-event.starts80 { top: 800px; } - .daysView .event.lasts80 { + .daysView .sg-event.lasts80 { height: 800px; } - .daysView .event.starts81 { + .daysView .sg-event.starts81 { top: 810px; } - .daysView .event.lasts81 { + .daysView .sg-event.lasts81 { height: 810px; } - .daysView .event.starts82 { + .daysView .sg-event.starts82 { top: 820px; } - .daysView .event.lasts82 { + .daysView .sg-event.lasts82 { height: 820px; } - .daysView .event.starts83 { + .daysView .sg-event.starts83 { top: 830px; } - .daysView .event.lasts83 { + .daysView .sg-event.lasts83 { height: 830px; } - .daysView .event.starts84 { + .daysView .sg-event.starts84 { top: 840px; } - .daysView .event.lasts84 { + .daysView .sg-event.lasts84 { height: 840px; } - .daysView .event.starts85 { + .daysView .sg-event.starts85 { top: 850px; } - .daysView .event.lasts85 { + .daysView .sg-event.lasts85 { height: 850px; } - .daysView .event.starts86 { + .daysView .sg-event.starts86 { top: 860px; } - .daysView .event.lasts86 { + .daysView .sg-event.lasts86 { height: 860px; } - .daysView .event.starts87 { + .daysView .sg-event.starts87 { top: 870px; } - .daysView .event.lasts87 { + .daysView .sg-event.lasts87 { height: 870px; } - .daysView .event.starts88 { + .daysView .sg-event.starts88 { top: 880px; } - .daysView .event.lasts88 { + .daysView .sg-event.lasts88 { height: 880px; } - .daysView .event.starts89 { + .daysView .sg-event.starts89 { top: 890px; } - .daysView .event.lasts89 { + .daysView .sg-event.lasts89 { height: 890px; } - .daysView .event.starts90 { + .daysView .sg-event.starts90 { top: 900px; } - .daysView .event.lasts90 { + .daysView .sg-event.lasts90 { height: 900px; } - .daysView .event.starts91 { + .daysView .sg-event.starts91 { top: 910px; } - .daysView .event.lasts91 { + .daysView .sg-event.lasts91 { height: 910px; } - .daysView .event.starts92 { + .daysView .sg-event.starts92 { top: 920px; } - .daysView .event.lasts92 { + .daysView .sg-event.lasts92 { height: 920px; } - .daysView .event.starts93 { + .daysView .sg-event.starts93 { top: 930px; } - .daysView .event.lasts93 { + .daysView .sg-event.lasts93 { height: 930px; } - .daysView .event.starts94 { + .daysView .sg-event.starts94 { top: 940px; } - .daysView .event.lasts94 { + .daysView .sg-event.lasts94 { height: 940px; } - .daysView .event.starts95 { + .daysView .sg-event.starts95 { top: 950px; } - .daysView .event.lasts95 { + .daysView .sg-event.lasts95 { height: 950px; } - .daysView .event .eventInside { + .daysView .sg-event .eventInside { position: absolute; overflow: hidden; top: 0px; bottom: 0px; left: 0px; - right: 0px; - border-radius: 2px; - cursor: move; } + right: 0px; } .monthView md-grid-tile { border: 1px solid #e6d8ba; diff --git a/UI/WebServerResources/css/styles.css.map b/UI/WebServerResources/css/styles.css.map index 189815f1a..cfd4e4e0a 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/mixins.scss","../angular-material/src/core/style/structure.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/style/layout.scss","../scss/core/layout.scss","../bower_components/breakpoint-sass/stylesheets/_breakpoint.scss","../angular-material/src/core/style/typography.scss","../scss/core/typography.scss","../scss/core/_functions.scss","../angular-material/src/components/autocomplete/autocomplete.scss","../scss/components/autoScrollList/_extends.scss","../angular-material/src/components/list/list.scss","../scss/components/autoScrollList/autoScrollList.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.scss","../scss/components/bottomSheet/_extends.scss","../angular-material/src/components/bottomSheet/bottomSheet.scss","../scss/components/bottomSheet/bottomSheet.scss","../scss/components/button/_extends.scss","../angular-material/src/components/button/button.scss","../scss/components/button/button.scss","../scss/components/card/_extends.scss","../angular-material/src/components/card/card.scss","../scss/components/card/card.scss","../scss/components/checkbox/_extends.scss","../angular-material/src/components/checkbox/checkbox.scss","../scss/components/checkbox/checkbox.scss","../scss/components/chips/_extends.scss","../angular-material/src/components/chips/chips.scss","../scss/components/chips/chips.scss","../scss/components/content/_extends.scss","../angular-material/src/components/content/content.scss","../scss/components/content/content.scss","../scss/components/dialog/_extends.scss","../angular-material/src/components/dialog/dialog.scss","../scss/components/dialog/dialog.scss","../scss/components/divider/_extends.scss","../angular-material/src/components/divider/divider.scss","../scss/components/fabSpeedDial/_extends.scss","../angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","../angular-material/src/components/gridList/gridList.scss","../scss/components/gridList/gridList.scss","../scss/components/icon/_extends.scss","../angular-material/src/components/icon/icon.scss","../scss/components/icon/icon.scss","../scss/components/input/_extends.scss","../angular-material/src/components/input/input.scss","../scss/components/input/input.scss","../scss/components/list/_extends.scss","../scss/components/list/list.scss","../scss/components/menu/_extends.scss","../angular-material/src/components/menu/menu.scss","../scss/components/progressLinear/_extends.scss","../angular-material/src/components/progressLinear/progressLinear.scss","../scss/components/radioButton/_extends.scss","../angular-material/src/components/radioButton/radio-button.scss","../scss/components/select/_extends.scss","../angular-material/src/components/select/select.scss","../scss/components/select/select.scss","../scss/components/sidenav/_extends.scss","../angular-material/src/components/sidenav/sidenav.scss","../scss/components/sidenav/sidenav.scss","../scss/components/slider/_extends.scss","../angular-material/src/components/slider/slider.scss","../scss/components/sticky/_extends.scss","../angular-material/src/components/sticky/sticky.scss","../scss/components/subheader/_extends.scss","../angular-material/src/components/subheader/subheader.scss","../scss/components/subheader/subheader.scss","../scss/components/switch/_extends.scss","../angular-material/src/components/switch/switch.scss","../scss/components/tabs/_extends.scss","../angular-material/src/components/tabs/tabs.scss","../scss/components/toast/_extends.scss","../angular-material/src/components/toast/toast.scss","../scss/components/toolbar/_extends.scss","../angular-material/src/components/toolbar/toolbar.scss","../scss/components/toolbar/toolbar.scss","../scss/components/tooltip/_extends.scss","../angular-material/src/components/tooltip/tooltip.scss","../scss/components/virtualRepeat/_extends.scss","../angular-material/src/components/virtualRepeat/virtualRepeater.scss","../scss/components/virtualRepeat/virtualRepeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/pseudo-input/pseudo-input.scss","../scss/views/LoginUI.scss","../scss/views/MailerUI.scss","../scss/views/ContactsUI.scss","../scss/views/MessageEditorUI.scss","../scss/views/SchedulerUI.scss","../scss/views/_view.scss","../scss/core/base_styles/_base_style.scss","../scss/_devtools.scss"],"names":[],"mappings":"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,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IA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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/mixins.scss","../angular-material/src/core/style/structure.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/style/layout.scss","../scss/core/layout.scss","../bower_components/breakpoint-sass/stylesheets/_breakpoint.scss","../angular-material/src/core/style/typography.scss","../scss/core/typography.scss","../scss/core/_functions.scss","../angular-material/src/components/autocomplete/autocomplete.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.scss","../scss/components/bottomSheet/_extends.scss","../angular-material/src/components/bottomSheet/bottomSheet.scss","../scss/components/bottomSheet/bottomSheet.scss","../scss/components/button/_extends.scss","../angular-material/src/components/button/button.scss","../scss/components/button/button.scss","../scss/components/card/_extends.scss","../angular-material/src/components/card/card.scss","../scss/components/card/card.scss","../scss/components/checkbox/_extends.scss","../angular-material/src/components/checkbox/checkbox.scss","../scss/components/checkbox/checkbox.scss","../scss/components/chips/_extends.scss","../angular-material/src/components/chips/chips.scss","../scss/components/chips/chips.scss","../scss/components/content/_extends.scss","../angular-material/src/components/content/content.scss","../scss/components/content/content.scss","../scss/components/dialog/_extends.scss","../angular-material/src/components/dialog/dialog.scss","../scss/components/dialog/dialog.scss","../scss/components/divider/_extends.scss","../angular-material/src/components/divider/divider.scss","../scss/components/fabSpeedDial/_extends.scss","../angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","../angular-material/src/components/gridList/gridList.scss","../scss/components/gridList/gridList.scss","../scss/components/icon/_extends.scss","../angular-material/src/components/icon/icon.scss","../scss/components/icon/icon.scss","../scss/components/input/_extends.scss","../angular-material/src/components/input/input.scss","../scss/components/input/input.scss","../scss/components/list/_extends.scss","../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/progressLinear.scss","../scss/components/radioButton/_extends.scss","../angular-material/src/components/radioButton/radio-button.scss","../scss/components/select/_extends.scss","../angular-material/src/components/select/select.scss","../scss/components/select/select.scss","../scss/components/sidenav/_extends.scss","../angular-material/src/components/sidenav/sidenav.scss","../scss/components/sidenav/sidenav.scss","../scss/components/slider/_extends.scss","../angular-material/src/components/slider/slider.scss","../scss/components/sticky/_extends.scss","../angular-material/src/components/sticky/sticky.scss","../scss/components/subheader/_extends.scss","../angular-material/src/components/subheader/subheader.scss","../scss/components/subheader/subheader.scss","../scss/components/switch/_extends.scss","../angular-material/src/components/switch/switch.scss","../scss/components/tabs/_extends.scss","../angular-material/src/components/tabs/tabs.scss","../scss/components/toast/_extends.scss","../angular-material/src/components/toast/toast.scss","../scss/components/toolbar/_extends.scss","../angular-material/src/components/toolbar/toolbar.scss","../scss/components/toolbar/toolbar.scss","../scss/components/tooltip/_extends.scss","../angular-material/src/components/tooltip/tooltip.scss","../scss/components/virtualRepeat/_extends.scss","../angular-material/src/components/virtualRepeat/virtualRepeater.scss","../scss/components/virtualRepeat/virtualRepeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/whiteframe/whiteframe.scss","../scss/components/pseudo-input/pseudo-input.scss","../scss/views/LoginUI.scss","../scss/views/MailerUI.scss","../scss/views/ContactsUI.scss","../scss/views/MessageEditorUI.scss","../scss/views/SchedulerUI.scss","../scss/views/_view.scss","../scss/core/base_styles/_base_style.scss","../scss/_devtools.scss"],"names":[],"mappings":"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;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB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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 1b4c932f3..04f621872 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){function AlarmController(scope,$mdToast,url){scope.reminder="10",scope.cancel=function(){$mdToast.hide()},scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder),$mdToast.hide()}}var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes"),this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ",""].join(""),locals:{url:url},controller:AlarmController}),AlarmController.$inject=["scope","$mdToast","url"]},AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"],angular.module("SOGo.Common").factory("Alarm",AlarmService)}(),function(){"use strict";function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;for(foundCookie=null,prefix=name+"=",pairs=document.cookie.split(";"),i=0;!foundCookie&&i0&&(currentPair=currentPair.substr(start)),0===currentPair.indexOf(prefix)&&(foundCookie=currentPair.substr(prefix.length))}return foundCookie}function readLoginCookie(){var value,loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo");return cookie&&cookie.length>8&&(value=decodeURIComponent(cookie.substr(8)),loginValues=value.base64decode().split(":")),loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;return userName=username,domain&&(userName+="@"+domain.value),address=""+window.location.href,baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName),"/"==baseAddress[0]&&(parts=address.split("/"),hostpart=parts[2],protocol=parts[0],baseAddress=protocol+"//"+hostpart+baseAddress),parts=baseAddress.split("/"),parts.splice(0,3),altBaseAddress=parts.join("/"),newAddress=!address.startsWith(baseAddress)&&!address.startsWith(altBaseAddress)||address.endsWith("/logoff")?baseAddress:address}function getService($q,$http,passwordPolicyConfig){var service,_this=this;return service={login:function(data){var language,d=$q.defer(),username=data.username,password=data.password,domain=data.domain,rememberLogin=data.rememberLogin?1:0;return data.loginSuffix&&!username.endsWith(data.loginSuffix)&&(username+=loginSuffix,domain=!1),data.language&&"WONoSelectionString"!=data.language&&(language=data.language),$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();loginCookie?"undefined"!=typeof data.expire&&"undefined"!=typeof data.grace?data.expire<0&&data.grace>0?d.reject({grace:data.grace}):data.expire>0&&-1==data.grace?d.reject({expire:data.expire}):d.resolve(redirectUrl(username,domain)):d.resolve(redirectUrl(username,domain)):d.reject(l("cookiesNotEnabled"))}).error(function(data,status){var msg,perr;data&&data.LDAPPasswordPolicyError?(perr=data.LDAPPasswordPolicyError,msg=perr==passwordPolicyConfig.PolicyNoError?l("Wrong username or password."):perr==passwordPolicyConfig.PolicyAccountLocked?l("Your account was locked due to too many failed attempts."):l("Login failed due to unhandled error case: ")+perr):msg=l("Unhandled error response"),d.reject({error:msg})}),d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();return $http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;perr?perr==passwordPolicyConfig.PolicyNoError?error=l("Password change failed"):perr==passwordPolicyConfig.PolicyPasswordModNotAllowed?error=l("Password change failed - Permission denied"):perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality?error=l("Password change failed - Insufficient password quality"):perr==passwordPolicyConfig.PolicyPasswordTooShort?error=l("Password change failed - Password is too short"):perr==passwordPolicyConfig.PolicyPasswordTooYoung?error=l("Password change failed - Password is too young"):perr==passwordPolicyConfig.PolicyPasswordInHistory?error=l("Password change failed - Password is in history"):(error=l("Unhandled policy error: %{0}").formatted(perr),perr=passwordPolicyConfig.PolicyPasswordUnknown):(perr=passwordPolicyConfig.PolicyPasswordSystemUnknown,error=_("Unhandled error response")),d.reject(error)}),d.promise}}}this.$get=getService,getService.$inject=["$q","$http","passwordPolicyConfig"]}angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication)}(),function(){"use strict";function Dialog(){}function DialogService($q,$mdDialog){return angular.extend(Dialog,{$q:$q,$modal:$mdDialog}),Dialog}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).content(content).ok(l("OK"));this.$modal.show(alert)},Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).content(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)},Dialog.prompt=function(title,label,options){function PromptDialogController(scope,$mdDialog){scope.title=title,scope.name="",scope.cancel=function(){d.reject(),$mdDialog.hide()},scope.ok=function(){d.resolve(scope.name),$mdDialog.hide()}}var o=options||{},d=this.$q.defer();return this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','

'," "," ",' '," ","
",'
',' '," "+l("Cancel")," ",' '," "+l("OK")," ","
","
"].join(""),controller:PromptDialogController}),PromptDialogController.$inject=["scope","$mdDialog"],d.promise},DialogService.$inject=["$q","$mdDialog"],angular.module("SOGo.Common").factory("Dialog",DialogService)}(),function(){"use strict";function Gravatar(){return function(email,size){var x,y,hash,s=size;return email?(x=email.indexOf("<"),x>=0&&(y=email.indexOf(">",x),y>x&&(email=email.substring(x+1,y))),size||(s=48),hash=email.md5(),"https://www.gravatar.com/avatar/"+hash+"?s="+s+"&d=wavatar"):""}}angular.module("SOGo.Common").factory("Gravatar",Gravatar)}(),function(){"use strict";function Resource($http,$q,path,activeUser,options){angular.extend(this,{_http:$http,_q:$q,_path:path,_activeUser:activeUser}),angular.extend(this,options),this._path=this._path.replace(/\/$/,"")}Resource.$factory=["$http","$q",function($http,$q){return function(path,activeUser,options){return new Resource($http,$q,path,activeUser,options)}}],angular.module("SOGo.Common").factory("Resource",Resource.$factory),Resource.prototype.userResource=function(uid){var path=_.compact(this._activeUser.folderURL.split("/"));return path.splice(path.length-1,1,escape(uid)),new Resource(this._http,this._q,"/"+path.join("/"),this._activeUser)},Resource.prototype.fetch=function(folderId,action,params){var deferred=this._q.defer(),path=[this._path];return folderId&&path.push(folderId.split("/")),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http({method:"GET",url:path,params:params}).success(deferred.resolve).error(function(data,status){return 404==status?deferred.reject():void 0}),deferred.promise},Resource.prototype.newguid=function(folderId){var deferred=this._q.defer(),path=this._path+"/"+folderId+"/newguid";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.create=function(action,name){var deferred=this._q.defer(),path=this._path+"/"+action;return this._http.post(path,{name:name}).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.post=function(id,action,data){var deferred=this._q.defer(),path=[this._path];return id&&path.push(id),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http.post(path,data).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.save=function(id,newValue,options){var action=(this._q.defer(),options&&options.action?options.action:"save");return this.post(id,action,newValue)},Resource.prototype.remove=function(uid){var deferred=this._q.defer(),path=this._path+"/"+uid+"/delete";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise}}(),function(){"use strict";function User(userData){userData&&this.init(userData)}User.factory=["$q","$log","sgSettings","Resource","Gravatar",function($q,$log,Settings,Resource,Gravatar){return angular.extend(User,{$q:$q,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$gravatar:Gravatar,$query:"",$users:[]}),User}],angular.module("SOGo.Common").factory("User",User.factory),User.$filter=function(search,excludedUsers){var param={search:search};return search?User.$query==search?User.$q.when(User.$users):(User.$query=search,User.$$resource.fetch(null,"usersSearch",param).then(function(response){var results,index,user,compareUids=function(data){return this.uid==data.uid};for(results=excludedUsers?_.filter(response.users,function(data){return!_.find(excludedUsers,compareUids,user)}):response.users,index=User.$users.length-1;index>=0;index--)user=User.$users[index],_.find(results,compareUids,user)||User.$users.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(User.$users,compareUids,data))){var user=new User(data);User.$users.splice(index,0,user)}}),User.$log.debug(User.$users),User.$users})):(User.$users=[],User.$q.when(User.$users))},User.prototype.init=function(data){angular.extend(this,data),this.$$shortFormat||(this.$$shortFormat=this.$shortFormat()),this.$$image||(this.$$image=this.image||User.$gravatar(this.c_email)),this.empty=" "},User.prototype.$shortFormat=function(options){var fullname=this.cn||this.c_email,email=this.c_email,no_email=options&&options.email===!1;return!no_email&&email&&fullname!=email&&(fullname+=" <"+email+">"),fullname},User.prototype.$acl=function(folderId){var _this=this,deferred=User.$q.defer(),param={uid:this.uid};return this.$shadowRights?deferred.resolve(this.rights):User.$$resource.fetch(folderId,"userRights",param).then(function(data){return _this.rights=data,_this.$shadowRights=angular.copy(data),deferred.resolve(data),data}),deferred.promise},User.prototype.$isAnonymous=function(){return"anonymous"==this.uid},User.prototype.$isSpecial=function(){return this.userClass&&"public-user"==this.userClass},User.prototype.$confirmRights=function(){var confirmation=!1;return this.$confirmation?!1:(_.some(_.values(this.rights))&&("anonymous"==this.uid?confirmation=l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?"):""==this.uid&&(confirmation=l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?"))),this.$confirmation=confirmation,confirmation)},User.prototype.$rightsAreDirty=function(){return this.rights&&!_.isEqual(this.rights,this.$shadowRights)},User.prototype.$resetRights=function(zero){var _this=this;zero?_.map(_.keys(this.rights),function(key){angular.isString(_this.rights[key])?_this.rights[key]="None":_this.rights[key]=0}):this.rights=angular.copy(this.$shadowRights)},User.prototype.$folders=function(type){var _this=this,deferred=User.$q.defer(),param={type:type};return this.$$folders?deferred.resolve(this.$$folders):User.$$resource.userResource(this.uid).fetch(null,"foldersSearch",param).then(function(response){_this.$$folders=response.folders,deferred.resolve(response.folders)}),deferred.promise},User.prototype.$omit=function(){var user={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(user[key]=value)}),user},User.prototype.toString=function(){return"[User "+this.c_email+"]"}}(),function(){"use strict";function sgFocus($rootScope,$timeout){return function(name){$timeout(function(){$rootScope.$broadcast("sgFocusOn",name)})}}sgFocus.$inject=["$rootScope","$timeout"],angular.module("SOGo.Common").factory("sgFocus",sgFocus)}(),function(){"use strict";function sgAvatarImage(){return{restrict:"AE",replace:!0,scope:{size:"@",email:"=sgEmail",src:"=sgSrc"},template:'',bindToController:!0,controller:"sgAvatarImageController",controllerAs:"vm"}}function sgAvatarImageController($scope,$element,Gravatar){var vm=this;$scope.$watch("vm.email",function(email){email&&!vm.url&&(vm.url=Gravatar(email,vm.size))}),"sg-src"in $element[0].attributes&&$scope.$watch("vm.src",function(src){src&&(vm.url=src)})}sgAvatarImageController.$inject=["$scope","$element","Gravatar"],angular.module("SOGo.Common").directive("sgAvatarImage",sgAvatarImage).controller("sgAvatarImageController",sgAvatarImageController)}(),function(){"use strict";function sgColorPicker($parse){function link(scope,iElement,iAttr,controller){controller.doSelect=$parse(iElement.attr("sg-on-select"))}return{restrict:"E",template:["",' '," color_lens"," ",' ',' ',' '," "," ",""].join(""),replace:!0,bindToController:!0,controller:sgColorPickerController,controllerAs:"$sgColorPickerController",link:link}}function sgColorPickerController($scope,sgColors){var vm=this;vm.colors=sgColors.selection,vm.select=function(color){vm.doSelect($scope,{color:color})}}sgColorPicker.$inject=["$parse"],sgColorPickerController.$inject=["$scope","sgColors"],angular.module("SOGo.Common").directive("sgColorPicker",sgColorPicker)}(),function(){"use strict";function sgCompile($compile){function sgCompileLink(scope,element,attrs){var ensureCompileRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgCompile)},function(value){element.html(value),$compile(element.contents())(scope),ensureCompileRunsOnce()})}return{restrict:"A",link:sgCompileLink}}sgCompile.$inject=["$compile"],angular.module("SOGo.Common").directive("sgCompile",sgCompile)}(),function(){"use strict";function sgEnter(){var ENTER_KEY=13;return function(scope,element,attrs){element.bind("keydown keypress",function(event){event.which===ENTER_KEY&&(scope.$apply(function(){scope.$eval(attrs.sgEnter)}),event.preventDefault())})}}angular.module("SOGo.Common").directive("sgEnter",sgEnter)}(),function(){"use strict";function sgEscape(){var ESCAPE_KEY=27;return function(scope,elem,attrs){elem.bind("keydown",function(event){event.keyCode===ESCAPE_KEY&&scope.$apply(attrs.sgEscape)})}}angular.module("SOGo.Common").directive("sgEscape",sgEscape)}(),function(){"use strict";function sgFocusOn(){return function(scope,elem,attr){scope.$on("sgFocusOn",function(e,name){name===attr.sgFocusOn&&(elem[0].focus(),elem[0].select())})}}angular.module("SOGo.Common").directive("sgFocusOn",sgFocusOn)}(),function(){"use strict";function sgFolderStylesheet(){return{restrict:"A",require:"ngModel",scope:{ngModel:"="},template:['"].join("")}}angular.module("SOGo.Common").directive("sgFolderStylesheet",sgFolderStylesheet)}(),function(){"use strict";function sgSearchPreTransclude($parse){function compile(tElement,tAttr){var inputEl=(tElement.find("md-input-container"),tElement.find("input")),selectEl=tElement.find("md-select"),buttonEl=tElement.find("md-button");return inputEl.attr("ng-model","$sgSearchController.searchText"),inputEl.attr("ng-model-options","$sgSearchController.searchTextOptions"),inputEl.attr("ng-change","$sgSearchController.onChange()"),selectEl&&(selectEl.attr("ng-model","$sgSearchController.searchField"),selectEl.attr("ng-change","$sgSearchController.onChange()")),buttonEl&&buttonEl.attr("sg-search-cancel")?(buttonEl.attr("ng-click",buttonEl.attr("sg-search-cancel")),buttonEl.removeAttr("sg-search-cancel")):buttonEl=null,function(scope,iElement,iAttr,controller){var compiledButtonEl=iElement.find("button");controller.doSearch=$parse(iElement.attr("sg-search")),buttonEl&&compiledButtonEl&&compiledButtonEl.on("click",controller.cancelSearch)}}return{restrict:"A",controller:"sgSearchController",controllerAs:"$sgSearchController",priority:1001,compile:compile}}function sgSearch(){function compile(tElement,tAttr){return function(scope,iElement,iAttr,controller,transclude){transclude(function(clone){iElement.append(clone)})}}return{restrict:"A",priority:1e3,transclude:!0,compile:compile}}function sgSearchController($scope,$element){var vm=this;vm.previous={searchText:"",searchField:""},vm.searchText=null,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){null!==vm.searchText&&(vm.searchText!=vm.previous.searchText||vm.searchField!=vm.previous.searchField)&&((vm.searchText.length>2||0===vm.searchText.length)&&vm.doSearch($scope,{searchText:vm.searchText,searchField:vm.searchField}),vm.previous={searchText:vm.searchText,searchField:vm.searchField})},vm.cancelSearch=function(){vm.searchText=""}}sgSearchPreTransclude.$inject=["$parse"],sgSearchController.$inject=["$scope","$element"],angular.module("SOGo.Common").controller("sgSearchController",sgSearchController).directive("sgSearch",sgSearchPreTransclude).directive("sgSearch",sgSearch)}(),function(){"use strict";function sgSubscribe(User){return{restrict:"A",scope:{folderType:"@sgSubscribe",onFolderSelect:"&sgSubscribeOnSelect"},replace:!1,bindToController:!0,controller:sgSubscribeDialogController,controllerAs:"$sgSubscribeDialogController",link:link}}function link(scope,element,attrs,controller){element.find("input");element.on("click",controller.showDialog)}function sgSubscribeDialogController($mdDialog){var vm=this;vm.showDialog=function(){$mdDialog.show({templateUrl:"../Contacts/UIxContactsUserFolders",clickOutsideToClose:!0,locals:{folderType:vm.folderType,onFolderSelect:vm.onFolderSelect},controller:sgSubscribeController,controllerAs:"subscribe"})}}function sgSubscribeController(folderType,onFolderSelect,User){var vm=this;vm.selectedUser=null,vm.users=User.$users,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){User.$filter(vm.searchText).then(function(){vm.selectedUser&&_.isUndefined(_.find(User.$users,function(user){return user.uid==vm.selectedUser.uid}))&&(vm.selectedUser=null)})},vm.selectUser=function(i){vm.selectedUser==vm.users[i]?vm.selectedUser=null:vm.users[i].$folders(folderType).then(function(){vm.selectedUser=vm.users[i]})},vm.selectFolder=function(folder){onFolderSelect({folderData:folder})}}sgSubscribe.$inject=["User"],sgSubscribeDialogController.$inject=["$mdDialog"],sgSubscribeController.$inject=["folderType","onFolderSelect","User"],angular.module("SOGo.Common").directive("sgSubscribe",sgSubscribe)}(),function(){"use strict";function sgToggleGrid($parse){function link(scope,iElement,attrs,ctrl){function toggle(day){var i=_.findIndex(modelDays,function(o){return modelAttr?o[modelAttr]==day:o==day});if(0>i)if(modelAttr){var o={};o[modelAttr]=day,modelDays.push(o)}else modelDays.push(day);else modelDays.splice(i,1)}var tile,i,modelDays,modelAttr,ensureInitRunsOnce,toggleClass,tiles=iElement.find("md-grid-tile");for(ensureInitRunsOnce=scope.$watch(function(){return $parse(attrs.sgToggleGrid)(scope)},function(days){if(angular.isDefined(days)){var flattenedDays=days;modelDays=days,attrs.sgToggleGridAttr&&(modelAttr=attrs.sgToggleGridAttr,flattenedDays=_.pluck(days,attrs.sgToggleGridAttr)),_.each(tiles,function(o){var tile=angular.element(o);_.contains(flattenedDays,tile.attr("value"))&&tile.addClass("sg-active"); +function l(){var key=arguments[0],value=key;labels[key]?value=labels[key]:clabels[key]&&(value=clabels[key]);for(var i=1,j=0;i-1?deferred.resolve():Acl.$$resource.fetch(this.folderId,"addUserInAcls",param).then(function(){user.wasSubscribed=!1,user.userClass=user.isGroup?"group-user":"normal-user",user.$rights=angular.bind(user,user.$acl,_this.folderId),_this.users.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);i>=0&&_this.users.splice(i,1)})},Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})},Acl.prototype.$saveUsersRights=function(){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];return angular.forEach(this.users,function(user){user.$rightsAreDirty()&&users.push(user.$omit())}),users.length?Acl.$$resource.save(this.folderId,users,param).then(function(){angular.forEach(_this.users,function(user){user.$rightsAreDirty()&&(user.$shadowRights=angular.copy(user.rights))}),deferredSave.resolve()},deferredSave.reject):deferredSave.resolve(),users=[],angular.forEach(this.users,function(user){!user.wasSubscribed&&user.isSubscribed&&users.push(user.uid)}),users.length?(param={uids:users.join(",")},Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed}),deferredSubscribe.resolve()},deferredSubscribe.reject)):deferredSubscribe.resolve(),Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}}(),function(){"use strict";function Alarm(){this.currentAlarm=null}function AlarmService($timeout,Settings,Resource,$mdToast){return angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast}),Alarm}Alarm.getAlarms=function(){var _this=this,now=new Date,browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function(a,b){var x=parseInt(a[2]),y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop(),now=new Date,utc=Math.floor(now.getTime()/1e3),url=next[0]+"/"+next[1],alarmTime=parseInt(next[2]),delay=alarmTime;alarmTime>0&&(delay-=utc);var f=(new Date(1e3*alarmTime),angular.bind(_this,Alarm.showAlarm,url));_this.currentAlarm&&_this.$timeout.cancel(_this.currentAlarm),_this.currentAlarm=_this.$timeout(f,1e3*delay)}})},Alarm.showAlarm=function(url){function AlarmController(scope,$mdToast,url){scope.reminder="10",scope.cancel=function(){$mdToast.hide()},scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder),$mdToast.hide()}}var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes"),this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ",""].join(""),locals:{url:url},controller:AlarmController}),AlarmController.$inject=["scope","$mdToast","url"]},AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"],angular.module("SOGo.Common").factory("Alarm",AlarmService)}(),function(){"use strict";function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;for(foundCookie=null,prefix=name+"=",pairs=document.cookie.split(";"),i=0;!foundCookie&&i0&&(currentPair=currentPair.substr(start)),0===currentPair.indexOf(prefix)&&(foundCookie=currentPair.substr(prefix.length))}return foundCookie}function readLoginCookie(){var value,loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo");return cookie&&cookie.length>8&&(value=decodeURIComponent(cookie.substr(8)),loginValues=value.base64decode().split(":")),loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;return userName=username,domain&&(userName+="@"+domain.value),address=""+window.location.href,baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName),"/"==baseAddress[0]&&(parts=address.split("/"),hostpart=parts[2],protocol=parts[0],baseAddress=protocol+"//"+hostpart+baseAddress),parts=baseAddress.split("/"),parts.splice(0,3),altBaseAddress=parts.join("/"),newAddress=!address.startsWith(baseAddress)&&!address.startsWith(altBaseAddress)||address.endsWith("/logoff")?baseAddress:address}function getService($q,$http,passwordPolicyConfig){var service,_this=this;return service={login:function(data){var language,d=$q.defer(),username=data.username,password=data.password,domain=data.domain,rememberLogin=data.rememberLogin?1:0;return data.loginSuffix&&!username.endsWith(data.loginSuffix)&&(username+=loginSuffix,domain=!1),data.language&&"WONoSelectionString"!=data.language&&(language=data.language),$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();loginCookie?"undefined"!=typeof data.expire&&"undefined"!=typeof data.grace?data.expire<0&&data.grace>0?d.reject({grace:data.grace}):data.expire>0&&-1==data.grace?d.reject({expire:data.expire}):d.resolve(redirectUrl(username,domain)):d.resolve(redirectUrl(username,domain)):d.reject(l("cookiesNotEnabled"))}).error(function(data,status){var msg,perr;data&&data.LDAPPasswordPolicyError?(perr=data.LDAPPasswordPolicyError,msg=perr==passwordPolicyConfig.PolicyNoError?l("Wrong username or password."):perr==passwordPolicyConfig.PolicyAccountLocked?l("Your account was locked due to too many failed attempts."):l("Login failed due to unhandled error case: ")+perr):msg=l("Unhandled error response"),d.reject({error:msg})}),d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();return $http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;perr?perr==passwordPolicyConfig.PolicyNoError?error=l("Password change failed"):perr==passwordPolicyConfig.PolicyPasswordModNotAllowed?error=l("Password change failed - Permission denied"):perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality?error=l("Password change failed - Insufficient password quality"):perr==passwordPolicyConfig.PolicyPasswordTooShort?error=l("Password change failed - Password is too short"):perr==passwordPolicyConfig.PolicyPasswordTooYoung?error=l("Password change failed - Password is too young"):perr==passwordPolicyConfig.PolicyPasswordInHistory?error=l("Password change failed - Password is in history"):(error=l("Unhandled policy error: %{0}").formatted(perr),perr=passwordPolicyConfig.PolicyPasswordUnknown):(perr=passwordPolicyConfig.PolicyPasswordSystemUnknown,error=_("Unhandled error response")),d.reject(error)}),d.promise}}}this.$get=getService,getService.$inject=["$q","$http","passwordPolicyConfig"]}angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication)}(),function(){"use strict";function Dialog(){}function DialogService($q,$mdDialog){return angular.extend(Dialog,{$q:$q,$modal:$mdDialog}),Dialog}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).content(content).ok(l("OK"));this.$modal.show(alert)},Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).content(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)},Dialog.prompt=function(title,label,options){function PromptDialogController(scope,$mdDialog){scope.title=title,scope.name="",scope.cancel=function(){d.reject(),$mdDialog.hide()},scope.ok=function(){d.resolve(scope.name),$mdDialog.hide()}}var o=options||{},d=this.$q.defer();return this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','

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

',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n ' ',\n ' ' + l('Cancel'),\n ' ',\n ' ',\n ' ' + l('OK'),\n ' ',\n '
',\n '
'\n ].join(''),\n controller: PromptDialogController\n });\n\n /**\n * @ngInject\n */\n PromptDialogController.$inject = ['scope', '$mdDialog'];\n function PromptDialogController(scope, $mdDialog) {\n scope.title = title;\n scope.name = \"\";\n scope.cancel = function() {\n d.reject();\n $mdDialog.hide();\n };\n scope.ok = function() {\n d.resolve(scope.name);\n $mdDialog.hide();\n };\n }\n\n return d.promise;\n };\n\n /**\n * @memberof Dialog\n * @desc The factory we'll register as Dialog in the Angular module SOGo.Common\n * @ngInject\n */\n DialogService.$inject = ['$q', '$mdDialog'];\n function DialogService($q, $mdDialog) {\n angular.extend(Dialog, { $q: $q , $modal: $mdDialog });\n\n return Dialog; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Dialog', DialogService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Gravatar - A service to build the Gravatar URL for an email address\n * @memberof SOGo.Common\n * @param {string} email\n * @param {number} [size] - the size of the image\n * @ngInject\n */\n function Gravatar() {\n return function(email, size) {\n var x, y, hash, s = size;\n if (!email) {\n return '';\n }\n x = email.indexOf('<');\n if (x >= 0) {\n y = email.indexOf('>', x);\n if (y > x)\n email = email.substring(x+1,y);\n }\n if (!size) {\n s = 48; // default to 48 pixels\n }\n hash = email.md5();\n\n // return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=identicon';\n return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=wavatar';\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('Gravatar', Gravatar);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Resource\n * @constructor\n * @param {Object} $http - the Angular HTTP service\n * @param {Object} $q - the Angular promise/deferred service\n * @param {String} path - the base path of the external resource\n * @param {Object} options - extra attributes to be associated to the object\n */\n function Resource($http, $q, path, activeUser, options) {\n angular.extend(this, {\n _http: $http,\n _q: $q,\n _path: path,\n _activeUser: activeUser\n });\n angular.extend(this, options);\n // Trim trailing slash\n this._path = this._path.replace(/\\/$/, '');\n }\n\n /**\n * @memberof Resource\n * @desc The factory we'll use to register with Angular.\n * @return a new Resource object\n */\n Resource.$factory = ['$http', '$q', function($http, $q) {\n return function(path, activeUser, options) {\n return new Resource($http, $q, path, activeUser, options);\n };\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of Resource in Angular module.\n */\n angular.module('SOGo.Common').factory('Resource', Resource.$factory);\n\n /**\n * @function userResource\n * @memberof Resource.prototype\n * @desc Create a new Resource object associated to a username different than the active user.\n * @param {String} uid - the user UID\n * @return a new Resource object\n */\n Resource.prototype.userResource = function(uid) {\n var path = _.compact(this._activeUser.folderURL.split('/'));\n path.splice(path.length - 1, 1, escape(uid));\n\n return new Resource(this._http, this._q, '/' + path.join('/'), this._activeUser);\n };\n\n /**\n * @function fetch\n * @memberof Resource.prototype\n * @desc Fetch resource using a specific folder, action and/or parameters.\n * @param {string} folderId - the folder on which the action will be applied (ex: addressbook, calendar)\n * @param {string} action - the action to be used in the URL\n * @param {Object} params - Object parameters injected through the $http service\n * @return a promise\n */\n Resource.prototype.fetch = function(folderId, action, params) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (folderId) path.push(folderId.split('/'));\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http({\n method: 'GET',\n url: path,\n params: params\n })\n .success(deferred.resolve)\n .error(function(data, status) {\n if (status == 404)\n return deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function newguid\n * @memberof Resource.prototype\n * @desc Fetch a new GUID on the specified folder ID.\n * @return a promise of the new data structure\n */\n Resource.prototype.newguid = function(folderId) {\n var deferred = this._q.defer(),\n path = this._path + '/' + folderId + '/newguid';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function create\n * @memberof Resource.prototype\n * @desc Create a new resource using a specific action (post).\n * @param {string} action - the action to be used in the URL\n * @param {string} name - the new resource's name\n * @return a promise\n */\n Resource.prototype.create = function(action, name) {\n var deferred = this._q.defer(),\n path = this._path + '/' + action;\n\n this._http\n .post(path, { name: name })\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function post\n * @memberof Resource.prototype\n * @desc Post a resource attributes on the server.\n * @return a promise\n */\n Resource.prototype.post = function(id, action, data) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (id) path.push(id);\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http\n .post(path, data)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function save\n * @memberof Resource.prototype\n * @desc Save a resource attributes on the server (post /save).\n * @return a promise\n */\n Resource.prototype.save = function(id, newValue, options) {\n var deferred = this._q.defer(),\n action = (options && options.action)? options.action : 'save';\n\n return this.post(id, action, newValue);\n };\n\n /**\n * @function remove\n * @memberof Resource.prototype\n * @desc Delete a resource (get /delete).\n * @return a promise\n */\n Resource.prototype.remove = function(uid) {\n var deferred = this._q.defer(),\n path = this._path + '/' + uid + '/delete';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name User\n * @constructor\n * @param {object} [userData] - some default values for the user\n */\n function User(userData) {\n if (userData) {\n this.init(userData);\n }\n }\n\n /**\n * @memberof User\n * @desc The factory we'll use to register with Angular.\n * @return the User constructor\n */\n User.factory = ['$q', '$log', 'sgSettings', 'Resource', 'Gravatar', function($q, $log, Settings, Resource, Gravatar) {\n angular.extend(User, {\n $q: $q,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $gravatar: Gravatar,\n $query: '',\n $users: []\n });\n\n return User;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('User', User.factory);\n\n /**\n * @memberof User\n * @desc Search for users that match a string.\n * @param {string} search - a string used to performed the search\n * @param {object[]} excludedUsers - a list of User objects that must be excluded from the results\n * @return a promise of an array of matching User objects\n */\n User.$filter = function(search, excludedUsers) {\n var param = {search: search};\n\n if (!search) {\n // No query specified\n User.$users = [];\n return User.$q.when(User.$users);\n }\n if (User.$query == search) {\n // Query hasn't changed\n return User.$q.when(User.$users);\n }\n User.$query = search;\n\n return User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {\n var results, index, user,\n compareUids = function(data) {\n return this.uid == data.uid;\n };\n if (excludedUsers) {\n // Remove excluded users from response\n results = _.filter(response.users, function(data) {\n return !_.find(excludedUsers, compareUids, user);\n });\n }\n else {\n results = response.users;\n }\n // Remove users that no longer match the search query\n for (index = User.$users.length - 1; index >= 0; index--) {\n user = User.$users[index];\n if (!_.find(results, compareUids, user)) {\n User.$users.splice(index, 1);\n }\n }\n // Add new users matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(User.$users, compareUids, data))) {\n var user = new User(data);\n User.$users.splice(index, 0, user);\n }\n });\n User.$log.debug(User.$users);\n return User.$users;\n });\n };\n\n /**\n * @function init\n * @memberof User.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of user\n */\n User.prototype.init = function(data) {\n angular.extend(this, data);\n if (!this.$$shortFormat)\n this.$$shortFormat = this.$shortFormat();\n if (!this.$$image)\n this.$$image = this.image || User.$gravatar(this.c_email);\n\n // An empty attribute to trick md-autocomplete when adding users from the ACLs editor\n this.empty = ' ';\n };\n\n /**\n * @function $shortFormat\n * @memberof User.prototype\n * @return the fullname along with the email address\n */\n User.prototype.$shortFormat = function(options) {\n var fullname = this.cn || this.c_email;\n var email = this.c_email;\n var no_email = options && options.email === false;\n if (!no_email && email && fullname != email) {\n fullname += ' <' + email + '>';\n }\n return fullname;\n };\n\n /**\n * @function $acl\n * @memberof User.prototype\n * @desc Fetch the user rights associated to a specific folder and populate the 'rights' attribute.\n * @param {string} the folder ID\n * @return a promise\n */\n User.prototype.$acl = function(folderId) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {uid: this.uid};\n if (this.$shadowRights) {\n deferred.resolve(this.rights);\n }\n else {\n User.$$resource.fetch(folderId, 'userRights', param).then(function(data) {\n _this.rights = data;\n // Convert numbers (0|1) to boolean values\n //angular.forEach(_.keys(_this.rights), function(key) {\n // _this.rights[key] = _this.rights[key] ? true : false;\n //});\n // console.debug('rights ' + _this.uid + ' => ' + JSON.stringify(data, undefined, 2));\n // Keep a copy of the server's version\n _this.$shadowRights = angular.copy(data);\n deferred.resolve(data);\n return data;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $isAnonymous\n * @memberof User.prototype\n * @return true if it's the special anonymous user\n */\n User.prototype.$isAnonymous = function() {\n return this.uid == 'anonymous';\n };\n\n /**\n * @function $isSpecial\n * @memberof User.prototype\n * @desc Only accurate from the ACL editor.\n * @return true if the user is not a regular system user\n */\n User.prototype.$isSpecial = function() {\n return this.userClass && this.userClass == 'public-user';\n };\n\n /**\n * @function $confirmRights\n * @memberof User.prototype\n * @desc Check if a confirmation is required before giving some rights.\n * @return the confirmation message or false if no confirmation is required\n */\n User.prototype.$confirmRights = function() {\n var confirmation = false;\n\n if (this.$confirmation) {\n // Don't bother the user more than once\n return false;\n }\n\n if (_.some(_.values(this.rights))) {\n if (this.uid == 'anonymous') {\n confirmation = l('Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?');\n }\n else if (this.uid == '') {\n confirmation = l('Any user with an account on this system will be able to access your folder. Are you certain you trust them all?');\n }\n }\n\n this.$confirmation = confirmation;\n\n return confirmation;\n };\n\n /**\n * @function $rightsAreDirty\n * @memberof User.prototype\n * @return whether or not the rights have changed from their initial values\n */\n User.prototype.$rightsAreDirty = function() {\n return this.rights && !_.isEqual(this.rights, this.$shadowRights);\n };\n\n /**\n * @function $resetRights\n * @memberof User.prototype\n * @desc Restore initial rights or disable all rights\n * @param {boolean} [zero] - reset all rights to zero when true\n */\n User.prototype.$resetRights = function(zero) {\n var _this = this;\n if (zero) {\n // Disable all rights\n _.map(_.keys(this.rights), function(key) {\n if (angular.isString(_this.rights[key]))\n _this.rights[key] = 'None';\n else\n _this.rights[key] = 0;\n });\n }\n else {\n // Restore initial rights\n this.rights = angular.copy(this.$shadowRights);\n }\n };\n\n /**\n * @function $folders\n * @memberof User.prototype\n * @desc Retrieve the list of folders of a specific type\n * @param {string} type - either 'contact' or 'calendar'\n * @return a promise of the HTTP query result or the cached result\n */\n User.prototype.$folders = function(type) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {type: type};\n if (this.$$folders) {\n deferred.resolve(this.$$folders);\n }\n else {\n User.$$resource.userResource(this.uid).fetch(null, 'foldersSearch', param).then(function(response) {\n _this.$$folders = response.folders;\n deferred.resolve(response.folders);\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof User.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the User instance\n */\n User.prototype.$omit = function() {\n var user = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n user[key] = value;\n }\n });\n return user;\n };\n\n User.prototype.toString = function() {\n return '[User ' + this.c_email + ']';\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n \n /**\n * sgFocus - A service to set the focus on the element associated to a specific string\n * @memberof SOGo.Common\n * @param {string} name - the string identifier of the element\n * @see {@link SOGo.Common.sgFocusOn}\n * @ngInject\n */\n sgFocus.$inject = ['$rootScope', '$timeout'];\n function sgFocus($rootScope, $timeout) {\n return function(name) {\n $timeout(function() {\n $rootScope.$broadcast('sgFocusOn', name);\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('sgFocus', sgFocus);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true, newcap: false */\n 'use strict';\n\n /**\n * sgAvatarImage - An avatar directive that returns un img element with either a local URL (if sg-src is specified)\n * or a Gravatar URL built from the Gravatar factory.\n * Based on http://blog.lingohub.com/2014/08/better-ux-with-angularjs-directives/.\n * @memberof SOGo.Common\n * @example:\n \n */\n function sgAvatarImage() {\n return {\n restrict: 'AE',\n replace: true,\n scope: {\n size: '@',\n email: '=sgEmail',\n src: '=sgSrc'\n },\n template: '',\n bindToController: true,\n controller: 'sgAvatarImageController',\n controllerAs: 'vm'\n };\n }\n\n /**\n * @ngInject\n */\n sgAvatarImageController.$inject = ['$scope', '$element', 'Gravatar'];\n function sgAvatarImageController($scope, $element, Gravatar) {\n var vm = this;\n\n $scope.$watch('vm.email', function(email) {\n if (email && !vm.url) {\n vm.url = Gravatar(email, vm.size);\n }\n });\n\n // If sg-src is defined, watch the expression for the URL of a local image\n if ('sg-src' in $element[0].attributes) {\n $scope.$watch('vm.src', function(src) {\n if (src) {\n vm.url = src;\n }\n });\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgAvatarImage', sgAvatarImage)\n .controller('sgAvatarImageController', sgAvatarImageController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgColorPicker - Color picker widget\n * @restrict element\n * @param {function} sgOnSelect - the function to call when clicking on a color.\n * One variable is available: color.\n * @ngInject\n * @example:\n\n \n */\n sgColorPicker.$inject = ['$parse'];\n function sgColorPicker($parse) {\n return {\n restrict: 'E',\n template: [\n '',\n ' ',\n ' color_lens',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ''\n ].join(''),\n replace: true,\n bindToController: true,\n controller: sgColorPickerController,\n controllerAs: '$sgColorPickerController',\n link: link\n };\n\n function link(scope, iElement, iAttr, controller) {\n // Associate callback to controller\n controller.doSelect = $parse(iElement.attr('sg-on-select'));\n }\n }\n \n /**\n * @ngInject\n */\n sgColorPickerController.$inject = ['$scope', 'sgColors'];\n function sgColorPickerController($scope, sgColors) {\n var vm = this;\n\n vm.colors = sgColors.selection;\n vm.select = function(color) {\n vm.doSelect($scope, { color: color });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgColorPicker', sgColorPicker);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCompile - Assign an expression to a DOM element and compile it.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgCompile - the expression to compile\n * @ngInject\n * @example:\n\n
\n */\n sgCompile.$inject = ['$compile'];\n function sgCompile($compile) {\n return {\n restrict: 'A',\n link: sgCompileLink\n };\n\n function sgCompileLink(scope, element, attrs) {\n var ensureCompileRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-compile expression for changes\n return scope.$eval(attrs.sgCompile);\n },\n function(value) {\n // When the sg-compile expression changes, assign it into the current DOM\n element.html(value);\n \n // Compile the new DOM and link it to the current scope.\n // NOTE: we only compile .childNodes so that we don't get into infinite loop compiling ourselves\n $compile(element.contents())(scope);\n \n // Use un-watch feature to ensure compilation happens only once.\n ensureCompileRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgCompile', sgCompile);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEnter - A directive evaluated when the enter key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEnter() {\n var ENTER_KEY = 13;\n return function(scope, element, attrs) {\n element.bind(\"keydown keypress\", function(event) {\n if (event.which === ENTER_KEY) {\n scope.$apply(function() {\n scope.$eval(attrs.sgEnter);\n });\n event.preventDefault();\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEnter', sgEnter);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEscape - A directive evaluated when the escape key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEscape() {\n var ESCAPE_KEY = 27;\n return function(scope, elem, attrs) {\n elem.bind('keydown', function(event) {\n if (event.keyCode === ESCAPE_KEY) {\n scope.$apply(attrs.sgEscape);\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEscape', sgEscape);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgFocusOn - A directive that sets the focus on its element when the specified string is broadcasted\n * @memberof SOGo.Common\n * @see {@link SOGo.Common.sgFocus}\n * @ngInject\n * @example:\n\n \n */\n function sgFocusOn() {\n return function(scope, elem, attr) {\n scope.$on('sgFocusOn', function(e, name) {\n if (name === attr.sgFocusOn) {\n elem[0].focus();\n elem[0].select();\n }\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFocusOn', sgFocusOn);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgFolderStylesheet - Add CSS stylesheet for folder (addressbook or calendar)\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} ngModel - the object literal describing the folder (an Addressbook or Calendar instance)\n * @example:\n\n
\n
\n */\n function sgFolderStylesheet() {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '='\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFolderStylesheet', sgFolderStylesheet);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSearch - Search within a list of items\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {function} sgSearch - the function to call when performing a search.\n * Two variables are available: searchField and searchText.\n * @example:\n\n
\n \n arrow_back\n \n \n \n \n \n Subject\n sender\n \n
\n */\n sgSearchPreTransclude.$inject = ['$parse'];\n function sgSearchPreTransclude($parse) {\n return {\n restrict: 'A',\n controller: 'sgSearchController',\n controllerAs: '$sgSearchController',\n priority: 1001,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n var mdInputEl = tElement.find('md-input-container'),\n inputEl = tElement.find('input'),\n selectEl = tElement.find('md-select'),\n buttonEl = tElement.find('md-button');\n\n inputEl.attr('ng-model', '$sgSearchController.searchText');\n inputEl.attr('ng-model-options', '$sgSearchController.searchTextOptions');\n inputEl.attr('ng-change', '$sgSearchController.onChange()');\n if (selectEl) {\n selectEl.attr('ng-model', '$sgSearchController.searchField');\n selectEl.attr('ng-change', '$sgSearchController.onChange()');\n }\n if (buttonEl && buttonEl.attr('sg-search-cancel')) {\n buttonEl.attr('ng-click', buttonEl.attr('sg-search-cancel'));\n buttonEl.removeAttr('sg-search-cancel');\n }\n else {\n buttonEl = null;\n }\n\n return function postLink(scope, iElement, iAttr, controller) {\n var compiledButtonEl = iElement.find('button');\n\n // Associate callback to controller\n controller.doSearch = $parse(iElement.attr('sg-search'));\n\n // Reset the input field when cancelling the search\n if (buttonEl && compiledButtonEl) {\n compiledButtonEl.on('click', controller.cancelSearch);\n }\n };\n }\n }\n\n function sgSearch() {\n return {\n restrict: 'A',\n priority: 1000,\n transclude: true,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n return function postLink(scope, iElement, iAttr, controller, transclude) {\n transclude(function(clone) {\n iElement.append(clone);\n });\n };\n }\n }\n\n /**\n * @ngInject\n */\n sgSearchController.$inject = ['$scope', '$element'];\n function sgSearchController($scope, $element) {\n var vm = this;\n\n // Controller variables\n vm.previous = { searchText: '', searchField: '' };\n vm.searchText = null;\n\n // Model options\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n // Method to call on data changes\n vm.onChange = function() {\n if (vm.searchText !== null) {\n if (vm.searchText != vm.previous.searchText || vm.searchField != vm.previous.searchField) {\n if (vm.searchText.length > 2 || vm.searchText.length === 0) {\n // doSearch is the compiled expression of the sg-search attribute\n vm.doSearch($scope, { searchText: vm.searchText, searchField: vm.searchField });\n }\n vm.previous = { searchText: vm.searchText, searchField: vm.searchField };\n }\n }\n };\n\n // Reset input field when cancelling the search\n vm.cancelSearch = function() {\n vm.searchText = \"\";\n };\n }\n\n angular\n .module('SOGo.Common')\n .controller('sgSearchController', sgSearchController)\n .directive('sgSearch', sgSearchPreTransclude)\n .directive('sgSearch', sgSearch);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSubscribe - Common subscription widget\n * @restrict attribute\n * @param {string} sgSubscribe - the folder type\n * @param {function} sgSubscribeOnSelect - the function to call when subscribing to a folder.\n * One variable is available: folderData.\n * @ngInject\n * @example:\n\n Subscribe ..\n */\n sgSubscribe.$inject = ['User'];\n function sgSubscribe(User) {\n return {\n restrict: 'A',\n scope: {\n folderType: '@sgSubscribe',\n onFolderSelect: '&sgSubscribeOnSelect'\n },\n replace: false,\n bindToController: true,\n controller: sgSubscribeDialogController,\n controllerAs: '$sgSubscribeDialogController',\n link: link\n };\n }\n\n function link(scope, element, attrs, controller) {\n var inputEl = element.find('input');\n element.on('click', controller.showDialog);\n }\n\n /**\n * @ngInject\n */\n sgSubscribeDialogController.$inject = ['$mdDialog'];\n function sgSubscribeDialogController($mdDialog) {\n var vm = this;\n vm.showDialog = function() {\n $mdDialog.show({\n templateUrl: '../Contacts/UIxContactsUserFolders',\n clickOutsideToClose: true,\n locals: {\n folderType: vm.folderType,\n onFolderSelect: vm.onFolderSelect\n },\n controller: sgSubscribeController,\n controllerAs: 'subscribe'\n });\n };\n }\n\n /**\n * @ngInject\n */\n sgSubscribeController.$inject = ['folderType', 'onFolderSelect', 'User'];\n function sgSubscribeController(folderType, onFolderSelect, User) {\n var vm = this;\n\n vm.selectedUser = null;\n vm.users = User.$users;\n\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n vm.onChange = function() {\n User.$filter(vm.searchText).then(function() {\n if (vm.selectedUser) {\n // If selected user is no longer part of the matching users, unselect it\n if (_.isUndefined(_.find(User.$users, function(user) {\n return user.uid == vm.selectedUser.uid;\n }))) {\n vm.selectedUser = null;\n }\n }\n });\n };\n\n vm.selectUser = function(i) {\n if (vm.selectedUser == vm.users[i]) {\n vm.selectedUser = null;\n }\n else {\n // Fetch folders of specific type for selected user\n vm.users[i].$folders(folderType).then(function() {\n vm.selectedUser = vm.users[i];\n });\n }\n };\n\n // Callback upon subscription to a folder\n vm.selectFolder = function(folder) {\n onFolderSelect({folderData: folder});\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgSubscribe', sgSubscribe);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgToggleGrid - Convert the tiles of a grid to toggle buttons\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgToggleGrid - the model of the source objects\n * @param {string} [sgToggleGridAttr] - the attribute that specifies if an object is enabled (toggled)\n * @ngInject\n * @example:\n\n ..\n */\n sgToggleGrid.$inject = ['$parse'];\n function sgToggleGrid($parse) {\n return {\n restrict: 'A',\n link: link\n };\n\n function link(scope, iElement, attrs, ctrl) {\n var tiles = iElement.find('md-grid-tile'),\n tile,\n i,\n modelDays,\n modelAttr,\n ensureInitRunsOnce,\n toggleClass;\n\n ensureInitRunsOnce = scope.$watch(function() {\n // Parse attribute until it returns a valid object\n return $parse(attrs.sgToggleGrid)(scope);\n }, function(days) {\n if (angular.isDefined(days)) {\n var flattenedDays = days;\n modelDays = days;\n if (attrs.sgToggleGridAttr) {\n modelAttr = attrs.sgToggleGridAttr;\n flattenedDays = _.pluck(days, attrs.sgToggleGridAttr);\n }\n _.each(tiles, function(o) {\n var tile = angular.element(o);\n if (_.contains(flattenedDays, tile.attr('value'))) {\n tile.addClass('sg-active');\n }\n });\n ensureInitRunsOnce();\n }\n });\n\n toggleClass = function() {\n // Toggle class on click event and call toggle function\n var tile = angular.element(this),\n day = tile.attr('value');\n tile.toggleClass('sg-active');\n toggle(day);\n };\n\n for (i = 0; i < tiles.length; i++) {\n tile = angular.element(tiles[i]);\n tile.addClass('iconButton');\n tile.find('figure').addClass('md-icon');\n tile.on('click', toggleClass);\n }\n\n function toggle(day) {\n var i = _.findIndex(modelDays, function(o) {\n if (modelAttr)\n return o[modelAttr] == day;\n else\n return o == day;\n });\n if (i < 0) {\n if (modelAttr) {\n var o = {};\n o[modelAttr] = day;\n modelDays.push(o);\n }\n else\n modelDays.push(day);\n }\n else\n modelDays.splice(i, 1);\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgToggleGrid', sgToggleGrid);\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Common.js","sources":["Common/utils.js","Common/Common.app.js","Common/decodeUri.filter.js","Common/encodeUri.filter.js","Common/loc.filter.js","Common/range.filter.js","Common/AclController.js","Common/navController.js","Common/Acl.service.js","Common/Alarm.service.js","Common/Authentication.service.js","Common/Dialog.service.js","Common/Gravatar.service.js","Common/Resource.service.js","Common/User.service.js","Common/sgFocus.service.js","Common/sgAvatarImage.directive.js","Common/sgColorPicker.directive.js","Common/sgCompile.directive.js","Common/sgEnter.directive.js","Common/sgEscape.directive.js","Common/sgFocus.directive.js","Common/sgFolderStylesheet.directive.js","Common/sgSearch.directive.js","Common/sgSubscribe.directive.js","Common/sgToggleGrid.directive.js"],"names":["l","key","arguments","value","labels","clabels","i","j","length","replace","configure","$mdThemingProvider","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastLightColors","1000","theme","primaryPalette","default","hue-1","hue-2","hue-3","accentPalette","backgroundPalette","angular","module","baseURL","ApplicationBaseURL","activeUser","param","settings","login","UserLogin","identification","UserIdentification","language","UserLanguage","folderURL","UserFolderURL","isSuperUser","IsSuperUser","constant","selection","sm","gt-sm","md","gt-md","lg","gt-lg","config","$inject","decodeUri","$window","decodeURIComponent","filter","encodeUri","encodeURIComponent","loc","range","n","res","parseInt","push","AclController","$mdDialog","Dialog","usersWithACL","User","folder","userFilter","$query","$filter","$acl","users","closeModal","$resetUsersRights","hide","saveModal","$saveUsersRights","then","data","status","alert","confirmChange","user","confirmation","$confirmRights","vm","showing","message","removeUser","$removeUser","uid","addUser","$addUser","userToAdd","searchText","error","selectUser","selectedUser","$rights","this","controller","navController","$scope","$timeout","$interval","$http","$mdSidenav","$mdBottomSheet","$mdMedia","$log","sgConstant","sgSettings","Alarm","currentDay","window","get","success","secondsBeforeTomorrow","toggleLeft","toggle","debug","toggleRight","openBottomSheet","show","parent","element","document","getElementById","templateUrl","toggleDetailView","detail","toggleClass","$watch","newVal","isGtMedium","getAlarms","Acl","folderId","factory","$q","Settings","Resource","extend","$$resource","$User","prototype","$users","_this","deferred","defer","resolve","promise","fetch","response","forEach","canSubscribeUser","isSubscribed","wasSubscribed","bind","_","indexOf","pluck","userClass","isGroup","reject","splice","$resetRights","deferredSave","deferredSubscribe","action","$rightsAreDirty","$omit","save","$shadowRights","copy","rights","uids","join","all","currentAlarm","AlarmService","$mdToast","$toast","now","Date","browserTime","Math","floor","getTime","alarms","sort","a","b","x","y","next","pop","utc","url","alarmTime","delay","f","showAlarm","cancel","AlarmController","scope","reminder","ok","position","hideDelay","template","locals","Authentication","readCookie","name","foundCookie","prefix","pairs","currentPair","start","cookie","split","charAt","substr","readLoginCookie","loginValues","base64decode","redirectUrl","username","domain","userName","address","baseAddress","altBaseAddress","parts","hostpart","protocol","newAddress","location","href","startsWith","endsWith","getService","passwordPolicyConfig","service","d","password","rememberLogin","loginSuffix","method","loginCookie","expire","grace","msg","perr","LDAPPasswordPolicyError","PolicyNoError","PolicyAccountLocked","changePassword","newPassword","PolicyPasswordModNotAllowed","PolicyInsufficientPasswordQuality","PolicyPasswordTooShort","PolicyPasswordTooYoung","PolicyPasswordInHistory","formatted","PolicyPasswordUnknown","PolicyPasswordSystemUnknown","$get","PolicyPasswordChangeUnsupported","PolicyPasswordExpired","PolicyChangeAfterReset","PolicyMustSupplyOldPassword","provider","DialogService","$modal","title","content","confirm","options","prompt","label","PromptDialogController","o","body","clickOutsideToClose","escapeToClose","inputType","Gravatar","email","size","hash","s","substring","md5","path","_http","_q","_path","_activeUser","$factory","userResource","compact","escape","params","flatten","newguid","create","post","id","newValue","remove","userData","init","$gravatar","search","excludedUsers","when","results","index","compareUids","find","each","isUndefined","$$shortFormat","$shortFormat","$$image","image","c_email","empty","fullname","cn","no_email","$isAnonymous","$isSpecial","$confirmation","some","values","isEqual","zero","map","keys","isString","$folders","type","$$folders","folders","toString","sgFocus","$rootScope","$broadcast","sgAvatarImage","restrict","src","bindToController","controllerAs","sgAvatarImageController","$element","attributes","directive","sgColorPicker","$parse","link","iElement","iAttr","doSelect","attr","sgColorPickerController","sgColors","colors","select","color","sgCompile","$compile","sgCompileLink","attrs","ensureCompileRunsOnce","$eval","html","contents","sgEnter","ENTER_KEY","event","which","$apply","preventDefault","sgEscape","ESCAPE_KEY","elem","keyCode","sgFocusOn","$on","e","focus","sgFolderStylesheet","require","ngModel","sgSearchPreTransclude","compile","tElement","tAttr","inputEl","selectEl","buttonEl","removeAttr","compiledButtonEl","doSearch","on","cancelSearch","priority","sgSearch","transclude","clone","append","sgSearchController","previous","searchField","searchTextOptions","updateOn","debounce","blur","onChange","sgSubscribe","folderType","onFolderSelect","sgSubscribeDialogController","showDialog","sgSubscribeController","selectFolder","folderData","sgToggleGrid","ctrl","day","findIndex","modelDays","modelAttr","tile","ensureInitRunsOnce","tiles","days","isDefined","flattenedDays","sgToggleGridAttr","contains","addClass","String","suffix","pattern","isNumber","lastIndexOf","_base64_keyStr","base64encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","input","utf8encode","charCodeAt","isNaN","fromCharCode","L","k","K","G","I","F","H","r","q","p","u","aa","Z","D","t","Array","B","J","P","h","E","v","g","Y","X","W","V","C","S","Q","N","M","A","z","w","m","U","T","R","O","toLowerCase","capitalize","toUpperCase","slice","asDate","newDate","date","formatTime","hours","minutes","newString","daysUpTo","otherDate","day1","day2","tmp","nbrDays","round","setTime","isValidEmail","emailRE","test","asCSSIdentifier","characters","escapeds","re","RegExp","timeInterval","interval","stringWithSeparator","separator","month","getMonth","getDate","year","getYear","str","addDays","milliSeconds","addHours","nbrHours","addMinutes","nbrMinutes","beginOfDay","setHours","setMinutes","setSeconds","setMilliseconds","beginOfWeek","offset","firstDayOfWeek","getDay","endOfWeek","getDayString","getHourString","getHours"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\nString.prototype.endsWith = function(suffix) {\n return this.indexOf(suffix, this.length - suffix.length) !== -1;\n};\n\nString.prototype.startsWith = function(pattern, position) {\n position = angular.isNumber(position) ? position : 0;\n return this.lastIndexOf(pattern, position) === position;\n};\n\nString.prototype._base64_keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nString.prototype.base64encode = function () {\n var output = \"\";\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = this.utf8encode();\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n \n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n \n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n \n output = output +\n this._base64_keyStr.charAt(enc1) + this._base64_keyStr.charAt(enc2) +\n this._base64_keyStr.charAt(enc3) + this._base64_keyStr.charAt(enc4);\n }\n \n return output;\n};\n\nString.prototype.base64decode = function() { \n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = \"\" + this; // .replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\")\n while (i < input.length) {\n enc1 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc2 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc3 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc4 = this._base64_keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n \n output = output + String.fromCharCode(chr1);\n \n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n }\n\n return output;\n};\n\nString.prototype.md5 = function() {\n if (!this.length) { return; }\n // MD5 (Message-Digest Algorithm) by WebToolkit\n var md5 = function(s){function L(k,d){return(k<>>(32-d));}function K(G,k){var I,d,F,H,x;F=(G&2147483648);H=(k&2147483648);I=(G&1073741824);d=(k&1073741824);x=(G&1073741823)+(k&1073741823);if(I&d){return(x^2147483648^F^H);}if(I|d){if(x&1073741824){return(x^3221225472^F^H);}else{return(x^1073741824^F^H);}}else{return(x^F^H);}}function r(d,F,k){return(d&F)|((~d)&k);}function q(d,F,k){return(d&k)|(F&(~k));}function p(d,F,k){return(d^F^k);}function n(d,F,k){return(F^(d|(~k)));}function u(G,F,aa,Z,k,H,I){G=K(G,K(K(r(F,aa,Z),k),I));return K(L(G,H),F);}function f(G,F,aa,Z,k,H,I){G=K(G,K(K(q(F,aa,Z),k),I));return K(L(G,H),F);}function D(G,F,aa,Z,k,H,I){G=K(G,K(K(p(F,aa,Z),k),I));return K(L(G,H),F);}function t(G,F,aa,Z,k,H,I){G=K(G,K(K(n(F,aa,Z),k),I));return K(L(G,H),F);}function e(G){var Z;var F=G.length;var x=F+8;var k=(x-(x%64))/64;var I=(k+1)*16;var aa=Array(I-1);var d=0;var H=0;while(H>>29;return aa;}function B(x){var k=\"\",F=\"\",G,d;for(d=0;d<=3;d++){G=(x>>>(d*8))&255;F=\"0\"+G.toString(16);k=k+F.substr(F.length-2,2);}return k;}function J(k){k=k.replace(/rn/g,\"n\");var d=\"\";for(var F=0;F127)&&(x<2048)){d+=String.fromCharCode((x>>6)|192);d+=String.fromCharCode((x&63)|128);}else{d+=String.fromCharCode((x>>12)|224);d+=String.fromCharCode(((x>>6)&63)|128);d+=String.fromCharCode((x&63)|128);}}}return d;}var C=Array();var P,h,E,v,g,Y,X,W,V;var S=7,Q=12,N=17,M=22;var A=5,z=9,y=14,w=20;var o=4,m=11,l=16,j=23;var U=6,T=10,R=15,O=21;s=J(s);C=e(s);Y=1732584193;X=4023233417;W=2562383102;V=271733878;for(P=0;P 12) {\n p = 'pm';\n i = hours % 12;\n }\n if (minutes < 10) {\n m = '0' + minutes;\n }\n\n // %H : hour as a decimal number using 24-hour clock\n newString = newString.replace(\"%H\", hours < 10 ? '0' + hours : hours);\n // %I : hour as a decimal number using 12-hour clock\n newString = newString.replace(\"%I\", i < 10 ? '0' + i : i);\n // %M : minute as decimal number\n newString = newString.replace(\"%M\", m);\n // %p : 'am' or 'pm'\n newString = newString.replace(\"%p\", p);\n\n return newString;\n};\n\nDate.prototype.daysUpTo = function(otherDate) {\n var days = [];\n\n var day1 = this.getTime();\n var day2 = otherDate.getTime();\n if (day1 > day2) {\n var tmp = day1;\n day1 = day2;\n day2 = tmp;\n }\n\n var nbrDays = Math.round((day2 - day1) / 86400000) + 1;\n for (var i = 0; i < nbrDays; i++) {\n var newDate = new Date();\n newDate.setTime(day1 + (i * 86400000));\n days.push(newDate);\n }\n\n return days;\n};\n\nString.prototype.isValidEmail = function() {\n var emailRE = /^([\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+\\.)*[\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+@((((([a-z0-9]{1}[a-z0-9\\-]{0,62}[a-z0-9]{1})|[a-z])\\.)+[a-z]{2,})|(\\d{1,3}\\.){3}\\d{1,3}(\\:\\d{1,5})?)$/i;\n return emailRE.test(this);\n};\n\nString.prototype.asCSSIdentifier = function() {\n var characters = [ '_' , '\\\\.', '#' , '@' , '\\\\*', ':' , ',' , ' ', \"'\", '&', '\\\\+' ];\n var escapeds = [ '_U_', '_D_', '_H_', '_A_', '_S_', '_C_', '_CO_', '_SP_', '_SQ_', '_AM_', '_P_' ];\n\n var newString = this;\n for (var i = 0; i < characters.length; i++) {\n var re = new RegExp(characters[i], 'g');\n newString = newString.replace(re, escapeds[i]);\n }\n\n if (/^\\d+/.test(newString)) {\n newString = '_' + newString;\n }\n\n return newString;\n};\n\nString.prototype.timeInterval = function () {\n var interval;\n if (this == \"once_per_hour\")\n interval = 3600;\n else if (this == \"every_minute\")\n interval = 60;\n else {\n interval = parseInt(this.substr(6)) * 60;\n }\n\n return interval;\n};\n\nDate.prototype.stringWithSeparator = function(separator) {\n var month = '' + (this.getMonth() + 1);\n var day = '' + this.getDate();\n var year = this.getYear();\n if (year < 1000)\n year = '' + (year + 1900);\n if (month.length == 1)\n month = '0' + month;\n if (day.length == 1)\n day = '0' + day;\n\n if (separator == '-')\n str = year + '-' + month + '-' + day;\n else\n str = day + '/' + month + '/' + year;\n\n return str;\n};\n\nDate.prototype.addDays = function(nbrDays) {\n var milliSeconds = this.getTime();\n milliSeconds += 86400000 * nbrDays;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.addHours = function(nbrHours) {\n var milliSeconds = this.getTime();\n milliSeconds += 3600000 * nbrHours;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.addMinutes = function(nbrMinutes) {\n var milliSeconds = this.getTime();\n milliSeconds += 60000 * nbrMinutes;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.beginOfDay = function() {\n var beginOfDay = new Date(this.getTime());\n beginOfDay.setHours(0);\n beginOfDay.setMinutes(0);\n beginOfDay.setSeconds(0);\n beginOfDay.setMilliseconds(0);\n\n return beginOfDay;\n};\n\nDate.prototype.beginOfWeek = function() {\n var offset = firstDayOfWeek - this.getDay();\n if (offset > 0)\n offset -= 7;\n\n var beginOfWeek = this.beginOfDay();\n beginOfWeek.setHours(12);\n beginOfWeek.addDays(offset);\n\n return beginOfWeek;\n};\n\nDate.prototype.endOfWeek = function() {\n var endOfWeek = this.beginOfWeek();\n endOfWeek.addDays(6);\n\n endOfWeek.setHours(23);\n endOfWeek.setMinutes(59);\n endOfWeek.setSeconds(59);\n endOfWeek.setMilliseconds(999);\n\n return endOfWeek;\n};\n\n// YYYYMMDD\nDate.prototype.getDayString = function() {\n var newString = this.getYear();\n if (newString < 1000) newString += 1900;\n var month = '' + (this.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n newString += month;\n var day = '' + this.getDate();\n if (day.length == 1)\n day = '0' + day;\n newString += day;\n\n return newString;\n};\n\n// MMHH\nDate.prototype.getHourString = function() {\n var newString = this.getHours() + '00';\n if (newString.length == 3)\n newString = '0' + newString;\n\n return newString;\n};\n\nfunction l() {\n var key = arguments[0];\n var value = key;\n if (labels[key]) {\n value = labels[key];\n }\n else if (clabels[key]) {\n value = clabels[key];\n }\n for (var i = 1, j = 0; i < arguments.length; i++, j++) {\n value = value.replace('%{' + j + '}', arguments[i]);\n }\n\n return value;\n}\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.Common', ['ngMaterial'])\n .value('sgSettings', {\n baseURL: function() {\n return ApplicationBaseURL || null;\n },\n activeUser: function(param) {\n var settings = {\n login: UserLogin || null,\n identification: UserIdentification || null,\n language: UserLanguage || null,\n folderURL: UserFolderURL || null,\n isSuperUser: IsSuperUser || null\n };\n if (param)\n return settings[param];\n else\n return settings;\n }\n })\n\n .constant('sgColors', {\n selection: [\n '#FFFFFF',\n '#330033',\n '#C0C0C0',\n '#999999',\n '#666666',\n '#333333',\n '#000000',\n '#FFCCCC',\n '#FF6666',\n '#FF0000',\n '#CC0000',\n '#990000',\n '#660000',\n '#330000',\n '#FFCC99',\n '#FF9966',\n '#FF9900',\n '#FF6600',\n '#CC6600',\n '#993300',\n '#663300',\n '#FFFF99',\n '#FFFF66',\n '#FFCC66',\n '#FFCC33',\n '#CC9933',\n '#996633',\n '#663333',\n '#FFFFCC',\n '#FFFF33',\n '#FFFF00',\n '#FFCC00',\n '#999900',\n '#666600',\n '#333300',\n '#CCCCCC',\n '#66FF99',\n '#33FF33',\n '#33CC00',\n '#009900',\n '#006600',\n '#003300',\n '#99FFFF',\n '#33FFFF',\n '#66CCCC',\n '#00CCCC',\n '#339999',\n '#336666',\n '#003333',\n '#CCFFFF',\n '#66FFFF',\n '#33CCFF',\n '#3366FF',\n '#3333FF',\n '#000099',\n '#000066',\n '#CCCCFF',\n '#9999FF',\n '#6666CC',\n '#6633FF',\n '#6600CC',\n '#333399',\n '#330099',\n '#FFCCFF',\n '#FF99FF',\n '#CC66CC',\n '#CC33CC',\n '#993399',\n '#663366',\n '#99FF99'\n ]\n })\n\n // md break-points values are hard-coded in angular-material/src/core/util/constant.js\n // $mdMedia has a built-in support for those values but can also evaluate others\n // For some reasons, angular-material's break-points don't match the specs\n // Here we define values according to specs\n .constant('sgConstant', {\n 'sm': '(max-width: 600px)',\n 'gt-sm': '(min-width: 600px)',\n 'md': '(min-width: 600px) and (max-width: 1024px)',\n 'gt-md': '(min-width: 1025px)',\n 'lg': '(min-width: 1024px) and (max-width: 1280px)',\n 'gt-lg': '(min-width: 1280px)'\n })\n\n .config(configure);\n\n configure.$inject = ['$mdThemingProvider'];\n function configure($mdThemingProvider) {\n $mdThemingProvider.definePalette('sogo-green', {\n '50': 'eaf5e9',\n '100': 'cbe5c8',\n '200': 'aad6a5',\n '300': '88c781',\n '400': '66b86a',\n '500': '56b04c',\n '600': '4da143',\n '700': '388e3c',\n '800': '367d2e',\n '900': '225e1b',\n 'A100': 'b9f6ca',\n 'A200': '69f0ae',\n 'A400': '00e676',\n 'A700': '00c853',\n 'contrastDefaultColor': 'dark',\n 'contrastDarkColors': '50 100 200',\n 'contrastLightColors': '300 400 500 600 700 800 900'\n });\n $mdThemingProvider.definePalette('sogo-blue', {\n '50': 'f0faf9',\n '100': 'e1f5f3',\n '200': 'ceebe8',\n '300': 'bfe0dd',\n '400': 'b2d6d3',\n '500': 'a1ccc8',\n '600': '8ebfbb',\n '700': '7db3b0',\n '800': '639997',\n '900': '4d8080',\n 'A100': 'd4f7fa',\n 'A200': 'c3f5fa',\n 'A400': '53e3f0',\n 'A700': '00b0c0',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': ['50', '100', '200'],\n 'contrastLightColors': ['300', '400', '500', '600', '700', '800', '900', 'A100', 'A200', 'A400', 'A700']\n });\n $mdThemingProvider.definePalette('sogo-paper', {\n '50': 'fcf7f8',\n '100': 'f7f1dc',\n '200': 'ede5ca',\n '300': 'e6d8ba',\n '400': 'e2d2a3',\n '500': 'd6c48d',\n '600': 'baa870',\n '700': '857545',\n '800': '524517',\n '900': '433809',\n '1000': '000000',\n 'A100': 'ffffff',\n 'A200': 'eeeeee',\n 'A400': 'bdbdbd',\n 'A700': '616161',\n 'contrastDefaultColor': 'dark',\n 'contrastLightColors': '800 900'\n });\n // Default theme definition\n // .primaryColor will soon be deprecated in favor of primaryPalette (already on dev builds https://groups.google.com/forum/m/#!topic/ngmaterial/-sXR8CYBMPg)\n $mdThemingProvider.theme('default')\n .primaryPalette('sogo-blue', {\n 'default': '300',\n 'hue-1': '100',\n 'hue-2': '400',\n 'hue-3': 'A700'\n })\n .accentPalette('sogo-green', {\n 'default': '500',\n 'hue-1': '200',\n 'hue-2': '300',\n 'hue-3': 'A700'\n })\n .backgroundPalette('sogo-paper', {\n 'default': '100',\n 'hue-1': '200',\n 'hue-2': '50',\n 'hue-3': '500'\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n decodeUri.$inject = ['$window'];\n function decodeUri($window) {\n return $window.decodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('decodeUri', decodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n encodeUri.$inject = ['$window'];\n function encodeUri($window) {\n return $window.encodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('encodeUri', encodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * loc - A simple filter to return the localized version of a string.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n function loc() {\n return l;\n }\n\n angular.module('SOGo.Common')\n .filter('loc', loc);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * range - A simple filter that will return an array of the size of its argument.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n function range() {\n return function(n) {\n var res = [];\n for (var i = 0; i < parseInt(n); i++) {\n res.push(i);\n }\n return res;\n };\n }\n\n angular.module('SOGo.Common')\n .filter('range', range);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AclController.$inject = ['$mdDialog', 'Dialog', 'usersWithACL', 'User', 'folder'];\n function AclController($mdDialog, Dialog, usersWithACL, User, folder) {\n var vm = this;\n\n vm.users = usersWithACL; // ACL users\n vm.folder = folder;\n vm.selectedUser = null;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.saveModal = saveModal;\n vm.confirmChange = confirmChange;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n vm.selectUser = selectUser;\n vm.confirmation = { showing: false,\n message: ''};\n\n function userFilter($query) {\n return User.$filter($query, folder.$acl.users);\n }\n\n function closeModal() {\n folder.$acl.$resetUsersRights(); // cancel changes\n $mdDialog.hide();\n }\n\n function saveModal() {\n folder.$acl.$saveUsersRights().then(function() {\n $mdDialog.hide();\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function confirmChange(user) {\n var confirmation = user.$confirmRights();\n if (confirmation) {\n vm.confirmation.showing = true;\n vm.confirmation.message = confirmation;\n }\n }\n\n function removeUser(user) {\n folder.$acl.$removeUser(user.uid).catch(function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function addUser(data) {\n if (data) {\n folder.$acl.$addUser(data).then(function() {\n vm.userToAdd = '';\n vm.searchText = '';\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n }\n\n function selectUser(user) {\n if (vm.selectedUser == user) {\n vm.selectedUser = null;\n }\n else {\n vm.selectedUser = user;\n vm.selectedUser.$rights();\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .controller('AclController', AclController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n navController.$inject = ['$scope', '$timeout', '$interval', '$http', '$mdSidenav', '$mdBottomSheet', '$mdMedia', '$log', 'sgConstant', 'sgSettings', 'Alarm'];\n function navController($scope, $timeout, $interval, $http, $mdSidenav, $mdBottomSheet, $mdMedia, $log, sgConstant, sgSettings, Alarm) {\n\n $scope.activeUser = sgSettings.activeUser();\n\n // Show current day in top bar\n $scope.currentDay = window.currentDay;\n $timeout(function() {\n // Update date when day ends\n $interval(function() {\n $http.get('../date').success(function(data) {\n $scope.currentDay = data;\n });\n }, 24 * 3600 * 1000);\n }, window.currentDay.secondsBeforeTomorrow * 1000);\n\n $scope.toggleLeft = function () {\n $mdSidenav('left').toggle()\n .then(function () {\n $log.debug(\"toggle left is done\");\n });\n };\n $scope.toggleRight = function () {\n $mdSidenav('right').toggle()\n .then(function () {\n $log.debug(\"toggle RIGHT is done\");\n });\n };\n $scope.openBottomSheet = function() {\n $mdBottomSheet.show({\n parent: angular.element(document.getElementById('left-sidenav')),\n templateUrl: 'bottomSheetTemplate.html'\n });\n };\n $scope.toggleDetailView = function() {\n var detail = angular.element(document.getElementById('detailView'));\n detail.toggleClass('sg-close');\n };\n $scope.$watch(function() {\n return $mdMedia(sgConstant['gt-md']);\n }, function(newVal) {\n $scope.isGtMedium = newVal;\n });\n\n Alarm.getAlarms();\n }\n\n angular.module('SOGo.Common')\n .controller('navController', navController);\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name Acl\n * @constructor\n * @param {String} folderId - the folder ID associated to the ACLs\n */\n function Acl(folderId) {\n this.folderId = folderId;\n }\n\n /**\n * @memberof Acl\n * @desc The factory we'll use to register with Angular.\n * @return the Acl constructor\n */\n Acl.factory = ['$q', '$timeout', 'sgSettings', 'Resource', 'User', function($q, $timeout, Settings, Resource, User) {\n angular.extend(Acl, {\n $q: $q,\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $User: User\n });\n\n return Acl;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('Acl', Acl.factory);\n\n /**\n * @function $users\n * @memberof Acl.prototype\n * @desc Fetch the list of users that have specific rights for the current folder.\n * @return a promise of an array of User objects\n */\n Acl.prototype.$users = function() {\n var _this = this,\n deferred = Acl.$q.defer(),\n user;\n if (this.users) {\n deferred.resolve(this.users);\n }\n else {\n return Acl.$$resource.fetch(this.folderId, 'acls').then(function(response) {\n _this.users = [];\n //console.debug(JSON.stringify(users, undefined, 2));\n angular.forEach(response.users, function(data) {\n user = new Acl.$User(data);\n user.canSubscribeUser = user.isSubscribed;\n user.wasSubscribed = user.isSubscribed;\n user.$rights = angular.bind(user, user.$acl, _this.folderId);\n _this.users.push(user);\n });\n deferred.resolve(_this.users);\n return _this.users;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $addUser\n * @memberof Acl.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @see {@link User.$filter}\n */\n Acl.prototype.$addUser = function(user) {\n var _this = this,\n deferred = Acl.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.users, 'uid'), user.uid) > -1) {\n // No UID specified or user already in ACLs\n deferred.resolve();\n }\n else {\n Acl.$$resource.fetch(this.folderId, 'addUserInAcls', param).then(function() {\n user.wasSubscribed = false;\n user.userClass = user.isGroup ? 'group-user' : 'normal-user';\n user.$rights = angular.bind(user, user.$acl, _this.folderId);\n _this.users.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeUser\n * @memberof Acl.prototype\n * @desc Remove a user from the folder's ACL\n * @return a promise of the server call to remove the user from the folder's ACL\n */\n Acl.prototype.$removeUser = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Acl.$$resource.fetch(this.folderId, 'removeUserFromAcls', param).then(function() {\n var i = _.indexOf(_.pluck(_this.users, 'uid'), uid);\n if (i >= 0) {\n _this.users.splice(i, 1);\n }\n });\n };\n\n /**\n * @function $resetUsersRights\n * @memberof Acl.prototype\n * @desc Restore initial rights of all users.\n */\n Acl.prototype.$resetUsersRights = function() {\n angular.forEach(this.users, function(user) {\n user.$resetRights();\n });\n };\n\n /**\n * @function $saveUsersRights\n * @memberof Acl.prototype\n * @desc Save user rights that have changed and subscribe users that have been selected.\n * @return a promise that resolved only if the modifications and subscriptions were successful\n */\n Acl.prototype.$saveUsersRights = function() {\n var _this = this,\n deferredSave = Acl.$q.defer(),\n deferredSubscribe = Acl.$q.defer(),\n param = {action: 'saveUserRights'},\n users = [];\n\n // Save user rights\n angular.forEach(this.users, function(user) {\n if (user.$rightsAreDirty()) {\n users.push(user.$omit());\n // console.debug('save ' + JSON.stringify(user.$omit(), undefined, 2));\n }\n });\n if (users.length) {\n Acl.$$resource.save(this.folderId, users, param)\n .then(function() {\n // Save was successful; copy rights to shadow rights\n angular.forEach(_this.users, function(user) {\n if (user.$rightsAreDirty()) {\n user.$shadowRights = angular.copy(user.rights);\n }\n });\n deferredSave.resolve();\n }, deferredSave.reject);\n }\n else {\n deferredSave.resolve();\n }\n\n // Subscribe users\n users = [];\n angular.forEach(this.users, function(user) {\n if (!user.wasSubscribed && user.isSubscribed) {\n users.push(user.uid);\n // console.debug('subscribe ' + user.uid);\n }\n });\n if (users.length) {\n param = {uids: users.join(',')};\n Acl.$$resource.fetch(this.folderId, 'subscribeUsers', param)\n .then(function() {\n // Subscribe was successful; reset \"wasSubscribed\" attribute\n angular.forEach(_this.users, function(user) {\n user.wasSubscribed = user.isSubscribed;\n });\n deferredSubscribe.resolve();\n }, deferredSubscribe.reject);\n }\n else {\n deferredSubscribe.resolve();\n }\n return Acl.$q.all([deferredSave.promise, deferredSubscribe.promise]);\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Alarm\n * @constructor\n */\n function Alarm() {\n this.currentAlarm = null;\n }\n\n /**\n * @name getAlarms\n * @desc Fetch the list of alarms from the server and use the last one\n */\n Alarm.getAlarms = function() {\n var _this = this;\n var now = new Date();\n var browserTime = Math.floor(now.getTime()/1000);\n\n this.$$resource.fetch('', 'alarmslist?browserTime=' + browserTime).then(function(data) {\n \n var alarms = data.alarms.sort(function reverseSortByAlarmTime(a, b) {\n var x = parseInt(a[2]);\n var y = parseInt(b[2]);\n return (y - x);\n });\n\n if (alarms.length > 0) {\n var next = alarms.pop();\n var now = new Date();\n var utc = Math.floor(now.getTime()/1000);\n var url = next[0] + '/' + next[1];\n var alarmTime = parseInt(next[2]);\n var delay = alarmTime;\n if (alarmTime > 0) delay -= utc;\n var d = new Date(alarmTime*1000);\n //console.log (\"now = \" + now.toUTCString());\n //console.log (\"next event \" + url + \" in \" + delay + \" seconds (on \" + d.toUTCString() + \")\");\n\n var f = angular.bind(_this, Alarm.showAlarm, url);\n\n if (_this.currentAlarm)\n _this.$timeout.cancel(_this.currentAlarm);\n\n _this.currentAlarm = _this.$timeout(f, delay*1000);\n }\n });\n };\n \n /**\n * @name showAlarm\n * @desc Show the latest alarm using a toast\n * @param url The URL of the calendar component for snoozing\n */\n Alarm.showAlarm = function(url) {\n var _this = this;\n\n this.$$resource.fetch(url, '?resetAlarm=yes');\n\n this.$toast.show({\n position: 'top right',\n hideDelay: 0,\n template: [\n '',\n ' ',\n ' ',\n ' ',\n l('5 minutes'),\n ' ',\n ' ',\n l('10 minutes'),\n ' ',\n ' ',\n l('15 minutes'),\n ' ',\n ' ',\n l('30 minutes'),\n ' ',\n ' ',\n l('45 minutes'),\n ' ',\n ' ',\n l('1 hour'),\n ' ',\n ' ',\n l('1 day'),\n ' ',\n ' ',\n ' ',\n ' ',\n l('Cancel'),\n ' ',\n ' ',\n l('Ok'),\n ' ',\n ''\n ].join(''),\n locals: {\n url: url\n },\n controller: AlarmController\n });\n \n /**\n * @ngInject\n */\n AlarmController.$inject = ['scope', '$mdToast', 'url'];\n function AlarmController(scope, $mdToast, url) {\n scope.reminder = '10';\n scope.cancel = function() {\n $mdToast.hide();\n };\n scope.ok = function() {\n _this.$$resource.fetch(url, 'view?snoozeAlarm=' + scope.reminder);\n $mdToast.hide();\n };\n }\n };\n\n /**\n * @memberof Alarm\n * @desc The factory we'll register as Alarm in the Angular module SOGo.Common\n * @ngInject\n */\n AlarmService.$inject = ['$timeout', 'sgSettings', 'Resource', '$mdToast'];\n function AlarmService($timeout, Settings, Resource, $mdToast) {\n angular.extend(Alarm, {\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $toast: $mdToast\n });\n\n return Alarm; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Alarm', AlarmService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for Authentication */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n angular.module('SOGo.Authentication', [])\n\n .constant('passwordPolicyConfig', {\n PolicyPasswordChangeUnsupported: -3,\n PolicyPasswordSystemUnknown: -2,\n PolicyPasswordUnknown: -1,\n PolicyPasswordExpired: 0,\n PolicyAccountLocked: 1,\n PolicyChangeAfterReset: 2,\n PolicyPasswordModNotAllowed: 3,\n PolicyMustSupplyOldPassword: 4,\n PolicyInsufficientPasswordQuality: 5,\n PolicyPasswordTooShort: 6,\n PolicyPasswordTooYoung: 7,\n PolicyPasswordInHistory: 8,\n PolicyNoError: 65535\n })\n\n // TODO: convert to a Factory recipe?\n .provider('Authentication', Authentication);\n\n 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 * sgToggleGrid - Convert the tiles of a grid to toggle buttons\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgToggleGrid - the model of the source objects\n * @param {string} [sgToggleGridAttr] - the attribute that specifies if an object is enabled (toggled)\n * @ngInject\n * @example:\n\n ..\n */\n sgToggleGrid.$inject = ['$parse'];\n function sgToggleGrid($parse) {\n return {\n restrict: 'A',\n link: link\n };\n\n function link(scope, iElement, attrs, ctrl) {\n var tiles = iElement.find('md-grid-tile'),\n tile,\n i,\n modelDays,\n modelAttr,\n ensureInitRunsOnce,\n toggleClass;\n\n ensureInitRunsOnce = scope.$watch(function() {\n // Parse attribute until it returns a valid object\n return $parse(attrs.sgToggleGrid)(scope);\n }, function(days) {\n if (angular.isDefined(days)) {\n var flattenedDays = days;\n modelDays = days;\n if (attrs.sgToggleGridAttr) {\n modelAttr = attrs.sgToggleGridAttr;\n flattenedDays = _.pluck(days, attrs.sgToggleGridAttr);\n }\n _.each(tiles, function(o) {\n var tile = angular.element(o);\n if (_.contains(flattenedDays, tile.attr('value'))) {\n tile.addClass('sg-active');\n }\n });\n ensureInitRunsOnce();\n }\n });\n\n toggleClass = function() {\n // Toggle class on click event and call toggle function\n var tile = angular.element(this),\n day = tile.attr('value');\n tile.toggleClass('sg-active');\n toggle(day);\n };\n\n for (i = 0; i < tiles.length; i++) {\n tile = angular.element(tiles[i]);\n tile.addClass('iconButton');\n tile.find('figure').addClass('md-icon');\n tile.on('click', toggleClass);\n }\n\n function toggle(day) {\n var i = _.findIndex(modelDays, function(o) {\n if (modelAttr)\n return o[modelAttr] == day;\n else\n return o == day;\n });\n if (i < 0) {\n if (modelAttr) {\n var o = {};\n o[modelAttr] = day;\n modelDays.push(o);\n }\n else\n modelDays.push(day);\n }\n else\n modelDays.splice(i, 1);\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgToggleGrid', sgToggleGrid);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Common/Acl.service.js b/UI/WebServerResources/js/Common/Acl.service.js index e7b4d7656..678ce5c59 100644 --- a/UI/WebServerResources/js/Common/Acl.service.js +++ b/UI/WebServerResources/js/Common/Acl.service.js @@ -48,7 +48,7 @@ else { return Acl.$$resource.fetch(this.folderId, 'acls').then(function(response) { _this.users = []; - // console.debug(JSON.stringify(users, undefined, 2)); + //console.debug(JSON.stringify(users, undefined, 2)); angular.forEach(response.users, function(data) { user = new Acl.$User(data); user.canSubscribeUser = user.isSubscribed; diff --git a/UI/WebServerResources/js/Contacts.js b/UI/WebServerResources/js/Contacts.js index 1a4450ded..a7bbcda39 100644 --- a/UI/WebServerResources/js/Contacts.js +++ b/UI/WebServerResources/js/Contacts.js @@ -1,2 +1,2 @@ -!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("app",{url:"/addressbooks","abstract":!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:stateAddressbooks}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:stateAddressbook}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:stateNewCard}}).state("app.addressbook.card",{url:"/:cardId","abstract":!0,views:{card:{template:""}},resolve:{stateCard:stateCard}}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),$urlRouterProvider.otherwise("/addressbooks/personal")}function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}function stateAddressbook($stateParams,AddressBook){return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData}function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});return stateAddressbook.selectedCard=!0,card}function stateCard($stateParams,stateAddressbook){return stateAddressbook.selectedCard=$stateParams.cardId,stateAddressbook.$getCard($stateParams.cardId)}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.ContactsUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAddressbooks.$inject=["AddressBook"],stateAddressbook.$inject=["$stateParams","AddressBook"],stateNewCard.$inject=["$stateParams","stateAddressbook","Card"],stateCard.$inject=["$stateParams","stateAddressbook"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AddressBookController($scope,$state,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function newComponent(ev){function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide(),$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ",'
'," "," "+l("Contact")," "," "," "+l("List")," ","
","
","
"].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController}),ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"]}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=!1})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards),delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=!0})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return vm.selectedFolder.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter("")}var vm=this;AddressBook.selectedFolder=stateAddressbook,vm.selectedFolder=stateAddressbook,vm.selectCard=selectCard,vm.newComponent=newComponent,vm.notSelectedComponent=notSelectedComponent,vm.unselectCards=unselectCards,vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards,vm.saveSelectedCards=saveSelectedCards,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1}}AddressBookController.$inject=["$scope","$state","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)}(),function(){"use strict";function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){function select(folder){vm.editMode=!1,$state.go("app.addressbook",{addressbookId:folder.id})}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){folder.isRemote||(vm.editMode=folder.id,vm.originalAddressbook=angular.extend({},folder.$omit()),focus("addressBookName_"+folder.id))}function revertEditing(folder){folder.name=vm.originalAddressbook.name,vm.editMode=!1}function save(folder){var name=folder.name;name&&name.length>0&&name!=vm.originalAddressbook.name&&folder.$rename(name).then(function(data){vm.editMode=!1},function(data,status){Dialog.alert(l("Warning"),data)})}function confirmDelete(){vm.service.selectedFolder.isSubscription?vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null,$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){return vm.service.selectedFolder=null,!0})["catch"](function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}function importCards(){}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name),AddressBook.$subscribe(addressbookData.owner,addressbookData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=AddressBook,vm.select=select,vm.newAddressbook=newAddressbook,vm.edit=edit,vm.revertEditing=revertEditing,vm.save=save,vm.confirmDelete=confirmDelete,vm.importCards=importCards,vm.exportCards=exportCards,vm.showLinks=showLinks,vm.share=share,vm.subscribeToFolder=subscribeToFolder}AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)}(),function(){"use strict";function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){return AddressBook.selectedFolder.$filter($query,{dry:!0,excludeLists:!0},excludedCards),AddressBook.selectedFolder.$cards}function save(form){form.$valid&&vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);0>i?AddressBook.selectedFolder.$reload():AddressBook.selectedFolder.cards[i]=angular.copy(vm.card),$state.go("app.addressbook.card.view",{cardId:vm.card.id})})["catch"](function(err){console.log(err)})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset(),vm.card.isNew?(vm.card=null,delete AddressBook.selectedFolder.selectedCard,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})):$state.go("app.addressbook.card.view",{cardId:vm.card.id})}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id}),vm.card=null,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function viewRawSource($event){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){function CardRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:CardRawSourceDialogController}),CardRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.card=stateCard,vm.currentFolder=AddressBook.selectedFolder,vm.allEmailTypes=Card.$EMAIL_TYPES,vm.allTelTypes=Card.$TEL_TYPES,vm.allUrlTypes=Card.$URL_TYPES,vm.allAddressTypes=Card.$ADDRESS_TYPES,vm.categories={},vm.userFilterResults=[],vm.addOrgUnit=addOrgUnit,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.viewRawSource=viewRawSource}CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",CardController)}(),function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];return data.street&&lines.push(data.street),data.street2&&lines.push(data.street2),data.locality&&locality_region.push(data.locality),data.region&&locality_region.push(data.region),locality_region.length>0&&lines.push(locality_region.join(", ")),data.country&&lines.push(data.country),data.postalcode&&lines.push(data.postalcode),lines.join("
")}}],template:'
'}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)}(); +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("app",{url:"/addressbooks","abstract":!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:stateAddressbooks}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:stateAddressbook}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:stateNewCard}}).state("app.addressbook.card",{url:"/:cardId","abstract":!0,views:{card:{template:""}},resolve:{stateCard:stateCard}}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),$urlRouterProvider.otherwise("/addressbooks/personal")}function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}function stateAddressbook($stateParams,AddressBook){return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData}function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});return stateAddressbook.selectedCard=!0,card}function stateCard($stateParams,stateAddressbook){return stateAddressbook.selectedCard=$stateParams.cardId,stateAddressbook.$getCard($stateParams.cardId)}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.ContactsUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAddressbooks.$inject=["AddressBook"],stateAddressbook.$inject=["$stateParams","AddressBook"],stateNewCard.$inject=["$stateParams","stateAddressbook","Card"],stateCard.$inject=["$stateParams","stateAddressbook"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AddressBookController($scope,$state,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function newComponent(ev){function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide(),$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ",'
'," "," "+l("Contact")," "," "," "+l("List")," ","
","
","
"].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController}),ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"]}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=!1})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards),delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function 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 vm.selectedFolder.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter("")}var vm=this;AddressBook.selectedFolder=stateAddressbook,vm.selectedFolder=stateAddressbook,vm.selectCard=selectCard,vm.newComponent=newComponent,vm.notSelectedComponent=notSelectedComponent,vm.unselectCards=unselectCards,vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards,vm.saveSelectedCards=saveSelectedCards,vm.copySelectedCards=copySelectedCards,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1}}AddressBookController.$inject=["$scope","$state","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)}(),function(){"use strict";function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){function select(folder){vm.editMode=!1,$state.go("app.addressbook",{addressbookId:folder.id})}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){folder.isRemote||(vm.editMode=folder.id,vm.originalAddressbook=angular.extend({},folder.$omit()),focus("addressBookName_"+folder.id))}function revertEditing(folder){folder.name=vm.originalAddressbook.name,vm.editMode=!1}function save(folder){var name=folder.name;name&&name.length>0&&name!=vm.originalAddressbook.name&&folder.$rename(name).then(function(data){vm.editMode=!1},function(data,status){Dialog.alert(l("Warning"),data)})}function confirmDelete(){vm.service.selectedFolder.isSubscription?vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null,$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){return vm.service.selectedFolder=null,!0})["catch"](function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}function importCards(){}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name),AddressBook.$subscribe(addressbookData.owner,addressbookData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=AddressBook,vm.select=select,vm.newAddressbook=newAddressbook,vm.edit=edit,vm.revertEditing=revertEditing,vm.save=save,vm.confirmDelete=confirmDelete,vm.importCards=importCards,vm.exportCards=exportCards,vm.showLinks=showLinks,vm.share=share,vm.subscribeToFolder=subscribeToFolder}AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)}(),function(){"use strict";function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){return AddressBook.selectedFolder.$filter($query,{dry:!0,excludeLists:!0},excludedCards),AddressBook.selectedFolder.$cards}function save(form){form.$valid&&vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);0>i?AddressBook.selectedFolder.$reload():AddressBook.selectedFolder.cards[i]=angular.copy(vm.card),$state.go("app.addressbook.card.view",{cardId:vm.card.id})})["catch"](function(err){console.log(err)})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset(),vm.card.isNew?(vm.card=null,delete AddressBook.selectedFolder.selectedCard,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})):$state.go("app.addressbook.card.view",{cardId:vm.card.id})}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id}),vm.card=null,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function viewRawSource($event){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){function CardRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:CardRawSourceDialogController}),CardRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.card=stateCard,vm.currentFolder=AddressBook.selectedFolder,vm.allEmailTypes=Card.$EMAIL_TYPES,vm.allTelTypes=Card.$TEL_TYPES,vm.allUrlTypes=Card.$URL_TYPES,vm.allAddressTypes=Card.$ADDRESS_TYPES,vm.categories={},vm.userFilterResults=[],vm.addOrgUnit=addOrgUnit,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.viewRawSource=viewRawSource}CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",CardController)}(),function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];return data.street&&lines.push(data.street),data.street2&&lines.push(data.street2),data.locality&&locality_region.push(data.locality),data.region&&locality_region.push(data.region),locality_region.length>0&&lines.push(locality_region.join(", ")),data.country&&lines.push(data.country),data.postalcode&&lines.push(data.postalcode),lines.join("
")}}],template:'
'}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)}(); //# sourceMappingURL=Contacts.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.js.map b/UI/WebServerResources/js/Contacts.js.map index f0cfa48e3..3a85d3554 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","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","this","AddressBooksController","User","select","folder","editMode","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","length","$rename","alert","confirmDelete","service","isSubscription","$delete","importCards","exportCards","showLinks","LinksDialogController","close","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","debug","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","$reload","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","o","viewRawSource","$event","$$resource","post","currentFolder","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","push","street2","locality","region","country","postalcode","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: ''\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $state, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.mode = { search: false };\n \n function selectCard(card) {\n $state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});\n }\n \n function newComponent(ev) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' ',\n ' ' + l('Contact'),\n ' ',\n ' ',\n ' ' + l('List'),\n ' ',\n '
',\n '
',\n '
'\n ].join(''),\n locals: {\n addressbookId: vm.selectedFolder.id\n },\n controller: ComponentDialogController\n });\n \n /**\n * @ngInject\n */\n ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];\n function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {\n scope.create = function(type) {\n $mdDialog.hide();\n $state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });\n };\n }\n }\n\n function notSelectedComponent(currentCard, type) {\n return (currentCard && currentCard.c_component == type && !currentCard.selected);\n }\n\n function unselectCards() {\n _.each(vm.selectedFolder.cards, function(card) { card.selected = false; });\n }\n \n function confirmDeleteSelectedCards() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected contacts?'))\n .then(function() {\n // User confirmed the deletion\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$deleteCards(selectedCards);\n delete vm.selectedFolder.selectedCard;\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function saveSelectedCards() {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var selectedUIDs = _.pluck(selectedCards, 'id');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.cards, function(card) {\n card.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter('', { sort: field });\n }\n\n function sortedBy(field) {\n return vm.selectedFolder.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select(folder) {\n vm.editMode = false;\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards() {\n\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('
');\n };\n }],\n template: '
'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]} \ No newline at end of file +{"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","User","select","editMode","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","length","$rename","confirmDelete","service","isSubscription","$delete","importCards","exportCards","showLinks","LinksDialogController","close","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","debug","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","$reload","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","o","viewRawSource","$event","$$resource","post","currentFolder","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","push","street2","locality","region","country","postalcode","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: ''\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $state, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.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 vm.selectedFolder.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select(folder) {\n vm.editMode = false;\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards() {\n\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('
');\n };\n }],\n template: '
'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js b/UI/WebServerResources/js/Contacts.services.js index a9c89a822..7853e9469 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,activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),AddressBook}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("AddressBook",AddressBook.$factory),AddressBook.$filterAll=function(search,options,excludedCards){var params={search:search};if(!search)return AddressBook.$cards=[],AddressBook.$q.when(AddressBook.$cards);if(angular.isUndefined(AddressBook.$cards))AddressBook.$cards=[];else if(AddressBook.$query==search)return AddressBook.$q.when(AddressBook.$cards);return AddressBook.$query=search,angular.extend(params,options),AddressBook.$$resource.fetch(null,"allContactSearch",params).then(function(response){var results,card,index,compareIds=function(data){return this.id==data.id};for(results=excludedCards?_.filter(response.contacts,function(data){return _.isUndefined(_.find(excludedCards,compareIds,data))}):response.contacts,index=AddressBook.$cards.length-1;index>=0;index--)card=AddressBook.$cards[index],_.isUndefined(_.find(results,compareIds,card))&&AddressBook.$cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(AddressBook.$cards,compareIds,data))){var card=new AddressBook.$Card(data,search);AddressBook.$cards.splice(index,0,card)}}),AddressBook.$cards})},AddressBook.$add=function(addressbook){var list,sibling,i;list=addressbook.isSubscription?this.$subscriptions:this.$addressbooks,sibling=_.find(list,function(o){return"personal"==addressbook.id||"personal"!=o.id&&1===o.name.localeCompare(addressbook.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,addressbook)},AddressBook.$findAll=function(data){var _this=this;return data&&(this.$addressbooks=[],this.$subscriptions=[],this.$remotes=[],angular.forEach(data,function(o,i){var addressbook=new AddressBook(o);addressbook.isRemote?_this.$remotes.push(addressbook):addressbook.isSubscription?_this.$subscriptions.push(addressbook):_this.$addressbooks.push(addressbook)})),this.$addressbooks},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$$resource.fetch(addressbookId,"view");return new AddressBook(futureAddressBookData)},AddressBook.$subscribe=function(uid,path){var _this=this;return AddressBook.$$resource.userResource(uid).fetch(path,"subscribe").then(function(addressbookData){var addressbook=new AddressBook(addressbookData);return _.isUndefined(_.find(_this.$subscriptions,function(o){return o.id==addressbookData.id}))&&AddressBook.$add(addressbook),addressbook})},AddressBook.prototype.init=function(data){this.$cards=[],this.cards=[],angular.extend(this,data),this.isOwned=AddressBook.activeUser.isSuperUser||this.owner==AddressBook.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=AddressBook.activeUser.login,this.$query={search:"name_or_address",value:"",sort:"c_cn",asc:"true"}},AddressBook.prototype.$id=function(){return this.id?AddressBook.$q.when(this.id):this.$futureAddressBookData.then(function(addressbook){return addressbook.id})},AddressBook.prototype.$selectedCount=function(){var count;return count=0,this.cards&&(count=_.filter(this.cards,function(card){return card.selected}).length),count},AddressBook.prototype.$startRefreshTimeout=function(){var _this=this;AddressBook.$refreshTimeout&&AddressBook.$timeout.cancel(AddressBook.$refreshTimeout),AddressBook.$Preferences.ready().then(function(){var refreshViewCheck=AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,AddressBook.prototype.$reload);AddressBook.$refreshTimeout=AddressBook.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},AddressBook.prototype.$reload=function(){var _this=this;return this.$startRefreshTimeout(),AddressBook.$$resource.fetch(this.id,"view").then(function(response){var index,card,results=response.cards,cards=_this.cards,compareIds=function(data){return this.id==data.id};for(index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data);cards.splice(index,0,card)}}),cards})},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;if(options&&(angular.extend(this.$query,options),options.dry)){if(!search)return this.$cards=[],AddressBook.$q.when(this.$cards);if(this.$query.value==search)return AddressBook.$q.when(this.$cards)}return this.$query.value=search,this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",_this.$query)}).then(function(response){var results,cards,card,index,compareIds=function(data){return this.id==data.id};for(cards=options&&options.dry?_this.$cards:_this.cards,results=excludedCards?_.filter(response.cards,function(card){return _.isUndefined(_.find(excludedCards,compareIds,card))}):response.cards,index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data,search);cards.splice(index,0,card)}}),_.each(results,function(data,index){var oldIndex,removedCards;cards[index].id!=data.id&&(oldIndex=_.findIndex(cards,compareIds,data),removedCards=cards.splice(oldIndex,1),cards.splice(index,0,removedCards[0]))}),cards})},AddressBook.prototype.$rename=function(name){var i=_.indexOf(_.pluck(AddressBook.$addressbooks,"id"),this.id);return this.name=name,AddressBook.$addressbooks.splice(i,1),AddressBook.$add(this),this.$save()},AddressBook.prototype.$delete=function(){var list,promise,_this=this,d=AddressBook.$q.defer();return this.isSubscription?(promise=AddressBook.$$resource.fetch(this.id,"unsubscribe"),list=AddressBook.$subscriptions):(promise=AddressBook.$$resource.remove(this.id),list=AddressBook.$addressbooks),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},AddressBook.prototype.$deleteCards=function(cards){var uids=_.map(cards,function(card){return card.id}),_this=this;return AddressBook.$$resource.post(this.id,"batchDelete",{uids:uids}).then(function(){_this.cards=_.difference(_this.cards,cards)})},AddressBook.prototype.$save=function(){return AddressBook.$$resource.save(this.id,this.$omit()).then(function(data){return data})},AddressBook.prototype.$getCard=function(cardId){return this.$id().then(function(addressbookId){return AddressBook.$Card.$find(addressbookId,cardId)})},AddressBook.prototype.$unwrap=function(futureAddressBookData){var _this=this;this.$futureAddressBookData=futureAddressBookData.then(function(data){return AddressBook.$timeout(function(){return angular.forEach(AddressBook.$findAll(),function(o,i){o.id==data.id&&angular.extend(_this,o)}),_this.init(data),angular.forEach(_this.cards,function(o,i){_this.cards[i]=new AddressBook.$Card(o)}),_this.$acl=new AddressBook.$$Acl("Contacts/"+_this.id),_this.$startRefreshTimeout(),_this})},function(data){_this.isError=!0,angular.isObject(data)&&AddressBook.$timeout(function(){angular.extend(_this,data)})})},AddressBook.prototype.$omit=function(){var addressbook={};return angular.forEach(this,function(value,key){"constructor"!=key&&"cards"!=key&&"$"!=key[0]&&(addressbook[key]=value)}),addressbook}}(),function(){"use strict";function Card(futureCardData,partial){if("function"!=typeof futureCardData.then){if(this.init(futureCardData,partial),this.pid&&!this.id){var newCardData=Card.$$resource.newguid(this.pid);this.$unwrap(newCardData),this.isNew=!0}}else this.$unwrap(futureCardData)}Card.$TEL_TYPES=["work","home","cell","fax","pager"],Card.$EMAIL_TYPES=["work","home","pref"],Card.$URL_TYPES=["work","home","pref"],Card.$ADDRESS_TYPES=["work","home"],Card.$factory=["$timeout","sgSettings","Resource","Preferences","Gravatar",function($timeout,Settings,Resource,Preferences,Gravatar){return angular.extend(Card,{$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$timeout:$timeout,$gravatar:Gravatar}),Preferences.ready().then(function(){Preferences.defaults.SOGoContactsCategories&&(Card.$categories=Preferences.defaults.SOGoContactsCategories)}),Card}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("Card",Card.$factory),Card.$find=function(addressbookId,cardId){var futureCardData=this.$$resource.fetch([addressbookId,cardId].join("/"),"view");return cardId?new Card(futureCardData):Card.$unwrapCollection(futureCardData)},Card.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(Card.$categories,function(category){return-1!=category.search(re)})},Card.$unwrapCollection=function(futureCardData){var collection={};return collection.$futureCardData=futureCardData,futureCardData.then(function(cards){Card.$timeout(function(){angular.forEach(cards,function(data,index){collection[data.id]=new Card(data)})})}),collection},Card.prototype.init=function(data,partial){this.refs=[],angular.extend(this,data),this.$$fullname||(this.$$fullname=this.$fullname()),this.$$email||(this.$$email=this.$preferredEmail(partial)),this.$$image||(this.$$image=this.image||Card.$gravatar(this.$preferredEmail(partial),32)),this.selected=!1,this.empty=" "},Card.prototype.$id=function(){return this.$futureCardData.then(function(data){return data.id})},Card.prototype.$save=function(){var _this=this,action="saveAsContact";return"vlist"==this.c_component&&(action="saveAsList"),Card.$$resource.save([this.pid,this.id||"_new_"].join("/"),this.$omit(),{action:action}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Card.prototype.$delete=function(attribute,index){return attribute?void(index>-1&&this[attribute].length>index&&this[attribute].splice(index,1)):Card.$$resource.remove([this.pid,this.id].join("/"))},Card.prototype.$fullname=function(){var names,fn=this.c_cn||"";return 0===fn.length&&(names=[],this.c_givenname&&this.c_givenname.length>0&&names.push(this.c_givenname),this.nickname&&this.nickname.length>0&&names.push(""+this.nickname+""),this.c_sn&&this.c_sn.length>0&&names.push(this.c_sn),names.length>0?fn=names.join(" "):this.c_org&&this.c_org.length>0?fn=this.c_org:this.emails&&this.emails.length>0?fn=_.find(this.emails,function(i){return""!==i.value}).value:this.c_cn&&this.c_cn.length>0&&(fn=this.c_cn)),fn},Card.prototype.$description=function(){var description=[];return this.title&&description.push(this.title),this.role&&description.push(this.role),this.orgUnits&&this.orgUnits.length>0&&_.forEach(this.orgUnits,function(unit){""!==unit.value&&description.push(unit.value)}),this.org&&description.push(this.org),this.description&&description.push(this.description),description.join(", ")},Card.prototype.$preferredEmail=function(partial){var email,re;return partial&&(re=new RegExp(partial,"i"),email=_.find(this.emails,function(o){return re.test(o.value)})),email?email=email.value:(email=_.find(this.emails,function(o){return"pref"==o.type}),email=email?email.value:this.emails&&this.emails.length?this.emails[0].value:""),email},Card.prototype.$shortFormat=function(partial){var fullname=this.$fullname(),email=this.$preferredEmail(partial);return email&&email!=fullname&&(fullname+=" <"+email+">"),fullname},Card.prototype.$birthday=function(){return new Date(1e3*this.birthday)},Card.prototype.$isCard=function(){return"vcard"==this.c_component},Card.prototype.$isList=function(){return"vlist"==this.c_component},Card.prototype.$addOrgUnit=function(orgUnit){if(angular.isUndefined(this.orgUnits))this.orgUnits=[{value:orgUnit}];else{for(var i=0;i"),"["+desc+"]"}}(); +!function(){"use strict";function AddressBook(futureAddressBookData){if("function"!=typeof futureAddressBookData.then)if(this.init(futureAddressBookData),this.name&&!this.id){var newAddressBookData=AddressBook.$$resource.create("createFolder",this.name);this.$unwrap(newAddressBookData)}else this.id&&(this.$acl=new AddressBook.$$Acl("Contacts/"+this.id));else this.$unwrap(futureAddressBookData)}AddressBook.$factory=["$q","$timeout","$log","sgSettings","Resource","Card","Acl","Preferences",function($q,$timeout,$log,Settings,Resource,Card,Acl,Preferences){return angular.extend(AddressBook,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$Card:Card,$$Acl:Acl,$Preferences:Preferences,activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),AddressBook}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("AddressBook",AddressBook.$factory),AddressBook.$filterAll=function(search,options,excludedCards){var params={search:search};if(!search)return AddressBook.$cards=[],AddressBook.$q.when(AddressBook.$cards);if(angular.isUndefined(AddressBook.$cards))AddressBook.$cards=[];else if(AddressBook.$query==search)return AddressBook.$q.when(AddressBook.$cards);return AddressBook.$query=search,angular.extend(params,options),AddressBook.$$resource.fetch(null,"allContactSearch",params).then(function(response){var results,card,index,compareIds=function(data){return this.id==data.id};for(results=excludedCards?_.filter(response.contacts,function(data){return _.isUndefined(_.find(excludedCards,compareIds,data))}):response.contacts,index=AddressBook.$cards.length-1;index>=0;index--)card=AddressBook.$cards[index],_.isUndefined(_.find(results,compareIds,card))&&AddressBook.$cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(AddressBook.$cards,compareIds,data))){var card=new AddressBook.$Card(data,search);AddressBook.$cards.splice(index,0,card)}}),AddressBook.$cards})},AddressBook.$add=function(addressbook){var list,sibling,i;list=addressbook.isSubscription?this.$subscriptions:this.$addressbooks,sibling=_.find(list,function(o){return"personal"==addressbook.id||"personal"!=o.id&&1===o.name.localeCompare(addressbook.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,addressbook)},AddressBook.$findAll=function(data){var _this=this;return data&&(this.$addressbooks=[],this.$subscriptions=[],this.$remotes=[],angular.forEach(data,function(o,i){var addressbook=new AddressBook(o);addressbook.isRemote?_this.$remotes.push(addressbook):addressbook.isSubscription?_this.$subscriptions.push(addressbook):_this.$addressbooks.push(addressbook)})),this.$addressbooks},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$$resource.fetch(addressbookId,"view");return new AddressBook(futureAddressBookData)},AddressBook.$subscribe=function(uid,path){var _this=this;return AddressBook.$$resource.userResource(uid).fetch(path,"subscribe").then(function(addressbookData){var addressbook=new AddressBook(addressbookData);return _.isUndefined(_.find(_this.$subscriptions,function(o){return o.id==addressbookData.id}))&&AddressBook.$add(addressbook),addressbook})},AddressBook.prototype.init=function(data){this.$cards=[],this.cards=[],angular.extend(this,data),this.isOwned=AddressBook.activeUser.isSuperUser||this.owner==AddressBook.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=AddressBook.activeUser.login,this.$query={search:"name_or_address",value:"",sort:"c_cn",asc:"true"}},AddressBook.prototype.$id=function(){return this.id?AddressBook.$q.when(this.id):this.$futureAddressBookData.then(function(addressbook){return addressbook.id})},AddressBook.prototype.$selectedCount=function(){var count;return count=0,this.cards&&(count=_.filter(this.cards,function(card){return card.selected}).length),count},AddressBook.prototype.$startRefreshTimeout=function(){var _this=this;AddressBook.$refreshTimeout&&AddressBook.$timeout.cancel(AddressBook.$refreshTimeout),AddressBook.$Preferences.ready().then(function(){var refreshViewCheck=AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,AddressBook.prototype.$reload);AddressBook.$refreshTimeout=AddressBook.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},AddressBook.prototype.$reload=function(){var _this=this;return this.$startRefreshTimeout(),AddressBook.$$resource.fetch(this.id,"view").then(function(response){var index,card,results=response.cards,cards=_this.cards,compareIds=function(data){return this.id==data.id};for(index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data);cards.splice(index,0,card)}}),cards})},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;if(options&&(angular.extend(this.$query,options),options.dry)){if(!search)return this.$cards=[],AddressBook.$q.when(this.$cards);if(this.$query.value==search)return AddressBook.$q.when(this.$cards)}return this.$query.value=search,this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",_this.$query)}).then(function(response){var results,cards,card,index,compareIds=function(data){return this.id==data.id};for(cards=options&&options.dry?_this.$cards:_this.cards,results=excludedCards?_.filter(response.cards,function(card){return _.isUndefined(_.find(excludedCards,compareIds,card))}):response.cards,index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data,search);cards.splice(index,0,card)}}),_.each(results,function(data,index){var oldIndex,removedCards;cards[index].id!=data.id&&(oldIndex=_.findIndex(cards,compareIds,data),removedCards=cards.splice(oldIndex,1),cards.splice(index,0,removedCards[0]))}),cards})},AddressBook.prototype.$rename=function(name){var i=_.indexOf(_.pluck(AddressBook.$addressbooks,"id"),this.id);return this.name=name,AddressBook.$addressbooks.splice(i,1),AddressBook.$add(this),this.$save()},AddressBook.prototype.$delete=function(){var list,promise,_this=this,d=AddressBook.$q.defer();return this.isSubscription?(promise=AddressBook.$$resource.fetch(this.id,"unsubscribe"),list=AddressBook.$subscriptions):(promise=AddressBook.$$resource.remove(this.id),list=AddressBook.$addressbooks),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},AddressBook.prototype.$deleteCards=function(cards){var uids=_.map(cards,function(card){return card.id}),_this=this;return AddressBook.$$resource.post(this.id,"batchDelete",{uids:uids}).then(function(){_this.cards=_.difference(_this.cards,cards)})},AddressBook.prototype.$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)):Card.$$resource.remove([this.pid,this.id].join("/"))},Card.prototype.$fullname=function(){var names,fn=this.c_cn||"";return 0===fn.length&&(names=[],this.c_givenname&&this.c_givenname.length>0&&names.push(this.c_givenname),this.nickname&&this.nickname.length>0&&names.push(""+this.nickname+""),this.c_sn&&this.c_sn.length>0&&names.push(this.c_sn),names.length>0?fn=names.join(" "):this.c_org&&this.c_org.length>0?fn=this.c_org:this.emails&&this.emails.length>0?fn=_.find(this.emails,function(i){return""!==i.value}).value:this.c_cn&&this.c_cn.length>0&&(fn=this.c_cn)),fn},Card.prototype.$description=function(){var description=[];return this.title&&description.push(this.title),this.role&&description.push(this.role),this.orgUnits&&this.orgUnits.length>0&&_.forEach(this.orgUnits,function(unit){""!==unit.value&&description.push(unit.value)}),this.org&&description.push(this.org),this.description&&description.push(this.description),description.join(", ")},Card.prototype.$preferredEmail=function(partial){var email,re;return partial&&(re=new RegExp(partial,"i"),email=_.find(this.emails,function(o){return re.test(o.value)})),email?email=email.value:(email=_.find(this.emails,function(o){return"pref"==o.type}),email=email?email.value:this.emails&&this.emails.length?this.emails[0].value:""),email},Card.prototype.$shortFormat=function(partial){var fullname=this.$fullname(),email=this.$preferredEmail(partial);return email&&email!=fullname&&(fullname+=" <"+email+">"),fullname},Card.prototype.$birthday=function(){return new Date(1e3*this.birthday)},Card.prototype.$isCard=function(){return"vcard"==this.c_component},Card.prototype.$isList=function(){return"vlist"==this.c_component},Card.prototype.$addOrgUnit=function(orgUnit){if(angular.isUndefined(this.orgUnits))this.orgUnits=[{value:orgUnit}];else{for(var i=0;i"),"["+desc+"]"}}(); //# sourceMappingURL=Contacts.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js.map b/UI/WebServerResources/js/Contacts.services.js.map index 292a7a063..cc3d19255 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","selectedFolder","$refreshTimeout","module","e","factory","$filterAll","search","options","excludedCards","params","$cards","when","isUndefined","$query","fetch","response","results","card","index","compareIds","data","_","filter","contacts","find","length","splice","each","$add","addressbook","list","sibling","i","isSubscription","$subscriptions","$addressbooks","o","localeCompare","indexOf","pluck","$findAll","_this","$remotes","forEach","isRemote","push","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","cards","isOwned","isSuperUser","owner","login","value","sort","asc","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","save","$omit","$getCard","cardId","isError","isObject","key","futureCardData","partial","pid","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Gravatar","$gravatar","SOGoContactsCategories","$categories","join","$unwrapCollection","filterCategories","query","re","RegExp","category","collection","$futureCardData","refs","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","empty","action","c_component","$shadowData","attribute","names","fn","c_cn","c_givenname","nickname","c_sn","c_org","emails","$description","description","title","role","orgUnits","unit","org","email","test","type","$shortFormat","fullname","$birthday","Date","birthday","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","deep","copy","toString","desc"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name AddressBook\n * @constructor\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function AddressBook(futureAddressBookData) {\n // Data is immediately available\n if (typeof futureAddressBookData.then !== 'function') {\n this.init(futureAddressBookData);\n if (this.name && !this.id) {\n // Create a new addressbook on the server\n var newAddressBookData = AddressBook.$$resource.create('createFolder', this.name);\n this.$unwrap(newAddressBookData);\n }\n else if (this.id) {\n this.$acl = new AddressBook.$$Acl('Contacts/' + this.id);\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureAddressBookData);\n }\n }\n\n /**\n * @memberof AddressBook\n * @desc The factory we'll use to register with Angular\n * @returns the AddressBook constructor\n */\n AddressBook.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Card', 'Acl', 'Preferences', function($q, $timeout, $log, Settings, Resource, Card, Acl, Preferences) {\n angular.extend(AddressBook, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $Card: Card,\n $$Acl: Acl,\n $Preferences: Preferences,\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n\n return AddressBook; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of AddressBook in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('AddressBook', AddressBook.$factory);\n\n /**\n * @memberof AddressBook\n * @desc Search for cards among all addressbooks matching some criterias.\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query (excludeGroups and excludeLists)\n * @param {object[]} excludedCards - a list of Card objects that must be excluded from the results\n * @returns a collection of Cards instances\n */\n AddressBook.$filterAll = function(search, options, excludedCards) {\n var params = {search: search};\n\n if (!search) {\n // No query specified\n AddressBook.$cards = [];\n return AddressBook.$q.when(AddressBook.$cards);\n }\n if (angular.isUndefined(AddressBook.$cards)) {\n // First session query\n AddressBook.$cards = [];\n }\n else if (AddressBook.$query == search) {\n // Query hasn't changed\n return AddressBook.$q.when(AddressBook.$cards);\n }\n AddressBook.$query = search;\n\n angular.extend(params, options);\n\n return AddressBook.$$resource.fetch(null, 'allContactSearch', params).then(function(response) {\n var results, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.contacts, function(data) {\n return _.isUndefined(_.find(excludedCards, compareIds, data));\n });\n }\n else {\n results = response.contacts;\n }\n // Remove cards that no longer match the search query\n for (index = AddressBook.$cards.length - 1; index >= 0; index--) {\n card = AddressBook.$cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n AddressBook.$cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(AddressBook.$cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n AddressBook.$cards.splice(index, 0, card);\n }\n });\n return AddressBook.$cards;\n });\n };\n\n /**\n * @memberof AddressBook\n * @desc Add a new addressbook to the static list of addressbooks\n * @param {AddressBook} addressbook - an Addressbook object instance\n */\n AddressBook.$add = function(addressbook) {\n // Insert new addressbook at proper index\n var list, sibling, i;\n\n list = addressbook.isSubscription? this.$subscriptions : this.$addressbooks;\n sibling = _.find(list, function(o) {\n return (addressbook.id == 'personal' ||\n (o.id != 'personal' &&\n o.name.localeCompare(addressbook.name) === 1));\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, addressbook);\n };\n\n /**\n * @memberof AddressBook\n * @desc Set or get the list of addressbooks. Will instantiate a new AddressBook object for each item.\n * @param {array} [data] - the metadata of the addressbooks\n * @returns the list of addressbooks\n */\n AddressBook.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$addressbooks = [];\n this.$subscriptions = [];\n this.$remotes = [];\n // Instanciate AddressBook objects\n angular.forEach(data, function(o, i) {\n var addressbook = new AddressBook(o);\n if (addressbook.isRemote)\n _this.$remotes.push(addressbook);\n else if (addressbook.isSubscription)\n _this.$subscriptions.push(addressbook);\n else\n _this.$addressbooks.push(addressbook);\n });\n }\n return this.$addressbooks;\n };\n\n /**\n * @memberOf AddressBook\n * @desc Fetch list of cards and return an AddressBook instance.\n * @param {string} addressbookId - the addressbook identifier\n * @returns an AddressBook object instance\n */\n AddressBook.$find = function(addressbookId) {\n var futureAddressBookData = AddressBook.$$resource.fetch(addressbookId, 'view');\n\n return new AddressBook(futureAddressBookData);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Subscribe to another user's addressbook and add it to the list of addressbooks.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n AddressBook.$subscribe = function(uid, path) {\n var _this = this;\n return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {\n var addressbook = new AddressBook(addressbookData);\n if (_.isUndefined(_.find(_this.$subscriptions, function(o) {\n return o.id == addressbookData.id;\n }))) {\n // Not already subscribed\n AddressBook.$add(addressbook);\n }\n return addressbook;\n });\n };\n\n /**\n * @function init\n * @memberof AddressBook.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of addressbook\n */\n AddressBook.prototype.init = function(data) {\n this.$cards = [];\n this.cards = [];\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = AddressBook.activeUser.isSuperUser || this.owner == AddressBook.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != AddressBook.activeUser.login;\n this.$query = {search: 'name_or_address', value: '', sort: 'c_cn', asc: 'true'};\n };\n\n /**\n * @function $id\n * @memberof AddressBook.prototype\n * @desc Resolve the addressbook id.\n * @returns a promise of the addressbook id\n */\n AddressBook.prototype.$id = function() {\n if (this.id) {\n // Object already unwrapped\n return AddressBook.$q.when(this.id);\n }\n else {\n // Wait until object is unwrapped\n return this.$futureAddressBookData.then(function(addressbook) {\n return addressbook.id;\n });\n }\n };\n\n /**\n * @function $selectedCount\n * @memberof AddressBook.prototype\n * @desc Return the number of cards selected by the user.\n * @returns the number of selected cards\n */\n AddressBook.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.cards) {\n count = (_.filter(this.cards, function(card) { return card.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof AddressBook.prototype\n * @desc Starts the refresh timeout for the current selected address book\n */\n AddressBook.prototype.$startRefreshTimeout = function() {\n var _this = this;\n\n if (AddressBook.$refreshTimeout)\n AddressBook.$timeout.cancel(AddressBook.$refreshTimeout);\n\n AddressBook.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, AddressBook.prototype.$reload);\n AddressBook.$refreshTimeout = AddressBook.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $reload\n * @memberof AddressBook.prototype\n * @desc Reload list of cards\n * @returns a promise of the Cards instances\n */\n AddressBook.prototype.$reload = function() {\n var _this = this;\n\n this.$startRefreshTimeout();\n\n return AddressBook.$$resource.fetch(this.id, 'view')\n .then(function(response) {\n var index, card,\n results = response.cards,\n cards = _this.cards,\n compareIds = function(data) {\n return this.id == data.id;\n };\n\n // Remove cards that no longer exist\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n\n // Add new cards\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data);\n cards.splice(index, 0, card);\n }\n });\n\n return cards;\n });\n };\n\n /**\n * @function $filter\n * @memberof AddressBook.prototype\n * @desc Search for cards matching some criterias\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query\n * @returns a collection of Cards instances\n */\n AddressBook.prototype.$filter = function(search, options, excludedCards) {\n var _this = this;\n\n if (options) {\n angular.extend(this.$query, options);\n\n if (options.dry) {\n if (!search) {\n // No query specified\n this.$cards = [];\n return AddressBook.$q.when(this.$cards);\n }\n else if (this.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(this.$cards);\n }\n }\n }\n\n this.$query.value = search;\n\n return this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', _this.$query);\n }).then(function(response) {\n var results, cards, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (options && options.dry) {\n // Don't keep a copy of the resulting cards.\n // This is usefull when doing autocompletion.\n cards = _this.$cards;\n }\n else {\n cards = _this.cards;\n }\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.cards, function(card) {\n return _.isUndefined(_.find(excludedCards, compareIds, card));\n });\n }\n else {\n results = response.cards;\n }\n // Remove cards that no longer match the search query\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n cards.splice(index, 0, card);\n }\n });\n // Respect the order of the results\n _.each(results, function(data, index) {\n var oldIndex, removedCards;\n if (cards[index].id != data.id) {\n oldIndex = _.findIndex(cards, compareIds, data);\n removedCards = cards.splice(oldIndex, 1);\n cards.splice(index, 0, removedCards[0]);\n }\n });\n return cards;\n });\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), this.id);\n this.name = name;\n AddressBook.$addressbooks.splice(i, 1);\n AddressBook.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof AddressBook.prototype\n * @desc Delete the addressbook from the server and the static list of addressbooks.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$delete = function() {\n var _this = this,\n d = AddressBook.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');\n list = AddressBook.$subscriptions;\n }\n else {\n promise = AddressBook.$$resource.remove(this.id);\n list = AddressBook.$addressbooks;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteCards\n * @memberof AddressBook.prototype\n * @desc Delete multiple cards from addressbook.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$deleteCards = function(cards) {\n\n var uids = _.map(cards, function(card) { return card.id; });\n var _this = this;\n \n return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: uids}).then(function() {\n _this.cards = _.difference(_this.cards, cards);\n });\n };\n\n /**\n * @function $save\n * @memberof AddressBook.prototype\n * @desc Save the addressbook to the server. This currently can only affect the name of the addressbook.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$save = function() {\n return AddressBook.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $getCard\n * @memberof AddressBook.prototype\n * @desc Fetch the card attributes from the server.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$getCard = function(cardId) {\n return this.$id().then(function(addressbookId) {\n return AddressBook.$Card.$find(addressbookId, cardId);\n });\n };\n\n /**\n * @function $unwrap\n * @memberof AddressBook.prototype\n * @desc Unwrap a promise and instanciate new Card objects using received data.\n * @param {promise} futureAddressBookData - a promise of the AddressBook's data\n */\n AddressBook.prototype.$unwrap = function(futureAddressBookData) {\n var _this = this;\n\n // Expose and sesolve the promise\n this.$futureAddressBookData = futureAddressBookData.then(function(data) {\n return AddressBook.$timeout(function() {\n // Extend AddressBook instance from data of addressbooks list.\n // Will inherit attributes such as isEditable and isRemote.\n angular.forEach(AddressBook.$findAll(), function(o, i) {\n if (o.id == data.id) {\n angular.extend(_this, o);\n }\n });\n // Extend AddressBook instance with received data\n _this.init(data);\n // Instanciate Card objects\n angular.forEach(_this.cards, function(o, i) {\n _this.cards[i] = new AddressBook.$Card(o);\n });\n // Instanciate Acl object\n _this.$acl = new AddressBook.$$Acl('Contacts/' + _this.id);\n\n _this.$startRefreshTimeout();\n\n return _this;\n });\n }, function(data) {\n _this.isError = true;\n if (angular.isObject(data)) {\n AddressBook.$timeout(function() {\n angular.extend(_this, data);\n });\n }\n });\n };\n\n /**\n * @function $omit\n * @memberof AddressBook.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Addressbook instance\n */\n AddressBook.prototype.$omit = function() {\n var addressbook = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'cards' &&\n key[0] != '$') {\n addressbook[key] = value;\n }\n });\n return addressbook;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Card\n * @constructor\n * @param {object} futureCardData\n * @param {string} [partial]\n */\n function Card(futureCardData, partial) {\n\n // Data is immediately available\n if (typeof futureCardData.then !== 'function') {\n this.init(futureCardData, partial);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new card;\n // Get UID from the server.\n var newCardData = Card.$$resource.newguid(this.pid);\n this.$unwrap(newCardData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureCardData);\n }\n }\n\n Card.$TEL_TYPES = ['work', 'home', 'cell', 'fax', 'pager'];\n Card.$EMAIL_TYPES = ['work', 'home', 'pref'];\n Card.$URL_TYPES = ['work', 'home', 'pref'];\n Card.$ADDRESS_TYPES = ['work', 'home'];\n\n /**\n * @memberof Card\n * @desc The factory we'll use to register with Angular.\n * @returns the Card constructor\n */\n Card.$factory = ['$timeout', 'sgSettings', 'Resource', 'Preferences', 'Gravatar', function($timeout, Settings, Resource, Preferences, Gravatar) {\n angular.extend(Card, {\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $timeout: $timeout,\n $gravatar: Gravatar\n });\n // Initialize categories from user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoContactsCategories) {\n Card.$categories = Preferences.defaults.SOGoContactsCategories;\n }\n });\n\n return Card; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of Card in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('Card', Card.$factory);\n\n /**\n * @memberof Card\n * @desc Fetch a card from a specific addressbook.\n * @param {string} addressbookId - the addressbook ID\n * @param {string} cardId - the card ID\n * @see {@link AddressBook.$getCard}\n */\n Card.$find = function(addressbookId, cardId) {\n var futureCardData = this.$$resource.fetch([addressbookId, cardId].join('/'), 'view');\n\n if (cardId) return new Card(futureCardData); // a single card\n\n return Card.$unwrapCollection(futureCardData); // a collection of cards\n };\n\n /**\n * @function filterCategories\n * @memberof Card.prototype\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Card.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(Card.$categories, function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @memberof Card\n * @desc Unwrap to a collection of Card instances.\n * @param {object} futureCardData\n */\n Card.$unwrapCollection = function(futureCardData) {\n var collection = {};\n\n collection.$futureCardData = futureCardData;\n\n futureCardData.then(function(cards) {\n Card.$timeout(function() {\n angular.forEach(cards, function(data, index) {\n collection[data.id] = new Card(data);\n });\n });\n });\n\n return collection;\n };\n\n /**\n * @function init\n * @memberof Card.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of card\n */\n Card.prototype.init = function(data, partial) {\n this.refs = [];\n angular.extend(this, data);\n if (!this.$$fullname)\n this.$$fullname = this.$fullname();\n if (!this.$$email)\n this.$$email = this.$preferredEmail(partial);\n if (!this.$$image)\n this.$$image = this.image || Card.$gravatar(this.$preferredEmail(partial), 32);\n this.selected = false;\n\n // An empty attribute to trick md-autocomplete when adding attendees from the appointment editor\n this.empty = ' ';\n };\n\n /**\n * @function $id\n * @memberof Card.prototype\n * @desc Return the card ID.\n * @returns the card ID\n */\n Card.prototype.$id = function() {\n return this.$futureCardData.then(function(data) {\n return data.id;\n });\n };\n\n /**\n * @function $save\n * @memberof Card.prototype\n * @desc Save the card to the server.\n */\n Card.prototype.$save = function() {\n var _this = this,\n action = 'saveAsContact';\n\n if (this.c_component == 'vlist') action = 'saveAsList';\n\n return Card.$$resource.save([this.pid, this.id || '_new_'].join('/'),\n this.$omit(),\n { action: action })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n Card.prototype.$delete = function(attribute, index) {\n if (attribute) {\n if (index > -1 && this[attribute].length > index) {\n this[attribute].splice(index, 1);\n }\n }\n else {\n // No arguments -- delete card\n return Card.$$resource.remove([this.pid, this.id].join('/'));\n }\n };\n\n Card.prototype.$fullname = function() {\n var fn = this.c_cn || '', names;\n if (fn.length === 0) {\n names = [];\n if (this.c_givenname && this.c_givenname.length > 0)\n names.push(this.c_givenname);\n if (this.nickname && this.nickname.length > 0)\n names.push('' + this.nickname + '');\n if (this.c_sn && this.c_sn.length > 0)\n names.push(this.c_sn);\n if (names.length > 0)\n fn = names.join(' ');\n else if (this.c_org && this.c_org.length > 0) {\n fn = this.c_org;\n }\n else if (this.emails && this.emails.length > 0) {\n fn = _.find(this.emails, function(i) { return i.value !== ''; }).value;\n }\n else if (this.c_cn && this.c_cn.length > 0) {\n fn = this.c_cn;\n }\n }\n\n return fn;\n };\n\n Card.prototype.$description = function() {\n var description = [];\n if (this.title) description.push(this.title);\n if (this.role) description.push(this.role);\n if (this.orgUnits && this.orgUnits.length > 0)\n _.forEach(this.orgUnits, function(unit) {\n if (unit.value !== '')\n description.push(unit.value);\n });\n if (this.org) description.push(this.org);\n if (this.description) description.push(this.description);\n\n return description.join(', ');\n };\n\n /**\n * @function $preferredEmail\n * @memberof Card.prototype\n * @desc Get the preferred email address.\n * @param {string} [partial] - a partial string that the email must match\n * @returns the first email address of type \"pref\" or the first address if none found\n */\n Card.prototype.$preferredEmail = function(partial) {\n var email, re;\n if (partial) {\n re = new RegExp(partial, 'i');\n email = _.find(this.emails, function(o) {\n return re.test(o.value);\n });\n }\n if (email) {\n email = email.value;\n }\n else {\n email = _.find(this.emails, function(o) {\n return o.type == 'pref';\n });\n if (email) {\n email = email.value;\n }\n else if (this.emails && this.emails.length) {\n email = this.emails[0].value;\n }\n else {\n email = '';\n }\n }\n\n return email;\n };\n\n /**\n * @function $shortFormat\n * @memberof Card.prototype\n * @param {string} [partial] - a partial string that the email must match\n * @returns the fullname along with a matching email address in parentheses\n */\n Card.prototype.$shortFormat = function(partial) {\n var fullname = this.$fullname(),\n email = this.$preferredEmail(partial);\n if (email && email != fullname)\n fullname += ' <' + email + '>';\n return fullname;\n };\n\n Card.prototype.$birthday = function() {\n return new Date(this.birthday * 1000);\n };\n\n Card.prototype.$isCard = function() {\n return this.c_component == 'vcard';\n };\n\n Card.prototype.$isList = function() {\n return this.c_component == 'vlist';\n };\n\n Card.prototype.$addOrgUnit = function(orgUnit) {\n if (angular.isUndefined(this.orgUnits)) {\n this.orgUnits = [{value: orgUnit}];\n }\n else {\n for (var i = 0; i < this.orgUnits.length; i++) {\n if (this.orgUnits[i].value == orgUnit) {\n break;\n }\n }\n if (i == this.orgUnits.length)\n this.orgUnits.push({value: orgUnit});\n }\n return this.orgUnits.length - 1;\n };\n\n Card.prototype.$addCategory = function(category) {\n if (angular.isUndefined(this.categories)) {\n this.categories = [{value: category}];\n }\n else {\n for (var i = 0; i < this.categories.length; i++) {\n if (this.categories[i].value == category) {\n break;\n }\n }\n if (i == this.categories.length)\n this.categories.push({value: category});\n }\n };\n\n Card.prototype.$addEmail = function(type) {\n if (angular.isUndefined(this.emails)) {\n this.emails = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.emails, function(i) { return i.value === ''; }))) {\n this.emails.push({type: type, value: ''});\n }\n return this.emails.length - 1;\n };\n\n Card.prototype.$addPhone = function(type) {\n if (angular.isUndefined(this.phones)) {\n this.phones = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.phones, function(i) { return i.value === ''; }))) {\n this.phones.push({type: type, value: ''});\n }\n return this.phones.length - 1;\n };\n\n Card.prototype.$addUrl = function(type, url) {\n if (angular.isUndefined(this.urls)) {\n this.urls = [{type: type, value: url}];\n }\n else if (_.isUndefined(_.find(this.urls, function(i) { return i.value == url; }))) {\n this.urls.push({type: type, value: url});\n }\n return this.urls.length - 1;\n };\n\n Card.prototype.$addAddress = function(type, postoffice, street, street2, locality, region, country, postalcode) {\n if (angular.isUndefined(this.addresses)) {\n this.addresses = [{type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode}];\n }\n else if (!_.find(this.addresses, function(i) {\n return i.street == street &&\n i.street2 == street2 &&\n i.locality == locality &&\n i.country == country &&\n i.postalcode == postalcode;\n })) {\n this.addresses.push({type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode});\n }\n return this.addresses.length - 1;\n };\n\n Card.prototype.$addMember = function(email) {\n var card = new Card({email: email, emails: [{value: email}]}),\n i;\n if (angular.isUndefined(this.refs)) {\n this.refs = [card];\n }\n else if (email.length === 0) {\n this.refs.push(card);\n }\n else {\n for (i = 0; i < this.refs.length; i++) {\n if (this.refs[i].email == email) {\n break;\n }\n }\n if (i == this.refs.length)\n this.refs.push(card);\n }\n return this.refs.length - 1;\n };\n\n /**\n * @function $reset\n * @memberof Card.prototype\n * @desc Reset the original state the card's data.\n */\n Card.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n // Reinstanciate Card objects for list members\n angular.forEach(this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n _this.refs[i] = new Card(o);\n });\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function $updateMember\n * @memberof Card.prototype\n * @desc Update an existing list member from a Card instance.\n * A list member has the following attribtues:\n * - email\n * - reference\n * - fn\n * @param {number} index\n * @param {string} email\n * @param {Card} card\n */\n // Card.prototype.$updateMember = function(index, email, card) {\n // var ref = {\n // email: email,\n // emails: [{value: email}],\n // reference: card.c_name,\n // c_cn: card.$fullname()\n // };\n // this.refs[index] = new Card(ref);\n // };\n\n /**\n * @function $unwrap\n * @memberof Card.prototype\n * @desc Unwrap a promise and make a copy of the resolved data.\n * @param {object} futureCardData - a promise of the Card's data\n */\n Card.prototype.$unwrap = function(futureCardData) {\n var _this = this;\n\n // Expose the promise\n this.$futureCardData = futureCardData;\n\n // Resolve the promise\n this.$futureCardData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n Card.$timeout(function() {\n _this.init(data);\n // Instanciate Card objects for list members\n angular.forEach(_this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n o.id = o.reference;\n _this.refs[i] = new Card(o);\n });\n if (_this.birthday) {\n _this.birthday = new Date(_this.birthday * 1000);\n }\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n });\n });\n };\n\n /**\n * @function $omit\n * @memberof Card.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Card instance\n */\n Card.prototype.$omit = function(deep) {\n var card = {};\n angular.forEach(this, function(value, key) {\n if (key == 'refs') {\n card.refs = _.map(value, function(o) {\n return o.$omit(deep);\n });\n }\n else if (key != 'constructor' && key[0] != '$') {\n if (deep)\n card[key] = angular.copy(value);\n else\n card[key] = value;\n }\n });\n return card;\n };\n\n Card.prototype.toString = function() {\n var desc = this.id + ' ' + this.$$fullname;\n\n if (this.$$email)\n desc += ' <' + this.$$email + '>';\n\n return '[' + desc + ']';\n };\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","then","this","init","name","id","newAddressBookData","$$resource","create","$unwrap","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Card","Acl","Preferences","angular","extend","activeUser","$Card","$Preferences","selectedFolder","$refreshTimeout","module","e","factory","$filterAll","search","options","excludedCards","params","$cards","when","isUndefined","$query","fetch","response","results","card","index","compareIds","data","_","filter","contacts","find","length","splice","each","$add","addressbook","list","sibling","i","isSubscription","$subscriptions","$addressbooks","o","localeCompare","indexOf","pluck","$findAll","_this","$remotes","forEach","isRemote","push","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","cards","isOwned","isSuperUser","owner","login","value","sort","asc","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","$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","Date","birthday","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","deep","copy","toString","desc"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name AddressBook\n * @constructor\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function AddressBook(futureAddressBookData) {\n // Data is immediately available\n if (typeof futureAddressBookData.then !== 'function') {\n this.init(futureAddressBookData);\n if (this.name && !this.id) {\n // Create a new addressbook on the server\n var newAddressBookData = AddressBook.$$resource.create('createFolder', this.name);\n this.$unwrap(newAddressBookData);\n }\n else if (this.id) {\n this.$acl = new AddressBook.$$Acl('Contacts/' + this.id);\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureAddressBookData);\n }\n }\n\n /**\n * @memberof AddressBook\n * @desc The factory we'll use to register with Angular\n * @returns the AddressBook constructor\n */\n AddressBook.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Card', 'Acl', 'Preferences', function($q, $timeout, $log, Settings, Resource, Card, Acl, Preferences) {\n angular.extend(AddressBook, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $Card: Card,\n $$Acl: Acl,\n $Preferences: Preferences,\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n\n return AddressBook; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of AddressBook in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('AddressBook', AddressBook.$factory);\n\n /**\n * @memberof AddressBook\n * @desc Search for cards among all addressbooks matching some criterias.\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query (excludeGroups and excludeLists)\n * @param {object[]} excludedCards - a list of Card objects that must be excluded from the results\n * @returns a collection of Cards instances\n */\n AddressBook.$filterAll = function(search, options, excludedCards) {\n var params = {search: search};\n\n if (!search) {\n // No query specified\n AddressBook.$cards = [];\n return AddressBook.$q.when(AddressBook.$cards);\n }\n if (angular.isUndefined(AddressBook.$cards)) {\n // First session query\n AddressBook.$cards = [];\n }\n else if (AddressBook.$query == search) {\n // Query hasn't changed\n return AddressBook.$q.when(AddressBook.$cards);\n }\n AddressBook.$query = search;\n\n angular.extend(params, options);\n\n return AddressBook.$$resource.fetch(null, 'allContactSearch', params).then(function(response) {\n var results, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.contacts, function(data) {\n return _.isUndefined(_.find(excludedCards, compareIds, data));\n });\n }\n else {\n results = response.contacts;\n }\n // Remove cards that no longer match the search query\n for (index = AddressBook.$cards.length - 1; index >= 0; index--) {\n card = AddressBook.$cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n AddressBook.$cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(AddressBook.$cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n AddressBook.$cards.splice(index, 0, card);\n }\n });\n return AddressBook.$cards;\n });\n };\n\n /**\n * @memberof AddressBook\n * @desc Add a new addressbook to the static list of addressbooks\n * @param {AddressBook} addressbook - an Addressbook object instance\n */\n AddressBook.$add = function(addressbook) {\n // Insert new addressbook at proper index\n var list, sibling, i;\n\n list = addressbook.isSubscription? this.$subscriptions : this.$addressbooks;\n sibling = _.find(list, function(o) {\n return (addressbook.id == 'personal' ||\n (o.id != 'personal' &&\n o.name.localeCompare(addressbook.name) === 1));\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, addressbook);\n };\n\n /**\n * @memberof AddressBook\n * @desc Set or get the list of addressbooks. Will instantiate a new AddressBook object for each item.\n * @param {array} [data] - the metadata of the addressbooks\n * @returns the list of addressbooks\n */\n AddressBook.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$addressbooks = [];\n this.$subscriptions = [];\n this.$remotes = [];\n // Instanciate AddressBook objects\n angular.forEach(data, function(o, i) {\n var addressbook = new AddressBook(o);\n if (addressbook.isRemote)\n _this.$remotes.push(addressbook);\n else if (addressbook.isSubscription)\n _this.$subscriptions.push(addressbook);\n else\n _this.$addressbooks.push(addressbook);\n });\n }\n return this.$addressbooks;\n };\n\n /**\n * @memberOf AddressBook\n * @desc Fetch list of cards and return an AddressBook instance.\n * @param {string} addressbookId - the addressbook identifier\n * @returns an AddressBook object instance\n */\n AddressBook.$find = function(addressbookId) {\n var futureAddressBookData = AddressBook.$$resource.fetch(addressbookId, 'view');\n\n return new AddressBook(futureAddressBookData);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Subscribe to another user's addressbook and add it to the list of addressbooks.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n AddressBook.$subscribe = function(uid, path) {\n var _this = this;\n return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {\n var addressbook = new AddressBook(addressbookData);\n if (_.isUndefined(_.find(_this.$subscriptions, function(o) {\n return o.id == addressbookData.id;\n }))) {\n // Not already subscribed\n AddressBook.$add(addressbook);\n }\n return addressbook;\n });\n };\n\n /**\n * @function init\n * @memberof AddressBook.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of addressbook\n */\n AddressBook.prototype.init = function(data) {\n this.$cards = [];\n this.cards = [];\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = AddressBook.activeUser.isSuperUser || this.owner == AddressBook.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != AddressBook.activeUser.login;\n this.$query = {search: 'name_or_address', value: '', sort: 'c_cn', asc: 'true'};\n };\n\n /**\n * @function $id\n * @memberof AddressBook.prototype\n * @desc Resolve the addressbook id.\n * @returns a promise of the addressbook id\n */\n AddressBook.prototype.$id = function() {\n if (this.id) {\n // Object already unwrapped\n return AddressBook.$q.when(this.id);\n }\n else {\n // Wait until object is unwrapped\n return this.$futureAddressBookData.then(function(addressbook) {\n return addressbook.id;\n });\n }\n };\n\n /**\n * @function $selectedCount\n * @memberof AddressBook.prototype\n * @desc Return the number of cards selected by the user.\n * @returns the number of selected cards\n */\n AddressBook.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.cards) {\n count = (_.filter(this.cards, function(card) { return card.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof AddressBook.prototype\n * @desc Starts the refresh timeout for the current selected address book\n */\n AddressBook.prototype.$startRefreshTimeout = function() {\n var _this = this;\n\n if (AddressBook.$refreshTimeout)\n AddressBook.$timeout.cancel(AddressBook.$refreshTimeout);\n\n AddressBook.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, AddressBook.prototype.$reload);\n AddressBook.$refreshTimeout = AddressBook.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $reload\n * @memberof AddressBook.prototype\n * @desc Reload list of cards\n * @returns a promise of the Cards instances\n */\n AddressBook.prototype.$reload = function() {\n var _this = this;\n\n this.$startRefreshTimeout();\n\n return AddressBook.$$resource.fetch(this.id, 'view')\n .then(function(response) {\n var index, card,\n results = response.cards,\n cards = _this.cards,\n compareIds = function(data) {\n return this.id == data.id;\n };\n\n // Remove cards that no longer exist\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n\n // Add new cards\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data);\n cards.splice(index, 0, card);\n }\n });\n\n return cards;\n });\n };\n\n /**\n * @function $filter\n * @memberof AddressBook.prototype\n * @desc Search for cards matching some criterias\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query\n * @returns a collection of Cards instances\n */\n AddressBook.prototype.$filter = function(search, options, excludedCards) {\n var _this = this;\n\n if (options) {\n angular.extend(this.$query, options);\n\n if (options.dry) {\n if (!search) {\n // No query specified\n this.$cards = [];\n return AddressBook.$q.when(this.$cards);\n }\n else if (this.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(this.$cards);\n }\n }\n }\n\n this.$query.value = search;\n\n return this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', _this.$query);\n }).then(function(response) {\n var results, cards, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (options && options.dry) {\n // Don't keep a copy of the resulting cards.\n // This is usefull when doing autocompletion.\n cards = _this.$cards;\n }\n else {\n cards = _this.cards;\n }\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.cards, function(card) {\n return _.isUndefined(_.find(excludedCards, compareIds, card));\n });\n }\n else {\n results = response.cards;\n }\n // Remove cards that no longer match the search query\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n cards.splice(index, 0, card);\n }\n });\n // Respect the order of the results\n _.each(results, function(data, index) {\n var oldIndex, removedCards;\n if (cards[index].id != data.id) {\n oldIndex = _.findIndex(cards, compareIds, data);\n removedCards = cards.splice(oldIndex, 1);\n cards.splice(index, 0, removedCards[0]);\n }\n });\n return cards;\n });\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), this.id);\n this.name = name;\n AddressBook.$addressbooks.splice(i, 1);\n AddressBook.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof AddressBook.prototype\n * @desc Delete the addressbook from the server and the static list of addressbooks.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$delete = function() {\n var _this = this,\n d = AddressBook.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');\n list = AddressBook.$subscriptions;\n }\n else {\n promise = AddressBook.$$resource.remove(this.id);\n list = AddressBook.$addressbooks;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteCards\n * @memberof AddressBook.prototype\n * @desc Delete multiple cards from addressbook.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$deleteCards = function(cards) {\n\n var uids = _.map(cards, function(card) { return card.id; });\n var _this = this;\n \n return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: uids}).then(function() {\n _this.cards = _.difference(_this.cards, cards);\n });\n };\n\n /**\n * @function $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 }\n else {\n // No arguments -- delete card\n return Card.$$resource.remove([this.pid, this.id].join('/'));\n }\n };\n\n Card.prototype.$fullname = function() {\n var fn = this.c_cn || '', names;\n if (fn.length === 0) {\n names = [];\n if (this.c_givenname && this.c_givenname.length > 0)\n names.push(this.c_givenname);\n if (this.nickname && this.nickname.length > 0)\n names.push('' + this.nickname + '');\n if (this.c_sn && this.c_sn.length > 0)\n names.push(this.c_sn);\n if (names.length > 0)\n fn = names.join(' ');\n else if (this.c_org && this.c_org.length > 0) {\n fn = this.c_org;\n }\n else if (this.emails && this.emails.length > 0) {\n fn = _.find(this.emails, function(i) { return i.value !== ''; }).value;\n }\n else if (this.c_cn && this.c_cn.length > 0) {\n fn = this.c_cn;\n }\n }\n\n return fn;\n };\n\n Card.prototype.$description = function() {\n var description = [];\n if (this.title) description.push(this.title);\n if (this.role) description.push(this.role);\n if (this.orgUnits && this.orgUnits.length > 0)\n _.forEach(this.orgUnits, function(unit) {\n if (unit.value !== '')\n description.push(unit.value);\n });\n if (this.org) description.push(this.org);\n if (this.description) description.push(this.description);\n\n return description.join(', ');\n };\n\n /**\n * @function $preferredEmail\n * @memberof Card.prototype\n * @desc Get the preferred email address.\n * @param {string} [partial] - a partial string that the email must match\n * @returns the first email address of type \"pref\" or the first address if none found\n */\n Card.prototype.$preferredEmail = function(partial) {\n var email, re;\n if (partial) {\n re = new RegExp(partial, 'i');\n email = _.find(this.emails, function(o) {\n return re.test(o.value);\n });\n }\n if (email) {\n email = email.value;\n }\n else {\n email = _.find(this.emails, function(o) {\n return o.type == 'pref';\n });\n if (email) {\n email = email.value;\n }\n else if (this.emails && this.emails.length) {\n email = this.emails[0].value;\n }\n else {\n email = '';\n }\n }\n\n return email;\n };\n\n /**\n * @function $shortFormat\n * @memberof Card.prototype\n * @param {string} [partial] - a partial string that the email must match\n * @returns the fullname along with a matching email address in parentheses\n */\n Card.prototype.$shortFormat = function(partial) {\n var fullname = this.$fullname(),\n email = this.$preferredEmail(partial);\n if (email && email != fullname)\n fullname += ' <' + email + '>';\n return fullname;\n };\n\n Card.prototype.$birthday = function() {\n return new Date(this.birthday * 1000);\n };\n\n Card.prototype.$isCard = function() {\n return this.c_component == 'vcard';\n };\n\n Card.prototype.$isList = function() {\n return this.c_component == 'vlist';\n };\n\n Card.prototype.$addOrgUnit = function(orgUnit) {\n if (angular.isUndefined(this.orgUnits)) {\n this.orgUnits = [{value: orgUnit}];\n }\n else {\n for (var i = 0; i < this.orgUnits.length; i++) {\n if (this.orgUnits[i].value == orgUnit) {\n break;\n }\n }\n if (i == this.orgUnits.length)\n this.orgUnits.push({value: orgUnit});\n }\n return this.orgUnits.length - 1;\n };\n\n Card.prototype.$addCategory = function(category) {\n if (angular.isUndefined(this.categories)) {\n this.categories = [{value: category}];\n }\n else {\n for (var i = 0; i < this.categories.length; i++) {\n if (this.categories[i].value == category) {\n break;\n }\n }\n if (i == this.categories.length)\n this.categories.push({value: category});\n }\n };\n\n Card.prototype.$addEmail = function(type) {\n if (angular.isUndefined(this.emails)) {\n this.emails = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.emails, function(i) { return i.value === ''; }))) {\n this.emails.push({type: type, value: ''});\n }\n return this.emails.length - 1;\n };\n\n Card.prototype.$addPhone = function(type) {\n if (angular.isUndefined(this.phones)) {\n this.phones = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.phones, function(i) { return i.value === ''; }))) {\n this.phones.push({type: type, value: ''});\n }\n return this.phones.length - 1;\n };\n\n Card.prototype.$addUrl = function(type, url) {\n if (angular.isUndefined(this.urls)) {\n this.urls = [{type: type, value: url}];\n }\n else if (_.isUndefined(_.find(this.urls, function(i) { return i.value == url; }))) {\n this.urls.push({type: type, value: url});\n }\n return this.urls.length - 1;\n };\n\n Card.prototype.$addAddress = function(type, postoffice, street, street2, locality, region, country, postalcode) {\n if (angular.isUndefined(this.addresses)) {\n this.addresses = [{type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode}];\n }\n else if (!_.find(this.addresses, function(i) {\n return i.street == street &&\n i.street2 == street2 &&\n i.locality == locality &&\n i.country == country &&\n i.postalcode == postalcode;\n })) {\n this.addresses.push({type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode});\n }\n return this.addresses.length - 1;\n };\n\n Card.prototype.$addMember = function(email) {\n var card = new Card({email: email, emails: [{value: email}]}),\n i;\n if (angular.isUndefined(this.refs)) {\n this.refs = [card];\n }\n else if (email.length === 0) {\n this.refs.push(card);\n }\n else {\n for (i = 0; i < this.refs.length; i++) {\n if (this.refs[i].email == email) {\n break;\n }\n }\n if (i == this.refs.length)\n this.refs.push(card);\n }\n return this.refs.length - 1;\n };\n\n /**\n * @function $reset\n * @memberof Card.prototype\n * @desc Reset the original state the card's data.\n */\n Card.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n // Reinstanciate Card objects for list members\n angular.forEach(this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n _this.refs[i] = new Card(o);\n });\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function $updateMember\n * @memberof Card.prototype\n * @desc Update an existing list member from a Card instance.\n * A list member has the following attribtues:\n * - email\n * - reference\n * - fn\n * @param {number} index\n * @param {string} email\n * @param {Card} card\n */\n // Card.prototype.$updateMember = function(index, email, card) {\n // var ref = {\n // email: email,\n // emails: [{value: email}],\n // reference: card.c_name,\n // c_cn: card.$fullname()\n // };\n // this.refs[index] = new Card(ref);\n // };\n\n /**\n * @function $unwrap\n * @memberof Card.prototype\n * @desc Unwrap a promise and make a copy of the resolved data.\n * @param {object} futureCardData - a promise of the Card's data\n */\n Card.prototype.$unwrap = function(futureCardData) {\n var _this = this;\n\n // Expose the promise\n this.$futureCardData = futureCardData;\n\n // Resolve the promise\n this.$futureCardData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n Card.$timeout(function() {\n _this.init(data);\n // Instanciate Card objects for list members\n angular.forEach(_this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n o.id = o.reference;\n _this.refs[i] = new Card(o);\n });\n if (_this.birthday) {\n _this.birthday = new Date(_this.birthday * 1000);\n }\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n });\n });\n };\n\n /**\n * @function $omit\n * @memberof Card.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Card instance\n */\n Card.prototype.$omit = function(deep) {\n var card = {};\n angular.forEach(this, function(value, key) {\n if (key == 'refs') {\n card.refs = _.map(value, function(o) {\n return o.$omit(deep);\n });\n }\n else if (key != 'constructor' && key[0] != '$') {\n if (deep)\n card[key] = angular.copy(value);\n else\n card[key] = value;\n }\n });\n return card;\n };\n\n Card.prototype.toString = function() {\n var desc = this.id + ' ' + this.$$fullname;\n\n if (this.$$email)\n desc += ' <' + this.$$email + '>';\n\n return '[' + desc + ']';\n };\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.js b/UI/WebServerResources/js/Mailer.js index d9bfabd3d..be9fe4486 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(){vm.selectedFolder.$messages=_.difference(vm.selectedFolder.$messages,selectedMessages)},function(error){Dialog.alert(l("Error"),error)})})}function copySelectedMessages(folder){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");vm.selectedFolder.$copyMessages(selectedUIDs,"/"+folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function saveSelectedMessages(){var selectedMessages=_.filter(vm.selectedFolder.$messages,function(message){return message.selected}),selectedUIDs=_.pluck(selectedMessages,"uid");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/saveMessages?uid="+selectedUIDs.join(",")}function selectAll(){_.each(vm.selectedFolder.$messages,function(message){message.selected=!0})}function sort(field){vm.selectedFolder.$filter({sort:field})}function sortedBy(field){return Mailbox.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter()}function newMessage($event){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:vm.account.$newMessage()}})}var vm=this;Mailbox.selectedFolder=stateMailbox,vm.service=Mailbox,vm.accounts=stateAccounts,vm.account=stateAccount,vm.selectedFolder=stateMailbox,vm.selectMessage=selectMessage,vm.unselectMessages=unselectMessages,vm.confirmDeleteSelectedMessages=confirmDeleteSelectedMessages,vm.copySelectedMessages=copySelectedMessages,vm.saveSelectedMessages=saveSelectedMessages,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.newMessage=newMessage,vm.mode={search:!1}}MailboxController.$inject=["$state","$timeout","$mdDialog","stateAccounts","stateAccount","stateMailbox","encodeUriFilter","sgFocus","Dialog","Account","Mailbox"],angular.module("SOGo.MailerUI").controller("MailboxController",MailboxController)}(),function(){"use strict";function MailboxesController($state,$timeout,$mdDialog,focus,encodeUriFilter,Dialog,Settings,Account,Mailbox,User,Preferences,stateAccounts){function newFolder(parentFolder){Dialog.prompt(l("New folder"),l("Enter the new name of your folder :")).then(function(name){parentFolder.$newMailbox(parentFolder.id,name).then(function(){},function(data,status){Dialog.alert(l('An error occured while creating the mailbox "%{0}".',name),l(data.error))})})}function delegate(account){function MailboxDelegationController($scope,$mdDialog,User,account){function userFilter($query){return User.$filter($query,account.delegates)}function closeModal(){$mdDialog.hide()}function removeUser(user){account.$removeDelegate(user.uid)["catch"](function(data,status){Dialog.alert(l("Warning"),l("An error occured please try again."))})}function addUser(data){data&&account.$addDelegate(data).then(function(){vm.userToAdd="",vm.searchText=""},function(error){Dialog.alert(l("Warning"),error)})}var vm=this;vm.users=account.delegates,vm.account=account,vm.userToAdd="",vm.searchText="",vm.userFilter=userFilter,vm.closeModal=closeModal,vm.removeUser=removeUser,vm.addUser=addUser}$mdDialog.show({templateUrl:account.id+"/delegation",controller:MailboxDelegationController,controllerAs:"delegate",clickOutsideToClose:!0,escapeToClose:!0,locals:{User:User,account:account}}),MailboxDelegationController.$inject=["$scope","$mdDialog","User","account"]}function editFolder(folder){vm.editMode=folder.path,focus("mailboxName_"+folder.path)}function revertEditing(folder){folder.$reset(),vm.editMode=!1}function selectFolder(account,folder){vm.editMode!=folder.path&&(vm.editMode=!1,$state.go("mail.account.mailbox",{accountId:account.id,mailboxId:encodeUriFilter(folder.path)}))}function saveFolder(folder){folder.$rename()}function compactFolder(folder){folder.$compact().then(function(){},function(error){Dialog.alert(l("Warning"),error)})}function emptyTrashFolder(folder){folder.$emptyTrash().then(function(){},function(error){Dialog.alert(l("Warning"),error)})}function exportMails(folder){window.location.href=ApplicationBaseURL+"/"+folder.id+"/exportFolder"}function confirmDelete(folder){Dialog.confirm(l("Confirmation"),l("Do you really want to move this folder into the trash ?")).then(function(){folder.$delete().then(function(){$state.go("mail")},function(data,status){Dialog.alert(l('An error occured while deleting the mailbox "%{0}".',folder.name),l(data.error))})})}function markFolderRead(folder){folder.$markAsRead()}function share(folder){folder.$acl.$users().then(function(){$mdDialog.show({templateUrl:folder.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:folder.$acl.users,User:User,folder:folder}})})}function metadataForFolder(folder){return"inbox"==folder.type?{name:folder.name,icon:"inbox"}:"draft"==folder.type?{name:l("DraftsFolderName"),icon:"drafts"}:"sent"==folder.type?{name:l("SentFolderName"),icon:"send"}:"trash"==folder.type?{name:l("TrashFolderName"),icon:"delete"}:"additional"==folder.type?{name:folder.name,icon:"folder_shared"}:{name:folder.name,icon:"folder"}}function setFolderAs(folder,type){folder.$setFolderAs(type).then(function(){folder.$account.$getMailboxes({reload:!0})},function(error){Dialog.alert(l("Warning"),error)})}function refreshUnseenCount(){var unseenCountFolders=window.unseenCountFolders;_.forEach(vm.accounts,function(account){_.includes(unseenCountFolders,account.id+"/folderINBOX")||unseenCountFolders.push(account.id+"/folderINBOX"),_.forEach(account.$$flattenMailboxes,function(mailbox){angular.isDefined(mailbox.unseenCount)&&!_.includes(unseenCountFolders,mailbox.id)&&unseenCountFolders.push(mailbox.id)})}),Account.$$resource.post("","unseenCount",{mailboxes:unseenCountFolders}).then(function(data){_.forEach(vm.accounts,function(account){_.forEach(account.$$flattenMailboxes,function(mailbox){data[mailbox.id]&&(mailbox.unseenCount=data[mailbox.id])})})}),Preferences.ready().then(function(){var refreshViewCheck=Preferences.defaults.SOGoRefreshViewCheck;refreshViewCheck&&"manually"!=refreshViewCheck&&$timeout(vm.refreshUnseenCount,1e3*refreshViewCheck.timeInterval())})}var account,mailbox,vm=this;vm.service=Mailbox,vm.accounts=stateAccounts,vm.newFolder=newFolder,vm.delegate=delegate,vm.editFolder=editFolder,vm.revertEditing=revertEditing,vm.selectFolder=selectFolder,vm.saveFolder=saveFolder,vm.compactFolder=compactFolder,vm.emptyTrashFolder=emptyTrashFolder,vm.exportMails=exportMails,vm.confirmDelete=confirmDelete,vm.markFolderRead=markFolderRead,vm.share=share,vm.metadataForFolder=metadataForFolder,vm.setFolderAs=setFolderAs,vm.refreshUnseenCount=refreshUnseenCount,"mail"==$state.current.name&&vm.accounts.length>0&&vm.accounts[0].$mailboxes.length>0&&(account=vm.accounts[0],mailbox=account.$mailboxes[0],$state.go("mail.account.mailbox",{accountId:account.id,mailboxId:encodeUriFilter(mailbox.path)})),vm.refreshUnseenCount()}MailboxesController.$inject=["$state","$timeout","$mdDialog","sgFocus","encodeUriFilter","Dialog","sgSettings","Account","Mailbox","User","Preferences","stateAccounts"],angular.module("SOGo.MailerUI").controller("MailboxesController",MailboxesController)}(),function(){"use strict";function MessageController($scope,$state,$mdDialog,stateAccounts,stateAccount,stateMailbox,stateMessage,encodeUriFilter,focus,Dialog,Account,Mailbox,Message){function doDelete(){stateMailbox.$deleteMessages([stateMessage.uid]).then(function(){var index=_.findIndex(stateMailbox.$messages,function(o){return o.uid==stateMessage.uid});-1!=index&&stateMailbox.$messages.splice(index,1),vm.message=null,$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)})})}function showMailEditor($event,message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:message}})}function reply($event){var message=vm.message.$reply();showMailEditor($event,message)}function replyAll($event){var message=vm.message.$replyAll();showMailEditor($event,message)}function forward($event){var message=vm.message.$forward();showMailEditor($event,message)}function edit($event){vm.message.$editableContent().then(function(){showMailEditor($event,vm.message)})}function viewRawSource($event){Message.$$resource.post(vm.message.id,"viewsource").then(function(data){function MessageRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:MessageRawSourceDialogController}),MessageRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.accounts=stateAccounts,vm.account=stateAccount,vm.mailbox=stateMailbox,vm.message=stateMessage,vm.service=Message,vm.tags={searchText:"",selected:""},vm.doDelete=doDelete,vm.reply=reply,vm.replyAll=replyAll,vm.forward=forward,vm.edit=edit,vm.viewRawSource=viewRawSource,$scope.$watchCollection("viewer.message.flags",function(oldTags,newTags){_.each(_.difference(newTags,oldTags),function(tag){vm.message.removeTag(tag)})})}MessageController.$inject=["$scope","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","stateMessage","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","Message"],angular.module("SOGo.MailerUI").controller("MessageController",MessageController)}(),function(){"use strict";function MessageEditorController($stateParams,$state,$q,$mdDialog,FileUploader,stateAccounts,stateMessage,$timeout,encodeUriFilter,focus,Dialog,Account,Mailbox,AddressBook,Preferences){function cancel(){vm.autosave&&$timeout.cancel(vm.autosave),$mdDialog.cancel()}function send(){vm.autosave&&$timeout.cancel(vm.autosave),vm.message.$send().then(function(data){$mdDialog.hide()},function(data){Dialog.alert(l(data.status),l(data.message))})}function contactFilter($query){var deferred=$q.defer();return AddressBook.$filterAll($query).then(function(results){deferred.resolve(_.invoke(results,"$shortFormat",$query))}),deferred.promise}function autosaveDrafts(){vm.message.$save(),Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60))}var vm=this;vm.autocomplete={to:{},cc:{},bcc:{}},vm.autosave=null,vm.autosaveDrafts=autosaveDrafts,vm.hideCc=!0,vm.hideBcc=!0,vm.cancel=cancel,vm.send=send,vm.contactFilter=contactFilter,vm.identities=_.pluck(_.flatten(_.pluck(stateAccounts,"identities")),"full"),vm.uploader=new FileUploader({url:stateMessage.$absolutePath({asDraft:!0})+"/save",autoUpload:!0,alias:"attachments",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){stateMessage.$setUID(response.uid),stateMessage.$reload(),console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2))},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2)),stateMessage.$deleteAttachment(item.file.name),this.removeFromQueue(item)},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),"reply"==$stateParams.actionName?stateMessage.$reply().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"replyall"==$stateParams.actionName?stateMessage.$replyAll().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"forward"==$stateParams.actionName?stateMessage.$forward().then(function(msgObject){vm.message=msgObject}):angular.isDefined(stateMessage)&&(vm.message=stateMessage),Preferences.ready().then(function(){Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60)),vm.localeCode=Preferences.defaults.LocaleCode})}MessageEditorController.$inject=["$stateParams","$state","$q","$mdDialog","FileUploader","stateAccounts","stateMessage","$timeout","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","AddressBook","Preferences"],angular.module("SOGo.MailerUI").controller("MessageEditorController",MessageEditorController)}(),function(){"use strict";function sgImip(){function link(scope,iElement,attrs,ctrl){ctrl.pathToAttachment=attrs.sgImipPath}return{restrict:"A",link:link,controller:"sgImipController"}}function sgImipController($scope,User){var vm=this;$scope.delegateInvitation=!1,$scope.delegatedTo="",$scope.searchText="",$scope.userFilter=function($query){return User.$filter($query)},$scope.iCalendarAction=function(action){var data;"delegate"==action&&(data={receiveUpdates:!1,delegatedTo:$scope.delegatedTo.c_email}),$scope.viewer.message.$imipAction(vm.pathToAttachment,action,data)}}sgImipController.$inject=["$scope","User"],angular.module("SOGo.MailerUI").controller("sgImipController",sgImipController).directive("sgImip",sgImip)}(); +!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 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.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)}(); //# 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 fe8f50b38..8ec71846f 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","difference","alert","copySelectedMessages","folder","$copyMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","join","selectAll","sort","field","sortedBy","$query","cancelSearch","mode","search","newMessage","$event","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","$newMessage","this","service","MailboxesController","Settings","User","Preferences","newFolder","parentFolder","prompt","name","$newMailbox","data","status","delegate","MailboxDelegationController","$scope","userFilter","delegates","closeModal","hide","removeUser","user","$removeDelegate","addUser","$addDelegate","userToAdd","searchText","users","editFolder","editMode","revertEditing","$reset","selectFolder","saveFolder","$rename","compactFolder","$compact","emptyTrashFolder","$emptyTrash","exportMails","confirmDelete","$delete","markFolderRead","$markAsRead","share","$acl","$users","usersWithACL","metadataForFolder","type","icon","setFolderAs","$setFolderAs","reload","refreshUnseenCount","unseenCountFolders","includes","$$flattenMailboxes","isDefined","unseenCount","$$resource","post","ready","refreshViewCheck","defaults","SOGoRefreshViewCheck","timeInterval","MessageController","Message","doDelete","index","findIndex","splice","showMailEditor","reply","$reply","replyAll","$replyAll","forward","$forward","edit","$editableContent","viewRawSource","MessageRawSourceDialogController","scope","close","tags","$watchCollection","oldTags","newTags","tag","removeTag","MessageEditorController","FileUploader","AddressBook","cancel","autosave","send","$send","contactFilter","deferred","defer","$filterAll","results","invoke","promise","autosaveDrafts","$save","SOGoMailAutoSave","autocomplete","to","cc","bcc","hideCc","hideBcc","identities","flatten","uploader","$absolutePath","asDraft","autoUpload","alias","onProgressItem","item","progress","debug","onSuccessItem","response","headers","$setUID","JSON","stringify","undefined","onCancelItem","$deleteAttachment","file","removeFromQueue","onErrorItem","actionName","msgObject","editable","localeCode","LocaleCode","sgImip","link","iElement","attrs","ctrl","pathToAttachment","sgImipPath","restrict","sgImipController","delegateInvitation","delegatedTo","iCalendarAction","action","receiveUpdates","c_email","viewer","$imipAction","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.MailerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MailerUI', ['ngSanitize', 'ui.router', 'ck', 'angularFileUpload', 'SOGo.Common', 'SOGo.ContactsUI', 'ngAnimate', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('mail', {\n url: '/Mail',\n views: {\n mailboxes: {\n templateUrl: 'UIxMailMainFrame', // UI/Templates/MailerUI/UIxMailMainFrame.wox\n controller: 'MailboxesController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAccounts: stateAccounts\n }\n })\n .state('mail.account', {\n url: '/:accountId',\n abstract: true,\n views: {\n mailbox: {\n template: ''\n }\n },\n resolve: {\n stateAccount: stateAccount\n }\n })\n .state('mail.account.mailbox', {\n url: '/:mailboxId',\n views: {\n 'mailbox@mail': {\n templateUrl: 'UIxMailFolderTemplate', // UI/Templates/MailerUI/UIxMailFolderTemplate.wox\n controller: 'MailboxController',\n controllerAs: 'mailbox'\n }\n },\n resolve: {\n stateMailbox: stateMailbox,\n stateMessages: stateMessages\n }\n })\n // .state('mail.account.mailbox.newMessage', {\n // url: '/new',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateMessage: stateNewMessage\n // }\n // })\n .state('mail.account.mailbox.message', {\n url: '/:messageId',\n views: {\n message: {\n templateUrl: 'UIxMailViewTemplate', // UI/Templates/MailerUI/UIxMailViewTemplate.wox\n controller: 'MessageController',\n controllerAs: 'viewer'\n }\n },\n resolve: {\n stateMessage: stateMessage\n }\n });\n // .state('mail.account.mailbox.message.edit', {\n // url: '/edit',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateContent: stateContent\n // }\n // })\n // .state('mail.account.mailbox.message.action', {\n // url: '/{actionName:(?:reply|replyall|forward)}',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // }\n // });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/Mail');\n\n // Set default configuration for tags input\n // tagsInputConfigProvider.setDefaults('tagsInput', {\n // addOnComma: false,\n // replaceSpacesWithDashes: false,\n // allowedTagsPattern: /([\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+\\.)*[\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+@((((([a-z0-9]{1}[a-z0-9\\-]{0,62}[a-z0-9]{1})|[a-z])\\.)+[a-z]{2,})|(\\d{1,3}\\.){3}\\d{1,3}(\\:\\d{1,5})?)/i\n // });\n }\n\n /**\n * @ngInject\n */\n stateAccounts.$inject = ['$q', 'Account'];\n function stateAccounts($q, Account) {\n var accounts = Account.$findAll(mailAccounts),\n promises = [];\n // Fetch list of mailboxes for each account\n angular.forEach(accounts, function(account, i) {\n var mailboxes = account.$getMailboxes();\n promises.push(mailboxes.then(function(objects) {\n return account;\n }));\n });\n return $q.all(promises);\n }\n\n /**\n * @ngInject\n */\n stateAccount.$inject = ['$stateParams', 'stateAccounts'];\n function stateAccount($stateParams, stateAccounts) {\n return _.find(stateAccounts, function(account) {\n return account.id == $stateParams.accountId;\n });\n }\n\n /**\n * @ngInject\n */\n stateMailbox.$inject = ['$stateParams', 'stateAccount', 'decodeUriFilter'];\n function stateMailbox($stateParams, stateAccount, decodeUriFilter) {\n var mailboxId = decodeUriFilter($stateParams.mailboxId),\n _find;\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == mailboxId;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n return _find(stateAccount.$mailboxes);\n }\n\n /**\n * @ngInject\n */\n stateMessages.$inject = ['stateMailbox'];\n function stateMessages(stateMailbox) {\n return stateMailbox.$filter();\n }\n\n /**\n * @ngInject\n */\n // stateNewMessage.$inject = ['stateAccount'];\n // function stateNewMessage(stateAccount) {\n // return stateAccount.$newMessage();\n // }\n\n /**\n * @ngInject\n */\n stateMessage.$inject = ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages'];\n function stateMessage(encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) {\n var message = _.find(stateMailbox.$messages, function(messageObject) {\n return messageObject.uid == $stateParams.messageId;\n });\n\n if (message) {\n stateMailbox.selectedMessage = $stateParams.messageId;\n return message.$reload();\n }\n else {\n // Message not found\n $state.go('mail.account.mailbox', { accountId: stateMailbox.$account.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n }\n }\n\n /**\n * @ngInject\n */\n // stateContent.$inject = ['stateMessage'];\n // function stateContent(stateMessage) {\n // return stateMessage.$editableContent();\n // }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxController.$inject = ['$state', '$timeout', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox'];\n function MailboxController($state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, focus, Dialog, Account, Mailbox) {\n var vm = this;\n\n Mailbox.selectedFolder = stateMailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.selectedFolder = stateMailbox;\n vm.selectMessage = selectMessage;\n vm.unselectMessages = unselectMessages;\n vm.confirmDeleteSelectedMessages = confirmDeleteSelectedMessages;\n vm.copySelectedMessages = copySelectedMessages;\n // vm.moveSelectedMessages = moveSelectedMessages;\n vm.saveSelectedMessages = saveSelectedMessages;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.mode = { search: false };\n\n function selectMessage(message) {\n $state.go('mail.account.mailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path), messageId: message.uid});\n }\n\n function unselectMessages() {\n _.each(vm.selectedFolder.$messages, function(message) { message.selected = false; });\n }\n\n function confirmDeleteSelectedMessages() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected messages?'))\n .then(function() {\n // User confirmed the deletion\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$deleteMessages(selectedUIDs).then(function() {\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n });\n }\n\n function copySelectedMessages(folder) {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder).then(function() {\n // TODO: refresh target mailbox?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n // function moveSelectedMessages(folder) {\n // var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected });\n // var selectedUIDs = _.pluck(selectedMessages, 'uid');\n // vm.selectedFolder.$moveMessages(selectedUIDs, '/' + folder).then(function() {\n // // TODO: refresh target mailbox?\n // vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n // });\n // }\n\n function saveSelectedMessages() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/saveMessages?uid=' + selectedUIDs.join(\",\");\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.$messages, function(message) {\n message.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter({ sort: field });\n }\n\n function sortedBy(field) {\n return Mailbox.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter();\n }\n\n function newMessage($event) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: vm.account.$newMessage()\n }\n });\n }\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxController', MailboxController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxesController.$inject = ['$state', '$timeout', '$mdDialog', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Account', 'Mailbox', 'User', 'Preferences', 'stateAccounts'];\n function MailboxesController($state, $timeout, $mdDialog, focus, encodeUriFilter, Dialog, Settings, Account, Mailbox, User, Preferences, stateAccounts) {\n var vm = this,\n account,\n mailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.newFolder = newFolder;\n vm.delegate = delegate;\n vm.editFolder = editFolder;\n vm.revertEditing = revertEditing;\n vm.selectFolder = selectFolder;\n vm.saveFolder = saveFolder;\n vm.compactFolder = compactFolder;\n vm.emptyTrashFolder = emptyTrashFolder;\n vm.exportMails = exportMails;\n vm.confirmDelete = confirmDelete;\n vm.markFolderRead = markFolderRead;\n vm.share = share;\n vm.metadataForFolder = metadataForFolder;\n vm.setFolderAs = setFolderAs;\n vm.refreshUnseenCount = refreshUnseenCount;\n\n if ($state.current.name == 'mail' && vm.accounts.length > 0 && vm.accounts[0].$mailboxes.length > 0) {\n // Redirect to first mailbox of first account if no mailbox is selected\n account = vm.accounts[0];\n mailbox = account.$mailboxes[0];\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(mailbox.path) });\n }\n\n function newFolder(parentFolder) {\n Dialog.prompt(l('New folder'),\n l('Enter the new name of your folder :'))\n .then(function(name) {\n parentFolder.$newMailbox(parentFolder.id, name)\n .then(function() {\n // success\n }, function(data, status) {\n Dialog.alert(l('An error occured while creating the mailbox \"%{0}\".', name),\n l(data.error));\n });\n });\n }\n\n function delegate(account) {\n $mdDialog.show({\n templateUrl: account.id + '/delegation', // UI/Templates/MailerUI/UIxMailUserDelegation.wox\n controller: MailboxDelegationController,\n controllerAs: 'delegate',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n User: User,\n account: account\n }\n });\n\n /**\n * @ngInject\n */\n MailboxDelegationController.$inject = ['$scope', '$mdDialog', 'User', 'account'];\n function MailboxDelegationController($scope, $mdDialog, User, account) {\n var vm = this;\n\n vm.users = account.delegates;\n vm.account = account;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n\n function userFilter($query) {\n return User.$filter($query, account.delegates);\n }\n\n function closeModal() {\n $mdDialog.hide();\n }\n\n function removeUser(user) {\n account.$removeDelegate(user.uid).catch(function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function addUser(data) {\n if (data) {\n account.$addDelegate(data).then(function() {\n vm.userToAdd = '';\n vm.searchText = '';\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n }\n }\n } // delegate\n\n function editFolder(folder) {\n vm.editMode = folder.path;\n focus('mailboxName_' + folder.path);\n }\n\n function revertEditing(folder) {\n folder.$reset();\n vm.editMode = false;\n }\n\n function selectFolder(account, folder) {\n if (vm.editMode == folder.path)\n return;\n vm.editMode = false;\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(folder.path) });\n }\n\n function saveFolder(folder) {\n folder.$rename();\n }\n\n function compactFolder(folder) {\n folder.$compact().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function emptyTrashFolder(folder) {\n folder.$emptyTrash().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function exportMails(folder) {\n window.location.href = ApplicationBaseURL + '/' + folder.id + '/exportFolder';\n }\n\n function confirmDelete(folder) {\n Dialog.confirm(l('Confirmation'), l('Do you really want to move this folder into the trash ?'))\n .then(function() {\n folder.$delete()\n .then(function() {\n $state.go('mail');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the mailbox \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n\n function markFolderRead(folder) {\n folder.$markAsRead();\n }\n\n function share(folder) {\n // Fetch list of ACL users\n folder.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: folder.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: folder.$acl.users,\n User: User,\n folder: folder\n }\n });\n });\n } // share\n\n function metadataForFolder(folder) {\n if (folder.type == 'inbox')\n return {name: folder.name, icon:'inbox'};\n else if (folder.type == 'draft')\n return {name: l('DraftsFolderName'), icon: 'drafts'};\n else if (folder.type == 'sent')\n return {name: l('SentFolderName'), icon: 'send'};\n else if (folder.type == 'trash')\n return {name: l('TrashFolderName'), icon: 'delete'};\n else if (folder.type == 'additional')\n return {name: folder.name, icon: 'folder_shared'};\n\n //if ($rootScope.currentFolder == folder)\n // return 'folder_open';\n\n return {name: folder.name, icon: 'folder'};\n }\n\n function setFolderAs(folder, type) {\n folder.$setFolderAs(type).then(function() {\n folder.$account.$getMailboxes({reload: true});\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function refreshUnseenCount() {\n var unseenCountFolders = window.unseenCountFolders;\n\n _.forEach(vm.accounts, function(account) {\n\n // Always include the INBOX\n if (!_.includes(unseenCountFolders, account.id + '/folderINBOX'))\n unseenCountFolders.push(account.id + '/folderINBOX');\n\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (angular.isDefined(mailbox.unseenCount) &&\n !_.includes(unseenCountFolders, mailbox.id))\n unseenCountFolders.push(mailbox.id);\n });\n });\n\n Account.$$resource.post('', 'unseenCount', {mailboxes: unseenCountFolders}).then(function(data) {\n _.forEach(vm.accounts, function(account) {\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (data[mailbox.id])\n mailbox.unseenCount = data[mailbox.id];\n });\n });\n });\n\n Preferences.ready().then(function() {\n var refreshViewCheck = Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually')\n $timeout(vm.refreshUnseenCount, refreshViewCheck.timeInterval()*1000);\n });\n }\n\n vm.refreshUnseenCount();\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxesController', MailboxesController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageController.$inject = ['$scope', '$state', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'stateMessage', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'Message'];\n function MessageController($scope, $state, $mdDialog, stateAccounts, stateAccount, stateMailbox, stateMessage, encodeUriFilter, focus, Dialog, Account, Mailbox, Message) {\n var vm = this;\n\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.mailbox = stateMailbox;\n vm.message = stateMessage;\n vm.service = Message;\n vm.tags = { searchText: '', selected: '' };\n vm.doDelete = doDelete;\n vm.reply = reply;\n vm.replyAll = replyAll;\n vm.forward = forward;\n vm.edit = edit;\n vm.viewRawSource = viewRawSource;\n\n // Watch the message model \"flags\" attribute to remove on-the-fly a tag from the IMAP message\n // when removed from the message viewer.\n // TODO: this approach should be reviewed once md-chips supports ng-change.\n $scope.$watchCollection('viewer.message.flags', function(oldTags, newTags) {\n _.each(_.difference(newTags, oldTags), function(tag) {\n vm.message.removeTag(tag);\n });\n });\n\n function doDelete() {\n stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {\n // Remove message from list of messages\n var index = _.findIndex(stateMailbox.$messages, function(o) {\n return o.uid == stateMessage.uid;\n });\n if (index != -1)\n stateMailbox.$messages.splice(index, 1);\n // Remove message object from scope\n vm.message = null;\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n });\n }\n\n function showMailEditor($event, message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message\n }\n });\n }\n\n function reply($event) {\n var message = vm.message.$reply();\n showMailEditor($event, message);\n }\n\n function replyAll($event) {\n var message = vm.message.$replyAll();\n showMailEditor($event, message);\n }\n\n function forward($event) {\n var message = vm.message.$forward();\n showMailEditor($event, message);\n }\n\n function edit($event) {\n vm.message.$editableContent().then(function() {\n showMailEditor($event, vm.message);\n });\n }\n\n function viewRawSource($event) {\n Message.$$resource.post(vm.message.id, \"viewsource\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: MessageRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n MessageRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function MessageRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n \n angular\n .module('SOGo.MailerUI') \n .controller('MessageController', MessageController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageEditorController.$inject = ['$stateParams', '$state', '$q', '$mdDialog', 'FileUploader', 'stateAccounts', 'stateMessage', '$timeout', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $state, $q, $mdDialog, FileUploader, stateAccounts, stateMessage, $timeout, encodeUriFilter, focus, Dialog, Account, Mailbox, AddressBook, Preferences) {\n var vm = this;\n\n vm.autocomplete = {to: {}, cc: {}, bcc: {}};\n vm.autosave = null;\n vm.autosaveDrafts = autosaveDrafts;\n vm.hideCc = true;\n vm.hideBcc = true;\n vm.cancel = cancel;\n vm.send = send;\n vm.contactFilter = contactFilter;\n vm.identities = _.pluck(_.flatten(_.pluck(stateAccounts, 'identities')), 'full');\n vm.uploader = new FileUploader({\n url: stateMessage.$absolutePath({asDraft: true}) + '/save',\n autoUpload: true,\n alias: 'attachments',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n stateMessage.$setUID(response.uid);\n stateMessage.$reload();\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n\n // We remove the attachment\n stateMessage.$deleteAttachment(item.file.name);\n this.removeFromQueue(item);\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n if ($stateParams.actionName == 'reply') {\n stateMessage.$reply().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'replyall') {\n stateMessage.$replyAll().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'forward') {\n stateMessage.$forward().then(function(msgObject) {\n vm.message = msgObject;\n });\n }\n else if (angular.isDefined(stateMessage)) {\n vm.message = stateMessage;\n }\n\n function cancel() {\n // TODO: delete draft?\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n $mdDialog.cancel();\n }\n\n function send() {\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n vm.message.$send().then(function(data) {\n $mdDialog.hide();\n }, function(data) {\n Dialog.alert(l(data.status), l(data.message));\n });\n }\n\n function contactFilter($query) {\n var deferred = $q.defer();\n AddressBook.$filterAll($query).then(function(results) {\n deferred.resolve(_.invoke(results, '$shortFormat', $query));\n });\n return deferred.promise;\n }\n\n // Drafts autosaving\n function autosaveDrafts() {\n vm.message.$save();\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n }\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n vm.localeCode = Preferences.defaults.LocaleCode;\n });\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MessageEditorController', MessageEditorController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /**\n * sgIMIP - A directive to handle IMIP actions on emails\n * @memberof SOGo.MailerUI\n * @example:\n\n */\n function sgImip() {\n return {\n restrict: 'A',\n link: link,\n controller: 'sgImipController'\n };\n\n function link(scope, iElement, attrs, ctrl) {\n ctrl.pathToAttachment = attrs.sgImipPath;\n }\n }\n\n /**\n * @ngInject\n */\n sgImipController.$inject = ['$scope', 'User'];\n function sgImipController($scope, User) {\n var vm = this;\n\n $scope.delegateInvitation = false;\n $scope.delegatedTo = '';\n $scope.searchText = '';\n\n $scope.userFilter = function($query) {\n return User.$filter($query);\n };\n\n $scope.iCalendarAction = function(action) {\n var data;\n\n if (action == 'delegate') {\n data = {\n receiveUpdates: false,\n delegatedTo: $scope.delegatedTo.c_email\n };\n }\n\n $scope.viewer.message.$imipAction(vm.pathToAttachment, action, data);\n };\n }\n\n angular\n .module('SOGo.MailerUI')\n .controller('sgImipController', sgImipController)\n .directive('sgImip', sgImip);\n})();\n\n"]} \ No newline at end of file +{"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","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.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\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 diff --git a/UI/WebServerResources/js/Mailer.services.js b/UI/WebServerResources/js/Mailer.services.js index 1af2b6e85..1a03afab5 100644 --- a/UI/WebServerResources/js/Mailer.services.js +++ b/UI/WebServerResources/js/Mailer.services.js @@ -1,2 +1,2 @@ -!function(){"use strict";function Account(futureAccountData){"function"!=typeof futureAccountData.then&&(angular.extend(this,futureAccountData),_.each(this.identities,function(identity){identity.fullName?identity.full=identity.fullName+" <"+identity.email+">":identity.full="<"+identity.email+">"}),Account.$log.debug("Account: "+JSON.stringify(futureAccountData,void 0,2)))}Account.$factory=["$q","$timeout","$log","sgSettings","Resource","Mailbox","Message",function($q,$timeout,$log,Settings,Resource,Mailbox,Message){return angular.extend(Account,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),$Mailbox:Mailbox,$Message:Message}),Account}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",Account.$factory),Account.$findAll=function(data){var collection=[];return data&&angular.forEach(data,function(o,i){o.id=i,collection[i]=new Account(o)}),collection},Account.prototype.$getMailboxes=function(options){var _this=this,deferred=Account.$q.defer();return!this.$mailboxes||options&&options.reload?Account.$Mailbox.$find(this).then(function(data){_this.$mailboxes=data,_this.$flattenMailboxes({reload:!0}),deferred.resolve(_this.$mailboxes)}):deferred.resolve(this.$mailboxes),deferred.promise},Account.prototype.$flattenMailboxes=function(options){var _this=this,allMailboxes=[],_visit=function(mailboxes){_.each(mailboxes,function(o){allMailboxes.push(o),o.children&&o.children.length>0&&_visit(o.children)})};return!this.$$flattenMailboxes||options&&options.reload?(_visit(this.$mailboxes),_this.$$flattenMailboxes=allMailboxes):allMailboxes=this.$$flattenMailboxes,allMailboxes},Account.prototype.$getMailboxByType=function(type){var mailbox,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.type==type});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};mailbox=_find(this.$mailboxes),console.debug(mailbox),console.debug(this.specialMailboxes)},Account.prototype.$getMailboxByPath=function(path){var mailbox=null,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==path});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};return mailbox=_find(this.$mailboxes)},Account.prototype.$newMailbox=function(path,name){var _this=this,deferred=Account.$q.defer();return Account.$$resource.post(path,"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0}),deferred.resolve()},function(response){deferred.reject(response.error)}),deferred.promise},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message: "+JSON.stringify(data,void 0,2));var message=new Account.$Message(data.accountId,_this.$getMailboxByPath(data.mailboxPath),data);return message}).then(function(message){return Account.$$resource.fetch(message.$absolutePath({asDraft:!0}),"edit").then(function(data){return Account.$log.debug("New message: "+JSON.stringify(data,void 0,2)),angular.extend(message.editable,data),message})})},Account.prototype.$addDelegate=function(user){var _this=this,deferred=Account.$q.defer(),param={uid:user.uid};return!user.uid||_.indexOf(_.pluck(this.delegates,"uid"),user.uid)>-1?deferred.resolve():Account.$$resource.fetch(this.id.toString(),"addDelegate",param).then(function(){_this.delegates.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Account.prototype.$removeDelegate=function(uid){var _this=this,param={uid:uid};return Account.$$resource.fetch(this.id.toString(),"removeDelegate",param).then(function(){var i=_.indexOf(_.pluck(_this.delegates,"uid"),uid);i>=0&&_this.delegates.splice(i,1)})}}(),function(){"use strict";function Mailbox(account,futureMailboxData){if(this.$account=account,"function"!=typeof futureMailboxData.then){if(this.init(futureMailboxData),this.name&&!this.path){var newMailboxData=Mailbox.$$resource.create("createFolder",this.name);this.$unwrap(newMailboxData)}}else this.$unwrap(futureMailboxData)}Mailbox.$factory=["$q","$timeout","$log","sgSettings","Resource","Message","Acl","Preferences","sgMailbox_PRELOAD",function($q,$timeout,$log,Settings,Resource,Message,Acl,Preferences,PRELOAD){return angular.extend(Mailbox,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser()),$Message:Message,$$Acl:Acl,$Preferences:Preferences,$query:{sort:"date",asc:0},selectedFolder:null,$refreshTimeout:null,PRELOAD:PRELOAD}),Preferences.ready().then(function(){Preferences.settings.Mail.SortingState&&(Mailbox.$query.sort=Preferences.settings.Mail.SortingState[0],Mailbox.$query.asc=parseInt(Preferences.settings.Mail.SortingState[1]))}),Mailbox}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").constant("sgMailbox_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("Mailbox",Mailbox.$factory),Mailbox.$find=function(account){var futureMailboxData;return futureMailboxData=this.$$resource.fetch(account.id.toString(),"view"),Mailbox.$unwrapCollection(account,futureMailboxData)},Mailbox.$unwrapCollection=function(account,futureMailboxData){var collection=[],createMailboxes=function(level,mailbox){for(var i=0;istartIndex&&max>startIndex;startIndex++)angular.isDefined(this.$messages[startIndex].subject)||this.$messages[startIndex].loading?endIndex++:(uids.push(this.$messages[startIndex].uid),this.$messages[startIndex].loading=!0);Mailbox.$log.debug("Loading UIDs "+uids.join(" ")),futureHeadersData=Mailbox.$$resource.post(this.id,"headers",{uids:uids}),this.$unwrapHeaders(futureHeadersData)}return loaded},Mailbox.prototype.isEditable=function(){return"folder"==this.type},Mailbox.prototype.$rename=function(){var findParent,parent,children,i,_this=this,deferred=Mailbox.$q.defer();return this.name==this.$shadowData.name?(deferred.resolve(),deferred.promise):(findParent=function(parent,children){var parentMailbox=null,mailbox=_.find(children,function(o){return o.path==_this.path});return mailbox?parentMailbox=parent:angular.forEach(children,function(o){!parentMailbox&&o.children&&o.children.length>0&&(parentMailbox=findParent(o,o.children))}),parentMailbox},parent=findParent(null,this.$account.$mailboxes),children=null===parent?this.$account.$mailboxes:parent.children,i=_.indexOf(_.pluck(children,"id"),this.id),this.$save().then(function(data){var sibling;angular.extend(_this,data),_this.id=_this.$id(),children.splice(i,1),sibling=_.find(children,function(o){return Mailbox.$log.debug(o.name+" ? "+_this.name),"folder"==o.type&&o.name.localeCompare(_this.name)>0}),i=sibling?_.indexOf(_.pluck(children,"id"),sibling.id):children.length,children.splice(i,0,_this),deferred.resolve()},function(data){deferred.reject(data)}),deferred.promise)},Mailbox.prototype.$compact=function(){return Mailbox.$$resource.post(this.id,"expunge")},Mailbox.prototype.$setFolderAs=function(type){return Mailbox.$$resource.post(this.id,"setAs"+type+"Folder")},Mailbox.prototype.$emptyTrash=function(){return Mailbox.$$resource.post(this.id,"emptyTrash")},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$delete=function(){var promise,_this=this,deferred=Mailbox.$q.defer();return promise=Mailbox.$$resource.remove(this.id),promise.then(function(){_this.$account.$getMailboxes({reload:!0}),deferred.resolve(!0)},function(data,status){deferred.reject(data)}),deferred.promise},Mailbox.prototype.$deleteMessages=function(uids){return Mailbox.$$resource.post(this.id,"batchDelete",{uids:uids})},Mailbox.prototype.$copyMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"copyMessages",{uids:uids,folder:folder})},Mailbox.prototype.$moveMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"moveMessages",{uids:uids,folder:folder})},Mailbox.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit()},Mailbox.prototype.$save=function(){var _this=this;return Mailbox.$$resource.save(this.id,this.$omit()).then(function(data){return _this.$shadowData=_this.$omit(),Mailbox.$log.debug(JSON.stringify(data,void 0,2)),data},function(data){Mailbox.$log.error(JSON.stringify(data,void 0,2)),_this.$reset()})},Mailbox.prototype.$newMailbox=function(path,name){return this.$account.$newMailbox(path,name)},Mailbox.prototype.$omit=function(){var mailbox={};return angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&(mailbox[key]=value)}),mailbox},Mailbox.prototype.$unwrap=function(futureMailboxData){var _this=this,deferred=Mailbox.$q.defer();return this.$futureMailboxData=futureMailboxData,this.$futureMailboxData.then(function(data){Mailbox.$timeout(function(){var uids,headers;_this.init(data),_this.uids&&(Mailbox.$log.debug("unwrapping "+data.uids.length+" messages"),headers=_.invoke(_this.headers[0],"toLowerCase"),_this.headers.splice(0,1),_this.threaded&&(uids=_this.uids[0],_this.uids.splice(0,1)),_.reduce(_this.uids,function(msgs,msg,i){var data;return data=_this.threaded?_.object(uids,msg):{uid:msg.toString()},_this.uidsMap[data.uid]=i,msgs.push(new Mailbox.$Message(_this.$account.id,_this,data)),msgs},_this.$messages),_.each(_this.headers,function(data){var msg=_.object(headers,data),i=_this.uidsMap[msg.uid.toString()];_.extend(_this.$messages[i],msg)})),Mailbox.$log.debug("mailbox "+_this.id+" ready"),_this.$isLoading=!1,deferred.resolve(_this.$messages)})},function(data){angular.extend(_this,data),_this.isError=!0,deferred.reject()}),deferred.promise},Mailbox.prototype.$unwrapHeaders=function(futureHeadersData){var _this=this;futureHeadersData.then(function(data){Mailbox.$timeout(function(){var headers,j;data.length>0&&(headers=_.invoke(data[0],"toLowerCase"),data.splice(0,1),_.each(data,function(messageHeaders){messageHeaders=_.object(headers,messageHeaders),j=_this.uidsMap[messageHeaders.uid.toString()],angular.isDefined(j)&&_.extend(_this.$messages[j],messageHeaders)}))})})}}(),function(){"use strict";function Message(accountId,mailbox,futureMessageData){this.accountId=accountId,this.$mailbox=mailbox,this.$hasUnsafeContent=!1,this.$loadUnsafeContent=!1,this.editable={to:[],cc:[],bcc:[]},"function"!=typeof futureMessageData.then?(angular.extend(this,futureMessageData),this.id=this.$absolutePath(),this.$formatFullAddresses()):this.$unwrap(futureMessageData),this.selected=!1}Message.$factory=["$q","$timeout","$log","$sce","sgSettings","Gravatar","Resource","Preferences",function($q,$timeout,$log,$sce,Settings,Gravatar,Resource,Preferences){return angular.extend(Message,{$q:$q,$timeout:$timeout,$log:$log,$sce:$sce,$gravatar:Gravatar,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser())}),Preferences.ready().then(function(){Preferences.defaults.SOGoMailLabelsColors&&(Message.$tags=Preferences.defaults.SOGoMailLabelsColors)}),Message}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Message",Message.$factory),Message.filterTags=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Message.$tags),function(tag){var value=Message.$tags[tag];return-1!=value[0].search(re)})},Message.prototype.$absolutePath=function(options){var path;return path=_.map(this.$mailbox.path.split("/"),function(component){return"folder"+component.asCSSIdentifier()}),path.splice(0,0,this.accountId),options&&options.asDraft&&this.draftId?path.push(this.draftId):path.push(this.uid),path.join("/")},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,this.id=this.$absolutePath(),oldUID>-1&&this.$mailbox.uidsMap[oldUID]&&(this.$mailbox.uidsMap[uid]=this.$mailbox.uidsMap[oldUID],this.$mailbox.uidsMap[oldUID]=null))},Message.prototype.$formatFullAddresses=function(){var _this=this;_.each(["from","to","cc","bcc","reply-to"],function(type){_.each(_this[type],function(data,i){data.name&&data.name!=data.email?data.full=data.name+" <"+data.email+">":data.full="<"+data.email+">"})})},Message.prototype.$shortAddress=function(type){var address="";return this[type]&&this[type].length>0&&(address=this[type][0].name||this[type][0].email||""),address},Message.prototype.loadUnsafeContent=function(){this.$loadUnsafeContent=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){"UIxMailPartAlternativeViewer"==part.type?_visit(_.find(part.content,function(alternatePart){return part.preferredPart==alternatePart.contentType})):angular.isArray(part.content)?_.each(part.content,function(mixedPart){_visit(mixedPart)}):(angular.isUndefined(part.safeContent)&&(part.safeContent=part.content,_this.$hasUnsafeContent=part.safeContent.indexOf(" unsafe-")>-1),"UIxMailPartHTMLViewer"==part.type?(part.html=!0,_this.$loadUnsafeContent?(angular.isUndefined(part.unsafeContent)&&(part.unsafeContent=document.createElement("div"),part.unsafeContent.innerHTML=part.safeContent,angular.forEach(["src","data","classid","background","style"],function(suffix){var element,value,i,elements=part.unsafeContent.querySelectorAll("[unsafe-"+suffix+"]");for(i=0;i":identity.full="<"+identity.email+">"}),Account.$log.debug("Account: "+JSON.stringify(futureAccountData,void 0,2)))}Account.$factory=["$q","$timeout","$log","sgSettings","Resource","Mailbox","Message",function($q,$timeout,$log,Settings,Resource,Mailbox,Message){return angular.extend(Account,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),$Mailbox:Mailbox,$Message:Message}),Account}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",Account.$factory),Account.$findAll=function(data){var collection=[];return data&&angular.forEach(data,function(o,i){o.id=i,collection[i]=new Account(o)}),collection},Account.prototype.$getMailboxes=function(options){var _this=this,deferred=Account.$q.defer();return!this.$mailboxes||options&&options.reload?Account.$Mailbox.$find(this).then(function(data){_this.$mailboxes=data,_this.$flattenMailboxes({reload:!0}),deferred.resolve(_this.$mailboxes)}):deferred.resolve(this.$mailboxes),deferred.promise},Account.prototype.$flattenMailboxes=function(options){var _this=this,allMailboxes=[],_visit=function(mailboxes){_.each(mailboxes,function(o){allMailboxes.push(o),o.children&&o.children.length>0&&_visit(o.children)})};return!this.$$flattenMailboxes||options&&options.reload?(_visit(this.$mailboxes),_this.$$flattenMailboxes=allMailboxes):allMailboxes=this.$$flattenMailboxes,allMailboxes},Account.prototype.$getMailboxByType=function(type){var mailbox,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.type==type});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};mailbox=_find(this.$mailboxes),console.debug(mailbox),console.debug(this.specialMailboxes)},Account.prototype.$getMailboxByPath=function(path){var mailbox=null,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==path});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};return mailbox=_find(this.$mailboxes)},Account.prototype.$newMailbox=function(path,name){var _this=this,deferred=Account.$q.defer();return Account.$$resource.post(path,"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0}),deferred.resolve()},function(response){deferred.reject(response.error)}),deferred.promise},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message (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;istartIndex&&max>startIndex;startIndex++)angular.isDefined(this.$messages[startIndex].subject)||this.$messages[startIndex].loading?endIndex++:(uids.push(this.$messages[startIndex].uid),this.$messages[startIndex].loading=!0);Mailbox.$log.debug("Loading UIDs "+uids.join(" ")),futureHeadersData=Mailbox.$$resource.post(this.id,"headers",{uids:uids}),this.$unwrapHeaders(futureHeadersData)}return loaded},Mailbox.prototype.isEditable=function(){return"folder"==this.type},Mailbox.prototype.$rename=function(){var findParent,parent,children,i,_this=this,deferred=Mailbox.$q.defer();return this.name==this.$shadowData.name?(deferred.resolve(),deferred.promise):(findParent=function(parent,children){var parentMailbox=null,mailbox=_.find(children,function(o){return o.path==_this.path});return mailbox?parentMailbox=parent:angular.forEach(children,function(o){!parentMailbox&&o.children&&o.children.length>0&&(parentMailbox=findParent(o,o.children))}),parentMailbox},parent=findParent(null,this.$account.$mailboxes),children=null===parent?this.$account.$mailboxes:parent.children,i=_.indexOf(_.pluck(children,"id"),this.id),this.$save().then(function(data){var sibling;angular.extend(_this,data),_this.id=_this.$id(),children.splice(i,1),sibling=_.find(children,function(o){return Mailbox.$log.debug(o.name+" ? "+_this.name),"folder"==o.type&&o.name.localeCompare(_this.name)>0}),i=sibling?_.indexOf(_.pluck(children,"id"),sibling.id):children.length,children.splice(i,0,_this),deferred.resolve()},function(data){deferred.reject(data)}),deferred.promise)},Mailbox.prototype.$compact=function(){return Mailbox.$$resource.post(this.id,"expunge")},Mailbox.prototype.$setFolderAs=function(type){return Mailbox.$$resource.post(this.id,"setAs"+type+"Folder")},Mailbox.prototype.$emptyTrash=function(){var promise,_this=this,deferred=Mailbox.$q.defer();return promise=Mailbox.$$resource.post(this.id,"emptyTrash"),promise.then(function(){_this.$messages=[],_this.uidsMap={},_this.unseenCount=0},function(data,status){deferred.reject(data)}),deferred.promise},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.editable={to:[],cc:[],bcc:[]},"function"!=typeof futureMessageData.then?(angular.extend(this,futureMessageData),this.id=this.$absolutePath(),this.$formatFullAddresses()):this.$unwrap(futureMessageData),this.selected=!1}Message.$factory=["$q","$timeout","$log","$sce","sgSettings","Gravatar","Resource","Preferences",function($q,$timeout,$log,$sce,Settings,Gravatar,Resource,Preferences){return angular.extend(Message,{$q:$q,$timeout:$timeout,$log:$log,$sce:$sce,$gravatar:Gravatar,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser())}),Preferences.ready().then(function(){Preferences.defaults.SOGoMailLabelsColors&&(Message.$tags=Preferences.defaults.SOGoMailLabelsColors)}),Message}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Message",Message.$factory),Message.filterTags=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Message.$tags),function(tag){var value=Message.$tags[tag];return-1!=value[0].search(re)})},Message.prototype.$absolutePath=function(options){var path;return path=_.map(this.$mailbox.path.split("/"),function(component){return"folder"+component.asCSSIdentifier()}),path.splice(0,0,this.accountId),options&&options.asDraft&&this.draftId?path.push(this.draftId):path.push(this.uid),path.join("/")},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,this.id=this.$absolutePath(),oldUID>-1&&this.$mailbox.uidsMap[oldUID]&&(this.$mailbox.uidsMap[uid]=this.$mailbox.uidsMap[oldUID],this.$mailbox.uidsMap[oldUID]=null))},Message.prototype.$formatFullAddresses=function(){var _this=this;_.each(["from","to","cc","bcc","reply-to"],function(type){_.each(_this[type],function(data,i){data.name&&data.name!=data.email?data.full=data.name+" <"+data.email+">":data.full="<"+data.email+">"})})},Message.prototype.$shortAddress=function(type){var address="";return this[type]&&this[type].length>0&&(address=this[type][0].name||this[type][0].email||""),address},Message.prototype.loadUnsafeContent=function(){this.$loadUnsafeContent=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){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';\n else\n identity.full = '<' + identity.email + '>';\n });\n Account.$log.debug('Account: ' + JSON.stringify(futureAccountData, undefined, 2));\n }\n else {\n // The promise will be unwrapped first\n //this.$unwrap(futureAccountData);\n }\n }\n\n /**\n * @memberof Account\n * @desc The factory we'll use to register with Angular\n * @returns the Account constructor\n */\n Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Mailbox, Message) {\n angular.extend(Account, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n $Mailbox: Mailbox,\n $Message: Message\n });\n\n return Account; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Account in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Account', Account.$factory);\n\n /**\n * @memberof Account\n * @desc Set the list of accounts and instanciate a new Account object for each item.\n * @param {array} [data] - the metadata of the accounts\n * @returns the list of accounts\n */\n Account.$findAll = function(data) {\n var collection = [];\n if (data) {\n // Each entry is spun up as an Account instance\n angular.forEach(data, function(o, i) {\n o.id = i;\n collection[i] = new Account(o);\n });\n }\n return collection;\n };\n\n /**\n * @function $getMailboxes\n * @memberof Account.prototype\n * @desc Fetch the list of mailboxes for the current account.\n * @param {object} [options] - force a reload by setting 'reload' to true\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxes = function(options) {\n var _this = this,\n deferred = Account.$q.defer();\n\n if (this.$mailboxes && !(options && options.reload)) {\n deferred.resolve(this.$mailboxes);\n }\n else {\n Account.$Mailbox.$find(this).then(function(data) {\n _this.$mailboxes = data;\n _this.$flattenMailboxes({reload: true});\n deferred.resolve(_this.$mailboxes);\n });\n }\n\n return deferred.promise;\n };\n\n /**\n * @function $flattenMailboxes\n * @memberof Account.prototype\n * @desc Get a flatten array of the mailboxes.\n * @param {object} [options] - force a reload\n * @returns an array of Mailbox instances\n */\n Account.prototype.$flattenMailboxes = function(options) {\n var _this = this,\n allMailboxes = [],\n _visit = function(mailboxes) {\n _.each(mailboxes, function(o) {\n allMailboxes.push(o);\n if (o.children && o.children.length > 0) {\n _visit(o.children);\n }\n });\n };\n\n if (this.$$flattenMailboxes && !(options && options.reload)) {\n allMailboxes = this.$$flattenMailboxes;\n }\n else {\n _visit(this.$mailboxes);\n _this.$$flattenMailboxes = allMailboxes;\n }\n\n return allMailboxes;\n };\n\n Account.prototype.$getMailboxByType = function(type) {\n var mailbox,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.type == type;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n console.debug(mailbox);\n console.debug(this.specialMailboxes);\n };\n\n /**\n * @function $getMailboxByPath\n * @memberof Account.prototype\n * @desc Recursively find a mailbox using its path\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxByPath = function(path) {\n var mailbox = null,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == path;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n return mailbox;\n };\n\n /**\n * @function $newMailbox\n * @memberof Account.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMailbox = function(path, name) {\n var _this = this,\n deferred = Account.$q.defer();\n\n Account.$$resource.post(path, 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n deferred.resolve();\n }, function(response) {\n deferred.reject(response.error);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $newMessage\n * @memberof Account.prototype\n * @desc Prepare a new Message object associated to the appropriate mailbox.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMessage = function() {\n var _this = this;\n\n // Query account for draft folder and draft UID\n return Account.$$resource.fetch(this.id.toString(), 'compose').then(function(data) {\n Account.$log.debug('New message: ' + JSON.stringify(data, undefined, 2));\n var message = new Account.$Message(data.accountId, _this.$getMailboxByPath(data.mailboxPath), data);\n return message;\n }).then(function(message) {\n // Fetch draft initial data\n return Account.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Account.$log.debug('New message: ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $addDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @see {@link User.$filter}\n */\n Account.prototype.$addDelegate = function(user) {\n var _this = this,\n deferred = Account.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.delegates, 'uid'), user.uid) > -1) {\n // No UID specified or user already in delegates\n deferred.resolve();\n }\n else {\n Account.$$resource.fetch(this.id.toString(), 'addDelegate', param).then(function() {\n _this.delegates.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @return a promise of the server call to remove the user from the account's delegates\n */\n Account.prototype.$removeDelegate = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Account.$$resource.fetch(this.id.toString(), 'removeDelegate', param).then(function() {\n var i = _.indexOf(_.pluck(_this.delegates, 'uid'), uid);\n if (i >= 0) {\n _this.delegates.splice(i, 1);\n }\n });\n };\n \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Mailbox\n * @constructor\n * @param {object} futureMailboxData - either an object literal or a promise\n */\n function Mailbox(account, futureMailboxData) {\n this.$account = account;\n // Data is immediately available\n if (typeof futureMailboxData.then !== 'function') {\n this.init(futureMailboxData);\n if (this.name && !this.path) {\n // Create a new mailbox on the server\n var newMailboxData = Mailbox.$$resource.create('createFolder', this.name);\n this.$unwrap(newMailboxData);\n }\n }\n else {\n // The promise will be unwrapped first\n // NOTE: this condition never happen for the moment\n this.$unwrap(futureMailboxData);\n }\n }\n\n /**\n * @memberof Mailbox\n * @desc The factory we'll use to register with Angular\n * @returns the Mailbox constructor\n */\n Mailbox.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Message', 'Acl', 'Preferences', 'sgMailbox_PRELOAD', function($q, $timeout, $log, Settings, Resource, Message, Acl, Preferences, PRELOAD) {\n angular.extend(Mailbox, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Message: Message,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: { sort: 'date', asc: 0 },\n selectedFolder: null,\n $refreshTimeout: null,\n PRELOAD: PRELOAD\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Mail.SortingState) {\n Mailbox.$query.sort = Preferences.settings.Mail.SortingState[0];\n Mailbox.$query.asc = parseInt(Preferences.settings.Mail.SortingState[1]);\n }\n });\n\n return Mailbox; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Mailbox in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .constant('sgMailbox_PRELOAD', {\n LOOKAHEAD: 50,\n SIZE: 100\n })\n .factory('Mailbox', Mailbox.$factory);\n\n /**\n * @memberof Mailbox\n * @desc Fetch list of mailboxes of a specific account\n * @param {string} accountId - the account\n * @return a promise of the HTTP operation\n * @see {@link Account.$getMailboxes}\n */\n Mailbox.$find = function(account) {\n var path, futureMailboxData;\n\n futureMailboxData = this.$$resource.fetch(account.id.toString(), 'view');\n\n return Mailbox.$unwrapCollection(account, futureMailboxData); // a collection of mailboxes\n };\n\n /**\n * @memberof Mailbox\n * @desc Unwrap to a collection of Mailbox instances.\n * @param {string} account - the account\n * @param {promise} futureMailboxData - a promise of the mailboxes metadata\n * @returns a promise of a collection of Mailbox objects\n */\n Mailbox.$unwrapCollection = function(account, futureMailboxData) {\n var collection = [],\n // Local recursive function\n createMailboxes = function(level, mailbox) {\n for (var i = 0; i < mailbox.children.length; i++) {\n mailbox.children[i].level = level;\n mailbox.children[i] = new Mailbox(account, mailbox.children[i]);\n createMailboxes(level+1, mailbox.children[i]);\n }\n };\n //collection.$futureMailboxData = futureMailboxData;\n\n return futureMailboxData.then(function(data) {\n return Mailbox.$timeout(function() {\n // Each entry is spun up as a Mailbox instance\n angular.forEach(data.mailboxes, function(data, index) {\n data.level = 0;\n var mailbox = new Mailbox(account, data);\n createMailboxes(1, mailbox); // recursively create all sub-mailboxes\n collection.push(mailbox);\n });\n return collection;\n });\n });\n };\n\n /**\n * @memberof Mailbox\n * @desc Build the path of the mailbox (or account only).\n * @param {string} accountId - the account ID\n * @param {string} [mailboxPath] - the mailbox path\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.$absolutePath = function(accountId, mailboxPath) {\n var path = [];\n\n if (mailboxPath) {\n path = _.map(mailboxPath.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n }\n\n path.splice(0, 0, accountId); // insert account ID\n\n return path.join('/');\n };\n\n /**\n * @function init\n * @memberof Mailbox.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of mailbox\n */\n Mailbox.prototype.init = function(data) {\n var _this = this;\n this.$isLoading = false;\n this.$messages = [];\n this.uidsMap = {};\n angular.extend(this, data);\n if (this.path) {\n this.id = this.$id();\n this.$acl = new Mailbox.$$Acl('Mail/' + this.id);\n }\n if (this.type) {\n this.$isEditable = this.isEditable();\n }\n if (angular.isUndefined(this.$shadowData)) {\n // Make a copy of the data for an eventual reset\n this.$shadowData = this.$omit();\n }\n };\n\n /**\n * @function $id\n * @memberof Mailbox.prototype\n * @desc Build the unique ID to identified the mailbox.\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.prototype.$id = function() {\n return Mailbox.$absolutePath(this.$account.id, this.path);\n };\n\n /**\n * @function $selectedCount\n * @memberof Mailbox.prototype\n * @desc Return the number of messages selected by the user.\n * @returns the number of selected messages\n */\n Mailbox.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.$messages) {\n count = (_.filter(this.$messages, function(message) { return message.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Mailbox.prototype\n * @desc Fetch the messages metadata of the mailbox\n * @param {object} [sort] - sort preferences. Defaults to descendent by date.\n * @param {string} sort.match - either AND or OR\n * @param {string} sort.sort - either arrival, subject, from, to, date, or size\n * @param {boolean} sort.asc - sort is ascendant if true\n * @param {object[]} [filters] - list of filters for the query\n * @param {string} filters.searchBy - either subject, from, to, cc, or body\n * @param {string} filters.searchInput - the search string to match\n * @param {boolean} filters.negative - negate the condition\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$filter = function(sortingAttributes, filters) {\n var _this = this, options = {};\n\n if (!angular.isDefined(this.unseenCount))\n this.unseenCount = 0;\n\n this.$isLoading = true;\n\n return Mailbox.$Preferences.ready().then(function() {\n\n if (Mailbox.$refreshTimeout)\n Mailbox.$timeout.cancel(Mailbox.$refreshTimeout);\n\n if (sortingAttributes)\n // Sorting preferences are common to all mailboxes\n angular.extend(Mailbox.$query, sortingAttributes);\n\n angular.extend(options, { sortingAttributes: Mailbox.$query });\n if (angular.isDefined(filters)) {\n options.filters = _.reject(filters, function(filter) {\n return angular.isUndefined(filter.searchInput) || filter.searchInput.length === 0;\n });\n _.each(options.filters, function(filter) {\n var secondFilter,\n match = filter.searchBy.match(/(\\w+)_or_(\\w+)/);\n if (match) {\n options.sortingAttributes.match = 'OR';\n filter.searchBy = match[1];\n secondFilter = angular.copy(filter);\n secondFilter.searchBy = match[2];\n options.filters.push(secondFilter);\n }\n });\n }\n\n // Restart the refresh timer, if needed\n var refreshViewCheck = Mailbox.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, Mailbox.prototype.$filter);\n Mailbox.$refreshTimeout = Mailbox.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n\n var futureMailboxData = Mailbox.$$resource.post(_this.id, 'view', options);\n return _this.$unwrap(futureMailboxData);\n });\n };\n\n /**\n * @function $loadMessage\n * @memberof Mailbox.prototype\n * @desc Check if the message is loaded and in any case, fetch more messages headers from the server.\n * @returns true if the message metadata are already fetched\n */\n Mailbox.prototype.$loadMessage = function(messageId) {\n var startIndex = this.uidsMap[messageId],\n endIndex,\n max = this.$messages.length,\n loaded = false,\n uids,\n futureHeadersData;\n if (angular.isDefined(this.uidsMap[messageId]) && startIndex < this.$messages.length) {\n // Index is valid\n if (angular.isDefined(this.$messages[startIndex].subject)) {// || this.$messages[startIndex].loading) {\n // Message headers are loaded or data is coming\n loaded = true;\n }\n\n // Preload more headers if possible\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.LOOKAHEAD, max - 1);\n if (!angular.isDefined(this.$messages[endIndex].subject) &&\n !angular.isDefined(this.$messages[endIndex].loading)) {\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.SIZE, max);\n for (uids = []; startIndex < endIndex && startIndex < max; startIndex++) {\n if (angular.isDefined(this.$messages[startIndex].subject) || this.$messages[startIndex].loading) {\n // Message at this index is already loaded; increase the end index\n endIndex++;\n }\n else {\n // Message at this index will be loaded\n uids.push(this.$messages[startIndex].uid);\n this.$messages[startIndex].loading = true;\n }\n }\n\n Mailbox.$log.debug('Loading UIDs ' + uids.join(' '));\n futureHeadersData = Mailbox.$$resource.post(this.id, 'headers', {uids: uids});\n this.$unwrapHeaders(futureHeadersData);\n }\n }\n return loaded;\n };\n\n /**\n * @function isEditable\n * @memberof Mailbox.prototype\n * @desc Checks if the mailbox is editable based on its type.\n * @returns true if the mailbox is not a special folder.\n */\n Mailbox.prototype.isEditable = function() {\n return this.type == 'folder';\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$rename = function() {\n var _this = this,\n findParent,\n deferred = Mailbox.$q.defer(),\n parent,\n children,\n i;\n\n if (this.name == this.$shadowData.name) {\n // Name hasn't changed\n deferred.resolve();\n return deferred.promise;\n }\n\n // Local recursive function\n findParent = function(parent, children) {\n var parentMailbox = null,\n mailbox = _.find(children, function(o) {\n return o.path == _this.path;\n });\n if (mailbox) {\n parentMailbox = parent;\n }\n else {\n angular.forEach(children, function(o) {\n if (!parentMailbox && o.children && o.children.length > 0) {\n parentMailbox = findParent(o, o.children);\n }\n });\n }\n return parentMailbox;\n };\n\n // Find mailbox parent\n parent = findParent(null, this.$account.$mailboxes);\n if (parent === null)\n children = this.$account.$mailboxes;\n else\n children = parent.children;\n\n // Find index of mailbox among siblings\n i = _.indexOf(_.pluck(children, 'id'), this.id);\n\n this.$save().then(function(data) {\n var sibling;\n angular.extend(_this, data); // update the path attribute\n _this.id = _this.$id();\n\n // Move mailbox among its siblings according to its new name\n children.splice(i, 1);\n sibling = _.find(children, function(o) {\n Mailbox.$log.debug(o.name + ' ? ' + _this.name);\n return (o.type == 'folder' && o.name.localeCompare(_this.name) > 0);\n });\n if (sibling) {\n i = _.indexOf(_.pluck(children, 'id'), sibling.id);\n }\n else {\n i = children.length;\n }\n children.splice(i, 0, _this);\n\n deferred.resolve();\n }, function(data) {\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $compact\n * @memberof Mailbox.prototype\n * @desc Compact the mailbox\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$compact = function() {\n return Mailbox.$$resource.post(this.id, 'expunge');\n };\n\n /**\n * @function $setFolderAs\n * @memberof Mailbox.prototype\n * @desc Set a folder as Drafts/Sent/Trash\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$setFolderAs = function(type) {\n return Mailbox.$$resource.post(this.id, 'setAs' + type + 'Folder');\n };\n\n /**\n * @function $emptyTrash\n * @memberof Mailbox.prototype\n * @desc Empty the Trash folder.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$emptyTrash = function() {\n return Mailbox.$$resource.post(this.id, 'emptyTrash');\n };\n\n /**\n * @function $markAsRead\n * @memberof Mailbox.prototype\n * @desc Mark all messages from folder as read\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$markAsRead = function() {\n return Mailbox.$$resource.post(this.id, 'markRead');\n };\n\n /**\n * @function $delete\n * @memberof Mailbox.prototype\n * @desc Delete the mailbox from the server\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$delete = function() {\n var _this = this,\n deferred = Mailbox.$q.defer(),\n promise;\n\n promise = Mailbox.$$resource.remove(this.id);\n\n promise.then(function() {\n _this.$account.$getMailboxes({reload: true});\n deferred.resolve(true);\n }, function(data, status) {\n deferred.reject(data);\n });\n return deferred.promise;\n };\n\n /**\n * @function $deleteMessages\n * @memberof Mailbox.prototype\n * @desc Delete multiple messages from mailbox.\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$deleteMessages = function(uids) {\n return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});\n };\n\n /**\n * @function $copyMessages\n * @memberof Mailbox.prototype\n * @desc Copy multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$copyMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'copyMessages', {uids: uids, folder: folder});\n };\n\n /**\n * @function $moveMessages\n * @memberof Mailbox.prototype\n * @desc Move multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$moveMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'moveMessages', {uids: uids, folder: folder});\n };\n \n /**\n * @function $reset\n * @memberof Mailbox.prototype\n * @desc Reset the original state the mailbox's data.\n */\n Mailbox.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key != 'children' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit();\n };\n\n /**\n * @function $save\n * @memberof Mailbox.prototype\n * @desc Save the mailbox to the server. This currently can only affect the name of the mailbox.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$save = function() {\n var _this = this;\n\n return Mailbox.$$resource.save(this.id, this.$omit()).then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n Mailbox.$log.debug(JSON.stringify(data, undefined, 2));\n return data;\n }, function(data) {\n Mailbox.$log.error(JSON.stringify(data, undefined, 2));\n // Restore previous version\n _this.$reset();\n });\n };\n\n /**\n * @function $newMailbox\n * @memberof Mailbox.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Mailbox.prototype.$newMailbox = function(path, name) {\n return this.$account.$newMailbox(path, name);\n };\n\n /**\n * @function $omit\n * @memberof Mailbox.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Mailbox instance\n */\n Mailbox.prototype.$omit = function() {\n var mailbox = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'children' &&\n key[0] != '$') {\n mailbox[key] = value;\n }\n });\n return mailbox;\n };\n\n /**\n * @function $unwrap\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and instanciate new Message objects using received data.\n * @param {promise} futureMailboxData - a promise of the Mailbox's metadata\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$unwrap = function(futureMailboxData) {\n var _this = this,\n deferred = Mailbox.$q.defer();\n\n this.$futureMailboxData = futureMailboxData;\n this.$futureMailboxData.then(function(data) {\n Mailbox.$timeout(function() {\n var uids, headers;\n\n _this.init(data);\n\n if (_this.uids) {\n Mailbox.$log.debug('unwrapping ' + data.uids.length + ' messages');\n \n // First entry of 'headers' are keys\n headers = _.invoke(_this.headers[0], 'toLowerCase');\n _this.headers.splice(0, 1);\n\n // First entry of 'uids' are keys when threaded view is enabled\n if (_this.threaded) {\n uids = _this.uids[0];\n _this.uids.splice(0, 1);\n }\n\n // Instanciate Message objects\n _.reduce(_this.uids, function(msgs, msg, i) {\n var data;\n if (_this.threaded)\n data = _.object(uids, msg);\n else\n data = {uid: msg.toString()};\n\n // Build map of UID <=> index\n _this.uidsMap[data.uid] = i;\n\n msgs.push(new Mailbox.$Message(_this.$account.id, _this, data));\n\n return msgs;\n }, _this.$messages);\n\n // Extend Message objects with received headers\n _.each(_this.headers, function(data) {\n var msg = _.object(headers, data),\n i = _this.uidsMap[msg.uid.toString()];\n _.extend(_this.$messages[i], msg);\n });\n }\n Mailbox.$log.debug('mailbox ' + _this.id + ' ready');\n _this.$isLoading = false;\n deferred.resolve(_this.$messages);\n });\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapHeaders\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and extend matching Message objects using received data.\n * @param {promise} futureHeadersData - a promise of some messages metadata\n */\n Mailbox.prototype.$unwrapHeaders = function(futureHeadersData) {\n var _this = this;\n\n futureHeadersData.then(function(data) {\n Mailbox.$timeout(function() {\n var headers, j;\n if (data.length > 0) {\n // First entry of 'headers' are keys\n headers = _.invoke(data[0], 'toLowerCase');\n data.splice(0, 1);\n _.each(data, function(messageHeaders) {\n messageHeaders = _.object(headers, messageHeaders);\n j = _this.uidsMap[messageHeaders.uid.toString()];\n if (angular.isDefined(j)) {\n _.extend(_this.$messages[j], messageHeaders);\n }\n });\n }\n });\n });\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Message\n * @constructor\n * @param {string} accountId - the account ID\n * @param {string} mailboxPath - an array of the mailbox path components\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function Message(accountId, mailbox, futureMessageData) {\n this.accountId = accountId;\n this.$mailbox = mailbox;\n this.$hasUnsafeContent = false;\n this.$loadUnsafeContent = false;\n this.editable = {to: [], cc: [], bcc: []};\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n angular.extend(this, futureMessageData);\n this.id = this.$absolutePath();\n this.$formatFullAddresses();\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\n this.selected = false;\n }\n\n /**\n * @memberof Message\n * @desc The factory we'll use to register with Angular\n * @returns the Message constructor\n */\n Message.$factory = ['$q', '$timeout', '$log', '$sce', 'sgSettings', 'Gravatar', 'Resource', 'Preferences', function($q, $timeout, $log, $sce, Settings, Gravatar, Resource, Preferences) {\n angular.extend(Message, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $sce: $sce,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser())\n });\n // Initialize tags form user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailLabelsColors) {\n Message.$tags = Preferences.defaults.SOGoMailLabelsColors;\n }\n });\n\n return Message; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Message in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Message', Message.$factory);\n\n /**\n * @function filterTags\n * @memberof Message.prototype\n * @desc Search for tags (ie., mail labels) matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Message.filterTags = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Message.$tags), function(tag) {\n var value = Message.$tags[tag];\n return value[0].search(re) != -1;\n });\n };\n\n /**\n * @function $absolutePath\n * @memberof Message.prototype\n * @desc Build the path of the message\n * @returns a string representing the path relative to the mail module\n */\n Message.prototype.$absolutePath = function(options) {\n var path;\n\n path = _.map(this.$mailbox.path.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n path.splice(0, 0, this.accountId); // insert account ID\n if (options && options.asDraft && this.draftId) {\n path.push(this.draftId); // add draft ID\n }\n else {\n path.push(this.uid); // add message UID\n }\n\n return path.join('/');\n };\n\n /**\n * @function $setUID\n * @memberof Message.prototype\n * @desc Change the UID of the message. This happens when saving a draft.\n * @param {number} uid - the new message UID\n */\n Message.prototype.$setUID = function(uid) {\n var oldUID = this.uid || -1;\n\n if (oldUID != uid) {\n this.uid = uid;\n this.id = this.$absolutePath();\n if (oldUID > -1 && this.$mailbox.uidsMap[oldUID]) {\n this.$mailbox.uidsMap[uid] = this.$mailbox.uidsMap[oldUID];\n this.$mailbox.uidsMap[oldUID] = null;\n }\n }\n };\n\n /**\n * @function $formatFullAddresses\n * @memberof Message.prototype\n * @desc Format all sender and recipients addresses with a complete description (name ).\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n\n // Build long representation of email addresses\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n _.each(_this[type], function(data, i) {\n if (data.name && data.name != data.email)\n data.full = data.name + ' <' + data.email + '>';\n else\n data.full = '<' + data.email + '>';\n });\n });\n };\n\n /**\n * @function $shortAddress\n * @memberof Message.prototype\n * @desc Format the first address of a specific type with a short description.\n * @returns a string of the name or the email of the envelope address type\n */\n Message.prototype.$shortAddress = function(type) {\n var address = '';\n if (this[type] && this[type].length > 0) {\n address = this[type][0].name || this[type][0].email || '';\n }\n\n return address;\n };\n\n /**\n * @function loadUnsafeContent\n * @memberof Message.prototype\n * @desc Mark the message to load unsafe resources when calling $content().\n */\n Message.prototype.loadUnsafeContent = function() {\n this.$loadUnsafeContent = true;\n };\n\n /**\n * @function $content\n * @memberof Message.prototype\n * @desc Get the message body as accepted by SCE (Angular Strict Contextual Escaping).\n * @returns the HTML representation of the body\n */\n Message.prototype.$content = function() {\n var _this = this,\n parts = [],\n _visit = function(part) {\n if (part.type == 'UIxMailPartAlternativeViewer') {\n _visit(_.find(part.content, function(alternatePart) {\n return part.preferredPart == alternatePart.contentType;\n }));\n }\n // Can be used for UIxMailPartMixedViewer and UIxMailPartMessageViewer\n else if (angular.isArray(part.content)) {\n _.each(part.content, function(mixedPart) {\n _visit(mixedPart);\n });\n }\n else {\n if (angular.isUndefined(part.safeContent)) {\n // Keep a copy of the original content\n part.safeContent = part.content;\n _this.$hasUnsafeContent = (part.safeContent.indexOf(' unsafe-') > -1);\n }\n if (part.type == 'UIxMailPartHTMLViewer') {\n part.html = true;\n if (_this.$loadUnsafeContent) {\n if (angular.isUndefined(part.unsafeContent)) {\n part.unsafeContent = document.createElement('div');\n part.unsafeContent.innerHTML = part.safeContent;\n angular.forEach(['src', 'data', 'classid', 'background', 'style'], function(suffix) {\n var elements = part.unsafeContent.querySelectorAll('[unsafe-' + suffix + ']'),\n element,\n value,\n i;\n for (i = 0; i < elements.length; i++) {\n element = angular.element(elements[i]);\n value = element.attr('unsafe-' + suffix);\n element.attr(suffix, value);\n element.removeAttr('unsafe-' + suffix);\n }\n });\n }\n part.content = Message.$sce.trustAs('html', part.unsafeContent.innerHTML);\n }\n else {\n part.content = Message.$sce.trustAs('html', part.safeContent);\n }\n parts.push(part);\n }\n else if (part.type == 'UIxMailPartICalViewer' ||\n part.type == 'UIxMailPartImageViewer' ||\n part.type == 'UIxMailPartLinkViewer') {\n\n // UIxMailPartICalViewer injects 'participants'\n if (part.participants) {\n _.each(part.participants, function(participant) {\n participant.image = Message.$gravatar(participant.email, 32);\n });\n }\n\n // Trusted content that can be compiled (Angularly-speaking)\n part.compile = true;\n parts.push(part);\n }\n else {\n part.html = true;\n part.content = Message.$sce.trustAs('html', part.safeContent);\n parts.push(part);\n }\n }\n };\n _visit(this.parts);\n\n return parts;\n };\n\n /**\n * @function $editableContent\n * @memberof Message.prototype\n * @desc First, fetch the draft ID that corresponds to the temporary draft object on the SOGo server.\n * Secondly, fetch the editable message body along with other metadata such as the recipients.\n * @returns the HTML representation of the body\n */\n Message.prototype.$editableContent = function() {\n var _this = this;\n\n return Message.$$resource.fetch(this.id, 'edit').then(function(data) {\n angular.extend(_this, data);\n return Message.$$resource.fetch(_this.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('editable = ' + JSON.stringify(data, undefined, 2));\n angular.extend(_this.editable, data);\n return data.text;\n });\n });\n };\n\n /**\n * @function addTag\n * @memberof Message.prototype\n * @desc Add a mail tag on the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.addTag = function(tag) {\n return this.$addOrRemoveTag('add', tag);\n };\n\n /**\n * @function removeTag\n * @memberof Message.prototype\n * @desc Remove a mail tag from the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.removeTag = function(tag) {\n return this.$addOrRemoveTag('remove', tag);\n };\n\n /**\n * @function $addOrRemoveTag\n * @memberof Message.prototype\n * @desc Add or remove a mail tag on the current message.\n * @param {string} operation - the operation name to perform\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$addOrRemoveTag = function(operation, tag) {\n var data = {\n operation: operation,\n msgUIDs: [this.uid],\n flags: tag\n };\n\n if (tag)\n return Message.$$resource.post(this.$mailbox.$id(), 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $imipAction\n * @memberof Message.prototype\n * @desc Perform IMIP actions on the current message.\n * @param {string} path - the path of the IMIP calendar part \n * @param {string} action - the the IMIP action to perform\n * @param {object} data - the delegation info \n */\n Message.prototype.$imipAction = function(path, action, data) {\n var _this = this;\n Message.$$resource.post([this.id, path].join('/'), action, data).then(function(data) {\n Message.$timeout(function() {\n _this.$reload();\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $sendMDN\n * @memberof Message.prototype\n * @desc Send MDN response for current email message\n */\n Message.prototype.$sendMDN = function() {\n this.shouldAskReceipt = 0;\n return Message.$$resource.post(this.id, 'sendMDN');\n };\n\n /**\n * @function $deleteAttachment\n * @memberof Message.prototype\n * @desc Delete an attachment from a message being composed\n * @param {string} filename - the filename of the attachment to delete\n */\n Message.prototype.$deleteAttachment = function(filename) {\n var action = 'deleteAttachment?filename=' + filename;\n var _this = this;\n Message.$$resource.post(this.$absolutePath({asDraft: true}), action).then(function(data) {\n Message.$timeout(function() {\n _this.editable.attachmentAttrs = _.filter(_this.editable.attachmentAttrs, function(attachment) {\n return attachment.filename != filename;\n });\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $markAsFlaggedOrUnflagged\n * @memberof Message.prototype\n * @desc Add or remove a the \\\\Flagged flag on the current message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.toggleFlag = function() {\n var _this = this,\n action = 'markMessageFlagged';\n\n if (this.isflagged)\n action = 'markMessageUnflagged';\n\n return Message.$$resource.post(this.id, action).then(function(data) {\n Message.$timeout(function() {\n _this.isflagged = !_this.isflagged;\n });\n });\n };\n\n /**\n * @function $reload\n * @memberof Message.prototype\n * @desc Fetch the viewable message body along with other metadata such as the list of attachments.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$reload = function() {\n var futureMessageData;\n\n futureMessageData = Message.$$resource.fetch(this.id, 'view');\n\n return this.$unwrap(futureMessageData);\n };\n\n /**\n * @function $reply\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$reply = function() {\n return this.$newDraft('reply');\n };\n\n /**\n * @function $replyAll\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender and all recipients.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$replyAll = function() {\n return this.$newDraft('replyall');\n };\n\n /**\n * @function $forward\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a forward.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$forward = function() {\n return this.$newDraft('forward');\n };\n\n /**\n * @function $newDraft\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply or a forward of the current message and associated\n * to the draft mailbox.\n * @see {@link Account.$newMessage}\n * @see {@link Message.$editableContent}\n * @see {@link Message.$reply}\n * @see {@link Message.$replyAll}\n * @see {@link Message.$forwad}\n * @param {string} action - the HTTP action to perform on the message\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$newDraft = function(action) {\n var _this = this;\n\n // Query server for draft folder and draft UID\n return Message.$$resource.fetch(this.id, action).then(function(data) {\n var mailbox, message;\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n mailbox = _this.$mailbox.$account.$getMailboxByPath(data.mailboxPath);\n message = new Message(data.accountId, mailbox, data);\n // Fetch draft initial data\n return Message.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $save\n * @memberof Message.prototype\n * @desc Save the message to the server.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$save = function() {\n var _this = this,\n data = this.editable;\n\n Message.$log.debug('save = ' + JSON.stringify(data, undefined, 2));\n\n return Message.$$resource.save(this.$absolutePath({asDraft: true}), data).then(function(response) {\n Message.$log.debug('save = ' + JSON.stringify(response, undefined, 2));\n _this.$setUID(response.uid);\n _this.$reload(); // fetch a new viewable version of the message\n });\n };\n\n /**\n * @function $send\n * @memberof Message.prototype\n * @desc Send the message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$send = function() {\n var data = angular.copy(this.editable),\n deferred = Message.$q.defer();\n\n Message.$log.debug('send = ' + JSON.stringify(data, undefined, 2));\n\n Message.$$resource.post(this.$absolutePath({asDraft: true}), 'send', data).then(function(data) {\n if (data.status == 'success') {\n deferred.resolve(data);\n }\n else {\n deferred.reject(data);\n }\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrap\n * @memberof Message.prototype\n * @desc Unwrap a promise. \n * @param {promise} futureMessageData - a promise of some of the Message's data\n */\n Message.prototype.$unwrap = function(futureMessageData) {\n var _this = this,\n deferred = Message.$q.defer();\n\n // Expose the promise\n this.$futureMessageData = futureMessageData;\n\n // Resolve the promise\n this.$futureMessageData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n Message.$timeout(function() {\n angular.extend(_this, data);\n _this.id = _this.$absolutePath();\n _this.$formatFullAddresses();\n _this.$loadUnsafeContent = false;\n deferred.resolve(_this);\n });\n if (!_this.isread) {\n Message.$$resource.fetch(_this.id, 'markMessageRead').then(function() {\n Message.$timeout(function() {\n _this.isread = true;\n _this.$mailbox.unseenCount--;\n });\n });\n }\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Message.$log.error(_this.error);\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof Message.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Message instance\n */\n Message.prototype.$omit = function() {\n var message = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n message[key] = value;\n }\n });\n\n // Format addresses as arrays\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n if (message[type])\n message[type] = _.invoke(message[type].split(','), 'trim');\n });\n\n //Message.$log.debug(JSON.stringify(message, undefined, 2));\n return message;\n };\n\n})();\n"]} \ No newline at end of file +{"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","response","reject","error","$newMessage","fetch","toString","message","accountId","mailboxPath","$absolutePath","asDraft","editable","$addDelegate","user","param","uid","indexOf","pluck","delegates","users","status","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","$selectedCount","count","filter","selected","$filter","sortingAttributes","filters","isDefined","unseenCount","cancel","searchInput","secondFilter","match","searchBy","copy","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","timeInterval","$loadMessage","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","$futureMailboxData","headers","invoke","threaded","reduce","msgs","msg","object","isError","j","messageHeaders","futureMessageData","$mailbox","$hasUnsafeContent","$loadUnsafeContent","to","cc","bcc","$formatFullAddresses","$sce","Gravatar","$gravatar","SOGoMailLabelsColors","$tags","filterTags","query","re","RegExp","keys","tag","search","draftId","$setUID","oldUID","$shortAddress","address","loadUnsafeContent","$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","image","compile","$editableContent","text","addTag","$addOrRemoveTag","removeTag","$imipAction","action","$reload","$sendMDN","shouldAskReceipt","$deleteAttachment","filename","attachmentAttrs","attachment","toggleFlag","isflagged","$reply","$newDraft","$replyAll","$forward","$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,KACRuC,SAAW5C,QAAQmB,GAAG0B,OAS1B,OAPA7C,SAAQyB,WAAW6C,KAAKH,KAAM,gBAAiBE,KAAMA,OAAOnE,KAAK,WAC/DyC,MAAMF,eAAeM,QAAQ,IAC7BH,SAASM,WACR,SAASqB,UACV3B,SAAS4B,OAAOD,SAASE,SAGpB7B,SAASO,SASlBnD,QAAQwC,UAAUkC,YAAc,WAC9B,GAAI/B,OAAQtC,IAGZ,OAAOL,SAAQyB,WAAWkD,MAAMtE,KAAKkC,GAAGqC,WAAY,WAAW1E,KAAK,SAASgC,MAC3ElC,QAAQa,KAAKC,MAAM,0BAA4BC,KAAKC,UAAUkB,KAAMjB,OAAW,GAC/E,IAAI4D,SAAU,GAAI7E,SAAQ6B,SAASK,KAAK4C,UAAWnC,MAAMuB,kBAAkBhC,KAAK6C,aAAc7C,KAC9F,OAAO2C,WACN3E,KAAK,SAAS2E,SAEf,MAAO7E,SAAQyB,WAAWkD,MAAME,QAAQG,eAAeC,SAAS,IAAQ,QAAQ/E,KAAK,SAASgC,MAG5F,MAFAlC,SAAQa,KAAKC,MAAM,uBAAyBC,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5Ed,QAAQC,OAAOyE,QAAQK,SAAUhD,MAC1B2C,aAYb7E,QAAQwC,UAAU2C,aAAe,SAASC,MACxC,GAAIzC,OAAQtC,KACRuC,SAAW5C,QAAQmB,GAAG0B,QACtBwC,OAASC,IAAKF,KAAKE,IAavB,QAZKF,KAAKE,KAAOhF,EAAEiF,QAAQjF,EAAEkF,MAAMnF,KAAKoF,UAAW,OAAQL,KAAKE,KAAO,GAErE1C,SAASM,UAGTlD,QAAQyB,WAAWkD,MAAMtE,KAAKkC,GAAGqC,WAAY,cAAeS,OAAOnF,KAAK,WACtEyC,MAAM8C,UAAUlC,KAAK6B,MACrBxC,SAASM,QAAQP,MAAM+C,QACtB,SAASxD,KAAMyD,QAChB/C,SAAS4B,OAAOoB,EAAE,yCAGfhD,SAASO,SAUlBnD,QAAQwC,UAAUqD,gBAAkB,SAASP,KAC3C,GAAI3C,OAAQtC,KACRgF,OAASC,IAAKA,IAClB,OAAOtF,SAAQyB,WAAWkD,MAAMtE,KAAKkC,GAAGqC,WAAY,iBAAkBS,OAAOnF,KAAK,WAChF,GAAIoC,GAAIhC,EAAEiF,QAAQjF,EAAEkF,MAAM7C,MAAM8C,UAAW,OAAQH,IAC/ChD,IAAK,GACPK,MAAM8C,UAAUK,OAAOxD,EAAG,SCtQlC,WACE,YAOA,SAASf,SAAQwE,QAASC,mBAGxB,GAFA3F,KAAK4F,SAAWF,QAEsB,kBAA3BC,mBAAkB9F,MAE3B,GADAG,KAAK6F,KAAKF,mBACN3F,KAAKgE,OAAShE,KAAK8D,KAAM,CAE3B,GAAIgC,gBAAiB5E,QAAQE,WAAW2E,OAAO,eAAgB/F,KAAKgE,KACpEhE,MAAKgG,QAAQF,qBAMf9F,MAAKgG,QAAQL,mBASjBzE,QAAQL,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,MAAO,cAAe,oBAAqB,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUE,QAAS8E,IAAKC,YAAaC,SAsBxM,MArBArG,SAAQC,OAAOmB,SACbJ,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASM,WAAW,aAAe,OAAQN,SAASM,cAC7EE,SAAUL,QACViF,MAAOH,IACPI,aAAcH,YACdI,QAAUC,KAAM,OAAQC,IAAK,GAC7BC,eAAgB,KAChBC,gBAAiB,KACjBP,QAASA,UAGXD,YAAYS,QAAQ9G,KAAK,WACnBqG,YAAYU,SAASC,KAAKC,eAC5B5F,QAAQoF,OAAOC,KAAOL,YAAYU,SAASC,KAAKC,aAAa,GAC7D5F,QAAQoF,OAAOE,IAAMO,SAASb,YAAYU,SAASC,KAAKC,aAAa,OAIlE5F,SAOT,KACEpB,QAAQ2B,OAAO,iBAEjB,MAAMC,GACJ5B,QAAQ2B,OAAO,iBAAkB,gBAEnC3B,QAAQ2B,OAAO,iBACZuF,SAAS,qBACRC,UAAW,GACXC,KAAM,MAEPvF,QAAQ,UAAWT,QAAQL,UAS9BK,QAAQyB,MAAQ,SAAS+C,SACvB,GAAUC,kBAIV,OAFAA,mBAAoB3F,KAAKoB,WAAWkD,MAAMoB,QAAQxD,GAAGqC,WAAY,QAE1DrD,QAAQiG,kBAAkBzB,QAASC,oBAU5CzE,QAAQiG,kBAAoB,SAASzB,QAASC,mBAC5C,GAAI7D,eAEAsF,gBAAkB,SAASC,MAAO7D,SAChC,IAAK,GAAIvB,GAAI,EAAGA,EAAIuB,QAAQL,SAASC,OAAQnB,IAC3CuB,QAAQL,SAASlB,GAAGoF,MAAQA,MAC5B7D,QAAQL,SAASlB,GAAK,GAAIf,SAAQwE,QAASlC,QAAQL,SAASlB,IAC5DmF,gBAAgBC,MAAM,EAAG7D,QAAQL,SAASlB,IAKlD,OAAO0D,mBAAkB9F,KAAK,SAASgC,MACrC,MAAOX,SAAQH,SAAS,WAQtB,MANAjB,SAAQiC,QAAQF,KAAKoB,UAAW,SAASpB,KAAMyF,OAC7CzF,KAAKwF,MAAQ,CACb,IAAI7D,SAAU,GAAItC,SAAQwE,QAAS7D,KACnCuF,iBAAgB,EAAG5D,SACnB1B,WAAWoB,KAAKM,WAEX1B,gBAYbZ,QAAQyD,cAAgB,SAASF,UAAWC,aAC1C,GAAIZ,QAUJ,OARIY,eACFZ,KAAO7D,EAAEsH,IAAI7C,YAAY8C,MAAM,KAAM,SAASC,WAC5C,MAAO,SAAWA,UAAUC,qBAIhC5D,KAAK2B,OAAO,EAAG,EAAGhB,WAEXX,KAAK6D,KAAK,MASnBzG,QAAQiB,UAAU0D,KAAO,SAAShE,MAEhC7B,KAAK4H,YAAa,EAClB5H,KAAK6H,aACL7H,KAAK8H,WACLhI,QAAQC,OAAOC,KAAM6B,MACjB7B,KAAK8D,OACP9D,KAAKkC,GAAKlC,KAAK+H,MACf/H,KAAKgI,KAAO,GAAI9G,SAAQkF,MAAM,QAAUpG,KAAKkC,KAE3ClC,KAAKuD,OACPvD,KAAKiI,YAAcjI,KAAKkI,cAEtBpI,QAAQqI,YAAYnI,KAAKoI,eAE3BpI,KAAKoI,YAAcpI,KAAKqI,UAU5BnH,QAAQiB,UAAU4F,IAAM,WACtB,MAAO7G,SAAQyD,cAAc3E,KAAK4F,SAAS1D,GAAIlC,KAAK8D,OAStD5C,QAAQiB,UAAUmG,eAAiB,WACjC,GAAIC,MAMJ,OAJAA,OAAQ,EACJvI,KAAK6H,YACPU,MAAStI,EAAEuI,OAAOxI,KAAK6H,UAAW,SAASrD,SAAW,MAAOA,SAAQiE,WAAcrF,QAE9EmF,OAiBTrH,QAAQiB,UAAUuG,QAAU,SAASC,kBAAmBC,SACtD,GAAItG,OAAQtC,KAAMqC,UAOlB,OALKvC,SAAQ+I,UAAU7I,KAAK8I,eAC1B9I,KAAK8I,YAAc,GAErB9I,KAAK4H,YAAa,EAEX1G,QAAQmF,aAAaM,QAAQ9G,KAAK,WAEnCqB,QAAQwF,iBACVxF,QAAQH,SAASgI,OAAO7H,QAAQwF,iBAE9BiC,mBAEF7I,QAAQC,OAAOmB,QAAQoF,OAAQqC,mBAEjC7I,QAAQC,OAAOsC,SAAWsG,kBAAmBzH,QAAQoF,SACjDxG,QAAQ+I,UAAUD,WACpBvG,QAAQuG,QAAU3I,EAAEkE,OAAOyE,QAAS,SAASJ,QAC3C,MAAO1I,SAAQqI,YAAYK,OAAOQ,cAA8C,IAA9BR,OAAOQ,YAAY5F,SAEvEnD,EAAEC,KAAKmC,QAAQuG,QAAS,SAASJ,QAC/B,GAAIS,cACAC,MAAQV,OAAOW,SAASD,MAAM,iBAC9BA,SACF7G,QAAQsG,kBAAkBO,MAAQ,KAClCV,OAAOW,SAAWD,MAAM,GACxBD,aAAenJ,QAAQsJ,KAAKZ,QAC5BS,aAAaE,SAAWD,MAAM,GAC9B7G,QAAQuG,QAAQ1F,KAAK+F,iBAM3B,IAAII,kBAAmBnI,QAAQmF,aAAaiD,SAASC,oBACrD,IAAIF,kBAAwC,YAApBA,iBAAgC,CACtD,GAAIG,GAAI1J,QAAQ2J,KAAKnH,MAAOpB,QAAQiB,UAAUuG,QAC9CxH,SAAQwF,gBAAkBxF,QAAQH,SAASyI,EAAmC,IAAhCH,iBAAiBK,gBAGjE,GAAI/D,mBAAoBzE,QAAQE,WAAW6C,KAAK3B,MAAMJ,GAAI,OAAQG,QAClE,OAAOC,OAAM0D,QAAQL,sBAUzBzE,QAAQiB,UAAUwH,aAAe,SAASC,WACxC,GACIC,UAGAC,KACAC,kBALAC,WAAahK,KAAK8H,QAAQ8B,WAE1BK,IAAMjK,KAAK6H,UAAUzE,OACrB8G,QAAS,CAGb,IAAIpK,QAAQ+I,UAAU7I,KAAK8H,QAAQ8B,aAAeI,WAAahK,KAAK6H,UAAUzE,SAExEtD,QAAQ+I,UAAU7I,KAAK6H,UAAUmC,YAAYG,WAE/CD,QAAS,GAIXL,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQiF,QAAQc,UAAWgD,IAAM,IAC7DnK,QAAQ+I,UAAU7I,KAAK6H,UAAUgC,UAAUM,WAC3CrK,QAAQ+I,UAAU7I,KAAK6H,UAAUgC,UAAUS,UAAU,CAExD,IADAT,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQiF,QAAQe,KAAM+C,KAClDH,QAAwBD,SAAbG,YAAsCC,IAAbD,WAAkBA,aACrDlK,QAAQ+I,UAAU7I,KAAK6H,UAAUmC,YAAYG,UAAYnK,KAAK6H,UAAUmC,YAAYM,QAEtFT,YAIAC,KAAK5G,KAAKlD,KAAK6H,UAAUmC,YAAY/E,KACrCjF,KAAK6H,UAAUmC,YAAYM,SAAU,EAIzCpJ,SAAQV,KAAKC,MAAM,gBAAkBqJ,KAAKnC,KAAK,MAC/CoC,kBAAoB7I,QAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,WAAY4H,KAAMA,OACvE9J,KAAKuK,eAAeR,mBAGxB,MAAOG,SASThJ,QAAQiB,UAAU+F,WAAa,WAC7B,MAAoB,UAAblI,KAAKuD,MAUdrC,QAAQiB,UAAUqI,QAAU,WAC1B,GACIC,YAEAC,OACAvH,SACAlB,EALAK,MAAQtC,KAERuC,SAAWrB,QAAQJ,GAAG0B,OAK1B,OAAIxC,MAAKgE,MAAQhE,KAAKoI,YAAYpE,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,KAAK4F,SAASnD,YAEtCU,SADa,OAAXuH,OACS1K,KAAK4F,SAASnD,WAEdiI,OAAOvH,SAGpBlB,EAAIhC,EAAEiF,QAAQjF,EAAEkF,MAAMhC,SAAU,MAAOnD,KAAKkC,IAE5ClC,KAAK4K,QAAQ/K,KAAK,SAASgC,MACzB,GAAIgJ,QACJ/K,SAAQC,OAAOuC,MAAOT,MACtBS,MAAMJ,GAAKI,MAAMyF,MAGjB5E,SAASsC,OAAOxD,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,EAAEiF,QAAQjF,EAAEkF,MAAMhC,SAAU,MAAO0H,QAAQ3I,IAG3CiB,SAASC,OAEfD,SAASsC,OAAOxD,EAAG,EAAGK,OAEtBC,SAASM,WACR,SAAShB,MACVU,SAAS4B,OAAOtC,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,GAEInI,SAFAR,MAAQtC,KACRuC,SAAWrB,QAAQJ,GAAG0B,OAc1B,OAXAM,SAAU5B,QAAQE,WAAW6C,KAAKjE,KAAKkC,GAAI,cAE3CY,QAAQjD,KAAK,WAEXyC,MAAMuF,aACNvF,MAAMwF,WACNxF,MAAMwG,YAAc,GACnB,SAASjH,KAAMyD,QAChB/C,SAAS4B,OAAOtC,QAGXU,SAASO,SASlB5B,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,MAAMsD,SAASxD,eAAeM,QAAQ,IACtCH,SAASM,SAAQ,IAChB,SAAShB,KAAMyD,QAChB/C,SAAS4B,OAAOtC,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,KAAKoI,aAC1BpI,KAAKoI,YAAcpI,KAAKqI,SAS1BnH,QAAQiB,UAAUyI,MAAQ,WACxB,GAAItI,OAAQtC,IAEZ,OAAOkB,SAAQE,WAAW4K,KAAKhM,KAAKkC,GAAIlC,KAAKqI,SAASxI,KAAK,SAASgC,MAIlE,MAFAS,OAAM8F,YAAc9F,MAAM+F,QAC1BnH,QAAQV,KAAKC,MAAMC,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5CiB,MACN,SAASA,MACVX,QAAQV,KAAK4D,MAAM1D,KAAKC,UAAUkB,KAAMjB,OAAW,IAEnD0B,MAAMuJ,YAUV3K,QAAQiB,UAAU4B,YAAc,SAASD,KAAME,MAC7C,MAAOhE,MAAK4F,SAAS7B,YAAYD,KAAME,OASzC9C,QAAQiB,UAAUkG,MAAQ,WACxB,GAAI7E,WAQJ,OAPA1D,SAAQiC,QAAQ/B,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KACO,YAAPA,KACU,KAAVA,IAAI,KACNvI,QAAQuI,KAAOD,SAGZtI,SAUTtC,QAAQiB,UAAU6D,QAAU,SAASL,mBACnC,GAAIrD,OAAQtC,KACRuC,SAAWrB,QAAQJ,GAAG0B,OAuD1B,OArDAxC,MAAKiM,mBAAqBtG,kBAC1B3F,KAAKiM,mBAAmBpM,KAAK,SAASgC,MACpCX,QAAQH,SAAS,WACf,GAAI+I,MAAMoC,OAEV5J,OAAMuD,KAAKhE,MAEPS,MAAMwH,OACR5I,QAAQV,KAAKC,MAAM,cAAgBoB,KAAKiI,KAAK1G,OAAS,aAGtD8I,QAAUjM,EAAEkM,OAAO7J,MAAM4J,QAAQ,GAAI,eACrC5J,MAAM4J,QAAQzG,OAAO,EAAG,GAGpBnD,MAAM8J,WACRtC,KAAOxH,MAAMwH,KAAK,GAClBxH,MAAMwH,KAAKrE,OAAO,EAAG,IAIvBxF,EAAEoM,OAAO/J,MAAMwH,KAAM,SAASwC,KAAMC,IAAKtK,GACvC,GAAIJ,KAWJ,OATEA,MADES,MAAM8J,SACDnM,EAAEuM,OAAO1C,KAAMyC,MAEdtH,IAAKsH,IAAIhI,YAGnBjC,MAAMwF,QAAQjG,KAAKoD,KAAOhD,EAE1BqK,KAAKpJ,KAAK,GAAIhC,SAAQM,SAASc,MAAMsD,SAAS1D,GAAII,MAAOT,OAElDyK,MACNhK,MAAMuF,WAGT5H,EAAEC,KAAKoC,MAAM4J,QAAS,SAASrK,MAC7B,GAAI0K,KAAMtM,EAAEuM,OAAON,QAASrK,MACxBI,EAAIK,MAAMwF,QAAQyE,IAAItH,IAAIV,WAC9BtE,GAAEF,OAAOuC,MAAMuF,UAAU5F,GAAIsK,QAGjCrL,QAAQV,KAAKC,MAAM,WAAa6B,MAAMJ,GAAK,UAC3CI,MAAMsF,YAAa,EACnBrF,SAASM,QAAQP,MAAMuF,cAExB,SAAShG,MACV/B,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMmK,SAAU,EAChBlK,SAAS4B,WAGJ5B,SAASO,SASlB5B,QAAQiB,UAAUoI,eAAiB,SAASR,mBAC1C,GAAIzH,OAAQtC,IAEZ+J,mBAAkBlK,KAAK,SAASgC,MAC9BX,QAAQH,SAAS,WACf,GAAImL,SAASQ,CACT7K,MAAKuB,OAAS,IAEhB8I,QAAUjM,EAAEkM,OAAOtK,KAAK,GAAI,eAC5BA,KAAK4D,OAAO,EAAG,GACfxF,EAAEC,KAAK2B,KAAM,SAAS8K,gBACpBA,eAAiB1M,EAAEuM,OAAON,QAASS,gBACnCD,EAAIpK,MAAMwF,QAAQ6E,eAAe1H,IAAIV,YACjCzE,QAAQ+I,UAAU6D,IACpBzM,EAAEF,OAAOuC,MAAMuF,UAAU6E,GAAIC,2BCnpB3C,WACE,YASA,SAASxL,SAAQsD,UAAWjB,QAASoJ,mBACnC5M,KAAKyE,UAAYA,UACjBzE,KAAK6M,SAAWrJ,QAChBxD,KAAK8M,mBAAoB,EACzB9M,KAAK+M,oBAAqB,EAC1B/M,KAAK6E,UAAYmI,MAAQC,MAAQC,QAEK,kBAA3BN,mBAAkB/M,MAE3BC,QAAQC,OAAOC,KAAM4M,mBACrB5M,KAAKkC,GAAKlC,KAAK2E,gBACf3E,KAAKmN,wBAILnN,KAAKgG,QAAQ4G,mBAEf5M,KAAKyI,UAAW,EAQlBtH,QAAQN,UAAY,KAAM,WAAY,OAAQ,OAAQ,aAAc,WAAY,WAAY,cAAe,SAASC,GAAIC,SAAUP,KAAM4M,KAAMpM,SAAUqM,SAAUpM,SAAUiF,aAgB1K,MAfApG,SAAQC,OAAOoB,SACbL,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACN4M,KAAMA,KACNE,UAAWD,SACXjM,WAAY,GAAIH,UAASD,SAASM,WAAW,aAAe,OAAQN,SAASM,gBAG/E4E,YAAYS,QAAQ9G,KAAK,WACnBqG,YAAYoD,SAASiE,uBACvBpM,QAAQqM,MAAQtH,YAAYoD,SAASiE,wBAIlCpM,SAOT,KACErB,QAAQ2B,OAAO,iBAEjB,MAAMC,GACJ5B,QAAQ2B,OAAO,iBAAkB,gBAEnC3B,QAAQ2B,OAAO,iBACZE,QAAQ,UAAWR,QAAQN,UAS9BM,QAAQsM,WAAa,SAASC,OAC5B,GAAIC,IAAK,GAAIC,QAAOF,MAAO,IAC3B,OAAOzN,GAAEuI,OAAOvI,EAAE4N,KAAK1M,QAAQqM,OAAQ,SAASM,KAC9C,GAAIhC,OAAQ3K,QAAQqM,MAAMM,IAC1B,OAA8B,IAAvBhC,MAAM,GAAGiC,OAAOJ,OAU3BxM,QAAQgB,UAAUwC,cAAgB,SAAStC,SACzC,GAAIyB,KAaJ,OAXAA,MAAO7D,EAAEsH,IAAIvH,KAAK6M,SAAS/I,KAAK0D,MAAM,KAAM,SAASC,WACnD,MAAO,SAAWA,UAAUC,oBAE9B5D,KAAK2B,OAAO,EAAG,EAAGzF,KAAKyE,WACnBpC,SAAWA,QAAQuC,SAAW5E,KAAKgO,QACrClK,KAAKZ,KAAKlD,KAAKgO,SAGflK,KAAKZ,KAAKlD,KAAKiF,KAGVnB,KAAK6D,KAAK,MASnBxG,QAAQgB,UAAU8L,QAAU,SAAShJ,KACnC,GAAIiJ,QAASlO,KAAKiF,KAAO,EAErBiJ,SAAUjJ,MACZjF,KAAKiF,IAAMA,IACXjF,KAAKkC,GAAKlC,KAAK2E,gBACXuJ,OAAS,IAAMlO,KAAK6M,SAAS/E,QAAQoG,UACvClO,KAAK6M,SAAS/E,QAAQ7C,KAAOjF,KAAK6M,SAAS/E,QAAQoG,QACnDlO,KAAK6M,SAAS/E,QAAQoG,QAAU,QAUtC/M,QAAQgB,UAAUgL,qBAAuB,WACvC,GAAI7K,OAAQtC,IAGZC,GAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASqD,MACvDtD,EAAEC,KAAKoC,MAAMiB,MAAO,SAAS1B,KAAMI,GAC7BJ,KAAKmC,MAAQnC,KAAKmC,MAAQnC,KAAKtB,MACjCsB,KAAKvB,KAAOuB,KAAKmC,KAAO,KAAOnC,KAAKtB,MAAQ,IAE5CsB,KAAKvB,KAAO,IAAMuB,KAAKtB,MAAQ,SAWvCY,QAAQgB,UAAUgM,cAAgB,SAAS5K,MACzC,GAAI6K,SAAU,EAKd,OAJIpO,MAAKuD,OAASvD,KAAKuD,MAAMH,OAAS,IACpCgL,QAAUpO,KAAKuD,MAAM,GAAGS,MAAQhE,KAAKuD,MAAM,GAAGhD,OAAS,IAGlD6N,SAQTjN,QAAQgB,UAAUkM,kBAAoB,WACpCrO,KAAK+M,oBAAqB,GAS5B5L,QAAQgB,UAAUmM,SAAW,WAC3B,GAAIhM,OAAQtC,KACRuO,SACAvL,OAAS,SAASwL,MAChBA,KAAKC,SAAW,uBACC,gCAAbD,KAAKjL,KACPP,OAAO/C,EAAEyD,KAAK8K,KAAKE,QAAS,SAASC,eACnC,MAAOH,MAAKI,eAAiBD,cAAcE,eAItC/O,QAAQgP,QAAQN,KAAKE,SAC5BzO,EAAEC,KAAKsO,KAAKE,QAAS,SAASK,WAC5B/L,OAAO+L,cAILjP,QAAQqI,YAAYqG,KAAKQ,eAE3BR,KAAKQ,YAAcR,KAAKE,QACxBpM,MAAMwK,kBAAqB0B,KAAKQ,YAAY9J,QAAQ,YAAc,IAEnD,yBAAbsJ,KAAKjL,MACPiL,KAAKS,MAAO,EACR3M,MAAMyK,oBACJjN,QAAQqI,YAAYqG,KAAKU,iBAC3BV,KAAKU,cAAgBC,SAASC,cAAc,OAC5CZ,KAAKU,cAAcG,UAAYb,KAAKQ,YACpClP,QAAQiC,SAAS,MAAO,OAAQ,UAAW,aAAc,SAAU,SAASuN,QAC1E,GACIC,SACAzD,MACA7J,EAHAuN,SAAWhB,KAAKU,cAAcO,iBAAiB,WAAaH,OAAS,IAIzE,KAAKrN,EAAI,EAAGA,EAAIuN,SAASpM,OAAQnB,IAC/BsN,QAAUzP,QAAQyP,QAAQC,SAASvN,IACnC6J,MAAQyD,QAAQG,KAAK,UAAYJ,QACjCC,QAAQG,KAAKJ,OAAQxD,OACrByD,QAAQI,WAAW,UAAYL,WAIrCd,KAAKE,QAAUvN,QAAQiM,KAAKwC,QAAQ,OAAQpB,KAAKU,cAAcG,YAG/Db,KAAKE,QAAUvN,QAAQiM,KAAKwC,QAAQ,OAAQpB,KAAKQ,aAEnDT,MAAMrL,KAAKsL,OAES,yBAAbA,KAAKjL,MACQ,0BAAbiL,KAAKjL,MACQ,yBAAbiL,KAAKjL,MAGRiL,KAAKqB,cACP5P,EAAEC,KAAKsO,KAAKqB,aAAc,SAASC,aACjCA,YAAYC,MAAQ5O,QAAQmM,UAAUwC,YAAYvP,MAAO,MAI5C,0BAAbiO,KAAKjL,OACPiL,KAAKC,SAAW,wBAGlBD,KAAKwB,SAAU,EACfzB,MAAMrL,KAAKsL,QAGXA,KAAKS,MAAO,EACZT,KAAKE,QAAUvN,QAAQiM,KAAKwC,QAAQ,OAAQpB,KAAKQ,aACjDT,MAAMrL,KAAKsL,QAMrB,OAFAxL,QAAOhD,KAAKuO,OAELA,OAUTpN,QAAQgB,UAAU8N,iBAAmB,WACnC,GAAI3N,OAAQtC,IAEZ,OAAOmB,SAAQC,WAAWkD,MAAMtE,KAAKkC,GAAI,QAAQrC,KAAK,SAASgC,MAE7D,MADA/B,SAAQC,OAAOuC,MAAOT,MACfV,QAAQC,WAAWkD,MAAMhC,MAAMqC,eAAeC,SAAS,IAAQ,QAAQ/E,KAAK,SAASgC,MAG1F,MAFAV,SAAQX,KAAKC,MAAM,cAAgBC,KAAKC,UAAUkB,KAAMjB,OAAW,IACnEd,QAAQC,OAAOuC,MAAMuC,SAAUhD,MACxBA,KAAKqO,UAYlB/O,QAAQgB,UAAUgO,OAAS,SAASrC,KAClC,MAAO9N,MAAKoQ,gBAAgB,MAAOtC,MAUrC3M,QAAQgB,UAAUkO,UAAY,SAASvC,KACrC,MAAO9N,MAAKoQ,gBAAgB,SAAUtC,MAWxC3M,QAAQgB,UAAUiO,gBAAkB,SAAS/E,UAAWyC,KACtD,GAAIjM,OACFwJ,UAAWA,UACXC,SAAUtL,KAAKiF,KACfmG,MAAO0C,IAGT,OAAIA,KACK3M,QAAQC,WAAW6C,KAAKjE,KAAK6M,SAAS9E,MAAO,mBAAoBlG,MAD1E,QAYFV,QAAQgB,UAAUmO,YAAc,SAASxM,KAAMyM,OAAQ1O,MACrD,GAAIS,OAAQtC,IACZmB,SAAQC,WAAW6C,MAAMjE,KAAKkC,GAAI4B,MAAM6D,KAAK,KAAM4I,OAAQ1O,MAAMhC,KAAK,SAASgC,MAC7EV,QAAQJ,SAAS,WACfuB,MAAMkO,WACL,iBAWPrP,QAAQgB,UAAUsO,SAAW,WAE3B,MADAzQ,MAAK0Q,iBAAmB,EACjBvP,QAAQC,WAAW6C,KAAKjE,KAAKkC,GAAI,YAS1Cf,QAAQgB,UAAUwO,kBAAoB,SAASC,UAC7C,GAAIL,QAAS,6BAA+BK,SACxCtO,MAAQtC,IACZmB,SAAQC,WAAW6C,KAAKjE,KAAK2E,eAAeC,SAAS,IAAQ2L,QAAQ1Q,KAAK,SAASgC,MACjFV,QAAQJ,SAAS,WACfuB,MAAMuC,SAASgM,gBAAkB5Q,EAAEuI,OAAOlG,MAAMuC,SAASgM,gBAAiB,SAASC,YACjF,MAAOA,YAAWF,UAAYA,YAE/B,iBAYPzP,QAAQgB,UAAU4O,WAAa,WAC7B,GAAIzO,OAAQtC,KACRuQ,OAAS,oBAKb,OAHIvQ,MAAKgR,YACPT,OAAS,wBAEJpP,QAAQC,WAAW6C,KAAKjE,KAAKkC,GAAIqO,QAAQ1Q,KAAK,SAASgC,MAC5DV,QAAQJ,SAAS,WACfuB,MAAM0O,WAAa1O,MAAM0O,eAW/B7P,QAAQgB,UAAUqO,QAAU,WAC1B,GAAI5D,kBAIJ,OAFAA,mBAAoBzL,QAAQC,WAAWkD,MAAMtE,KAAKkC,GAAI,QAE/ClC,KAAKgG,QAAQ4G,oBAStBzL,QAAQgB,UAAU8O,OAAS,WACzB,MAAOjR,MAAKkR,UAAU,UASxB/P,QAAQgB,UAAUgP,UAAY,WAC5B,MAAOnR,MAAKkR,UAAU,aASxB/P,QAAQgB,UAAUiP,SAAW,WAC3B,MAAOpR,MAAKkR,UAAU,YAgBxB/P,QAAQgB,UAAU+O,UAAY,SAASX,QACrC,GAAIjO,OAAQtC,IAGZ,OAAOmB,SAAQC,WAAWkD,MAAMtE,KAAKkC,GAAIqO,QAAQ1Q,KAAK,SAASgC,MAC7D,GAAI2B,SAASgB,OAKb,OAJArD,SAAQX,KAAKC,MAAM,OAAS8P,OAAS,KAAO7P,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5E4C,QAAUlB,MAAMuK,SAASjH,SAAS/B,kBAAkBhC,KAAK6C,aACzDF,QAAU,GAAIrD,SAAQU,KAAK4C,UAAWjB,QAAS3B,MAExCV,QAAQC,WAAWkD,MAAME,QAAQG,eAAeC,SAAS,IAAQ,QAAQ/E,KAAK,SAASgC,MAG5F,MAFAV,SAAQX,KAAKC,MAAM,OAAS8P,OAAS,KAAO7P,KAAKC,UAAUkB,KAAMjB,OAAW,IAC5Ed,QAAQC,OAAOyE,QAAQK,SAAUhD,MAC1B2C,aAWbrD,QAAQgB,UAAUyI,MAAQ,WACxB,GAAItI,OAAQtC,KACR6B,KAAO7B,KAAK6E,QAIhB,OAFA1D,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUkB,KAAMjB,OAAW,IAExDO,QAAQC,WAAW4K,KAAKhM,KAAK2E,eAAeC,SAAS,IAAQ/C,MAAMhC,KAAK,SAASqE,UACtF/C,QAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUuD,SAAUtD,OAAW,IACnE0B,MAAM2L,QAAQ/J,SAASe,KACvB3C,MAAMkO,aAUVrP,QAAQgB,UAAUkP,MAAQ,WACxB,GAAIxP,MAAO/B,QAAQsJ,KAAKpJ,KAAK6E,UACzBtC,SAAWpB,QAAQL,GAAG0B,OAa1B,OAXArB,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUkB,KAAMjB,OAAW,IAE/DO,QAAQC,WAAW6C,KAAKjE,KAAK2E,eAAeC,SAAS,IAAQ,OAAQ/C,MAAMhC,KAAK,SAASgC,MACpE,WAAfA,KAAKyD,OACP/C,SAASM,QAAQhB,MAGjBU,SAAS4B,OAAOtC,QAIbU,SAASO,SASlB3B,QAAQgB,UAAU6D,QAAU,SAAS4G,mBACnC,GAAItK,OAAQtC,KACRuC,SAAWpB,QAAQL,GAAG0B,OA8B1B,OA3BAxC,MAAKsR,mBAAqB1E,kBAG1B5M,KAAKsR,mBAAmBzR,KAAK,SAASgC,MAEpCV,QAAQJ,SAAS,WACfjB,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMJ,GAAKI,MAAMqC,gBACjBrC,MAAM6K,uBACN7K,MAAMyK,oBAAqB,EAC3BxK,SAASM,QAAQP,SAEdA,MAAMiP,QACTpQ,QAAQC,WAAWkD,MAAMhC,MAAMJ,GAAI,mBAAmBrC,KAAK,WACzDsB,QAAQJ,SAAS,WACfuB,MAAMiP,QAAS,EACfjP,MAAMuK,SAAS/D,mBAIpB,SAASjH,MACV/B,QAAQC,OAAOuC,MAAOT,MACtBS,MAAMmK,SAAU,EAChBtL,QAAQX,KAAK4D,MAAM9B,MAAM8B,OACzB7B,SAAS4B,WAGJ5B,SAASO,SASlB3B,QAAQgB,UAAUkG,MAAQ,WACxB,GAAI7D,WAcJ,OAbA1E,SAAQiC,QAAQ/B,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,KAC9BvH,QAAQuH,KAAOD,SAKnB7L,EAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASqD,MACnDiB,QAAQjB,QACViB,QAAQjB,MAAQtD,EAAEkM,OAAO3H,QAAQjB,MAAMiE,MAAM,KAAM,WAIhDhD","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 deferred = Account.$q.defer();\n\n Account.$$resource.post(path, 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n deferred.resolve();\n }, function(response) {\n deferred.reject(response.error);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $newMessage\n * @memberof Account.prototype\n * @desc Prepare a new Message object associated to the appropriate mailbox.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMessage = function() {\n var _this = this;\n\n // Query account for draft folder and draft UID\n return Account.$$resource.fetch(this.id.toString(), 'compose').then(function(data) {\n Account.$log.debug('New message (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 $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 deferred = Mailbox.$q.defer(),\n promise;\n\n promise = Mailbox.$$resource.post(this.id, 'emptyTrash');\n\n promise.then(function() {\n // Remove all messages from the mailbox\n _this.$messages = [];\n _this.uidsMap = {};\n _this.unseenCount = 0;\n }, function(data, status) {\n deferred.reject(data);\n });\n\n return deferred.promise;\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.editable = {to: [], cc: [], bcc: []};\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n angular.extend(this, futureMessageData);\n this.id = this.$absolutePath();\n this.$formatFullAddresses();\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\n this.selected = false;\n }\n\n /**\n * @memberof Message\n * @desc The factory we'll use to register with Angular\n * @returns the Message constructor\n */\n Message.$factory = ['$q', '$timeout', '$log', '$sce', 'sgSettings', 'Gravatar', 'Resource', 'Preferences', function($q, $timeout, $log, $sce, Settings, Gravatar, Resource, Preferences) {\n angular.extend(Message, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $sce: $sce,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser())\n });\n // Initialize tags form user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailLabelsColors) {\n Message.$tags = Preferences.defaults.SOGoMailLabelsColors;\n }\n });\n\n return Message; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Message in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Message', Message.$factory);\n\n /**\n * @function filterTags\n * @memberof Message.prototype\n * @desc Search for tags (ie., mail labels) matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Message.filterTags = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Message.$tags), function(tag) {\n var value = Message.$tags[tag];\n return value[0].search(re) != -1;\n });\n };\n\n /**\n * @function $absolutePath\n * @memberof Message.prototype\n * @desc Build the path of the message\n * @returns a string representing the path relative to the mail module\n */\n Message.prototype.$absolutePath = function(options) {\n var path;\n\n path = _.map(this.$mailbox.path.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n path.splice(0, 0, this.accountId); // insert account ID\n if (options && options.asDraft && this.draftId) {\n path.push(this.draftId); // add draft ID\n }\n else {\n path.push(this.uid); // add message UID\n }\n\n return path.join('/');\n };\n\n /**\n * @function $setUID\n * @memberof Message.prototype\n * @desc Change the UID of the message. This happens when saving a draft.\n * @param {number} uid - the new message UID\n */\n Message.prototype.$setUID = function(uid) {\n var oldUID = this.uid || -1;\n\n if (oldUID != uid) {\n this.uid = uid;\n this.id = this.$absolutePath();\n if (oldUID > -1 && this.$mailbox.uidsMap[oldUID]) {\n this.$mailbox.uidsMap[uid] = this.$mailbox.uidsMap[oldUID];\n this.$mailbox.uidsMap[oldUID] = null;\n }\n }\n };\n\n /**\n * @function $formatFullAddresses\n * @memberof Message.prototype\n * @desc Format all sender and recipients addresses with a complete description (name ).\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n\n // Build long representation of email addresses\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n _.each(_this[type], function(data, i) {\n if (data.name && data.name != data.email)\n data.full = data.name + ' <' + data.email + '>';\n else\n data.full = '<' + data.email + '>';\n });\n });\n };\n\n /**\n * @function $shortAddress\n * @memberof Message.prototype\n * @desc Format the first address of a specific type with a short description.\n * @returns a string of the name or the email of the envelope address type\n */\n Message.prototype.$shortAddress = function(type) {\n var address = '';\n if (this[type] && this[type].length > 0) {\n address = this[type][0].name || this[type][0].email || '';\n }\n\n return address;\n };\n\n /**\n * @function loadUnsafeContent\n * @memberof Message.prototype\n * @desc Mark the message to load unsafe resources when calling $content().\n */\n Message.prototype.loadUnsafeContent = function() {\n this.$loadUnsafeContent = true;\n };\n\n /**\n * @function $content\n * @memberof Message.prototype\n * @desc Get the message body as accepted by SCE (Angular Strict Contextual Escaping).\n * @returns the HTML representation of the body\n */\n Message.prototype.$content = function() {\n var _this = this,\n parts = [],\n _visit = function(part) {\n 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 diff --git a/UI/WebServerResources/js/Main.js b/UI/WebServerResources/js/Main.js index d71544f7c..4e9342652 100644 --- a/UI/WebServerResources/js/Main.js +++ b/UI/WebServerResources/js/Main.js @@ -1,2 +1,2 @@ -!function(){"use strict";function loginController($scope,$mdDialog,Authentication){$scope.warning=!1,$scope.creds={username:cookieUsername,password:null},$scope.login=function(creds){return $scope.warning=!1,Authentication.login(creds).then(function(url){window.location.href=url},function(msg){$scope.warning=msg.error}),!1},$scope.showAbout=function($event){function AboutDialogController(scope,$mdDialog){scope.closeDialog=function(){$mdDialog.hide()}}$mdDialog.show({targetEvent:$event,templateUrl:"aboutBox.html",controller:AboutDialogController}),AboutDialogController.$inject=["scope","$mdDialog"]}}angular.module("SOGo.MainUI",["SOGo.Common","SOGo.Authentication"]).controller("loginController",loginController),loginController.$inject=["$scope","$mdDialog","Authentication"]}(); +!function(){"use strict";function LoginController($scope,Dialog,$mdDialog,Authentication){function login(){return Authentication.login(vm.creds).then(function(url){window.location.href=url},function(msg){Dialog.alert(l("Authentication Failed"),msg.error)}),!1}function showAbout($event){function AboutDialogController($mdDialog){this.closeDialog=function(){$mdDialog.hide()}}$mdDialog.show({targetEvent:$event,templateUrl:"aboutBox.html",controller:AboutDialogController,controllerAs:"about"}),AboutDialogController.$inject=["$mdDialog"]}var vm=this;vm.creds={username:cookieUsername,password:null},vm.login=login,vm.showAbout=showAbout}angular.module("SOGo.MainUI",["SOGo.Common","SOGo.Authentication"]),LoginController.$inject=["$scope","Dialog","$mdDialog","Authentication"],angular.module("SOGo.MainUI").controller("LoginController",LoginController)}(); //# sourceMappingURL=Main.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Main.js.map b/UI/WebServerResources/js/Main.js.map index bf4c1e6ab..ab630d437 100644 --- a/UI/WebServerResources/js/Main.js.map +++ b/UI/WebServerResources/js/Main.js.map @@ -1 +1 @@ -{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["loginController","$scope","$mdDialog","Authentication","warning","creds","username","cookieUsername","password","login","then","url","window","location","href","msg","error","showAbout","$event","AboutDialogController","scope","closeDialog","hide","show","targetEvent","templateUrl","controller","$inject","angular","module"],"mappings":"CAGA,WACE,YAMA,SAASA,iBAAgBC,OAAQC,UAAWC,gBAC1CF,OAAOG,SAAU,EACjBH,OAAOI,OAAUC,SAAUC,eAAgBC,SAAU,MACrDP,OAAOQ,MAAQ,SAASJ,OAQtB,MAPAJ,QAAOG,SAAU,EACjBD,eAAeM,MAAMJ,OAClBK,KAAK,SAASC,KACbC,OAAOC,SAASC,KAAOH,KACtB,SAASI,KACVd,OAAOG,QAAUW,IAAIC,SAElB,GAETf,OAAOgB,UAAY,SAASC,QAO1B,QAASC,uBAAsBC,MAAOlB,WACpCkB,MAAMC,YAAc,WAClBnB,UAAUoB,QARdpB,UAAUqB,MACRC,YAAaN,OACbO,YAAa,gBACbC,WAAYP,wBAEdA,sBAAsBQ,SAAW,QAAS,cAvB9CC,QAAQC,OAAO,eAAgB,cAAe,wBAC3CH,WAAW,kBAAmB1B,iBAEjCA,gBAAgB2B,SAAW,SAAU,YAAa","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for MainUI (SOGoRootPage) */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication'])\n .controller('loginController', loginController);\n\n loginController.$inject = ['$scope', '$mdDialog', 'Authentication'];\n function loginController($scope, $mdDialog, Authentication) {\n $scope.warning = false;\n $scope.creds = { username: cookieUsername, password: null };\n $scope.login = function(creds) {\n $scope.warning = false;\n Authentication.login(creds)\n .then(function(url) {\n window.location.href = url;\n }, function(msg) {\n $scope.warning = msg.error;\n });\n return false;\n };\n $scope.showAbout = function($event) {\n $mdDialog.show({\n targetEvent: $event,\n templateUrl: 'aboutBox.html',\n controller: AboutDialogController\n });\n AboutDialogController.$inject = ['scope', '$mdDialog'];\n function AboutDialogController(scope, $mdDialog) {\n scope.closeDialog = function() {\n $mdDialog.hide();\n };\n }\n };\n }\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["LoginController","$scope","Dialog","$mdDialog","Authentication","login","vm","creds","then","url","window","location","href","msg","alert","l","error","showAbout","$event","AboutDialogController","this","closeDialog","hide","show","targetEvent","templateUrl","controller","controllerAs","$inject","username","cookieUsername","password","angular","module"],"mappings":"CAGA,WACE,YAQA,SAASA,iBAAgBC,OAAQC,OAAQC,UAAWC,gBAOlD,QAASC,SAOP,MANAD,gBAAeC,MAAMC,GAAGC,OACrBC,KAAK,SAASC,KACbC,OAAOC,SAASC,KAAOH,KACtB,SAASI,KACVX,OAAOY,MAAMC,EAAE,yBAA0BF,IAAIG,UAE1C,EAGT,QAASC,WAAUC,QAQjB,QAASC,uBAAsBhB,WAC7BiB,KAAKC,YAAc,WACjBlB,UAAUmB,QATdnB,UAAUoB,MACRC,YAAaN,OACbO,YAAa,gBACbC,WAAYP,sBACZQ,aAAc,UAEhBR,sBAAsBS,SAAW,aAvBnC,GAAItB,IAAKc,IAETd,IAAGC,OAAUsB,SAAUC,eAAgBC,SAAU,MACjDzB,GAAGD,MAAQA,MACXC,GAAGW,UAAYA,UAXjBe,QAAQC,OAAO,eAAgB,cAAe,wBAK9CjC,gBAAgB4B,SAAW,SAAU,SAAU,YAAa,kBAkC5DI,QACGC,OAAO,eACPP,WAAW,kBAAmB1B","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for MainUI (SOGoRootPage) */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication']);\n\n /**\n * @ngInject\n */\n LoginController.$inject = ['$scope', 'Dialog', '$mdDialog', 'Authentication'];\n function LoginController($scope, Dialog, $mdDialog, Authentication) {\n var vm = this;\n\n vm.creds = { username: cookieUsername, password: null };\n vm.login = login;\n vm.showAbout = showAbout;\n\n function login() {\n Authentication.login(vm.creds)\n .then(function(url) {\n window.location.href = url;\n }, function(msg) {\n Dialog.alert(l('Authentication Failed'), msg.error);\n });\n return false;\n }\n\n function showAbout($event) {\n $mdDialog.show({\n targetEvent: $event,\n templateUrl: 'aboutBox.html',\n controller: AboutDialogController,\n controllerAs: 'about'\n });\n AboutDialogController.$inject = ['$mdDialog'];\n function AboutDialogController($mdDialog) {\n this.closeDialog = function() {\n $mdDialog.hide();\n };\n }\n }\n }\n\n angular\n .module('SOGo.MainUI')\n .controller('LoginController', LoginController);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.js b/UI/WebServerResources/js/Scheduler.js index 08ade441f..9627f9bcf 100644 --- a/UI/WebServerResources/js/Scheduler.js +++ b/UI/WebServerResources/js/Scheduler.js @@ -1,2 +1,2 @@ -!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainFrame",controller:"CalendarsController",controllerAs:"calendars"}},resolve:{stateCalendars:stateCalendars}}).state("calendars.view",{url:"/{view:(?:day|week|month)}/:day",sticky:!0,deepStateRedirect:!0,views:{calendarView:{templateUrl:function($stateParams){return $stateParams.view+"view?day="+$stateParams.day},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:stateEventsBlocks}}),$urlRouterProvider.when("/calendar/day",function(){var now=new Date;return"/calendar/day/"+now.getDayString()}),$urlRouterProvider.when("/calendar/week",function(){var now=new Date;return"/calendar/week/"+now.getDayString()}),$urlRouterProvider.when("/calendar/month",function(){var now=new Date;return"/calendar/month/"+now.getDayString()}),$urlRouterProvider.otherwise("/calendar")}function stateCalendars(Calendar){return Calendar.$calendars||Calendar.$findAll(window.calendarsData)}function stateEventsBlocks($stateParams,Component){return Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate())}function runBlock($rootScope,$location,Preferences){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)}),0===$location.url().length&&Preferences.ready().then(function(){var view=/(.+)view/.exec(Preferences.settings.Calendar.View);view&&$location.replace().url("/calendar/"+view[1])})}angular.module("SOGo.SchedulerUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateCalendars.$inject=["Calendar"],stateEventsBlocks.$inject=["$stateParams","Component"],runBlock.$inject=["$rootScope","$location","Preferences"]}(),function(){"use strict";function CalendarController($scope,$state,$stateParams,$timeout,$interval,$log,focus,Calendar,Component,stateEventsBlocks){function changeView($event){var date=angular.element($event.currentTarget).attr("date");$state.go("calendars.view",{view:$stateParams.view,day:date})}var vm=this;vm.blocks=stateEventsBlocks,vm.changeView=changeView,$scope.$on("calendars:list",function(){Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(data){vm.blocks=data})})}CalendarController.$inject=["$scope","$state","$stateParams","$timeout","$interval","$log","sgFocus","Calendar","Component","stateEventsBlocks"],angular.module("SOGo.SchedulerUI").controller("CalendarController",CalendarController)}(),function(){"use strict";function CalendarListController($scope,$timeout,$state,$mdDialog,encodeUriFilter,Dialog,Preferences,Calendar,Component){function selectComponentType(type,options){(options&&options.reload||vm.componentType!=type)&&(angular.isUndefined(Component["$"+type])&&Component.$filter(type),vm.componentType=type)}function openEvent($event,event){openComponent($event,event,"appointment")}function openTask($event,task){openComponent($event,task,"task")}function openComponent($event,component,type){var templateUrl="UIx"+type.capitalize()+"ViewTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentController",controllerAs:"editor",locals:{stateComponent:component}})}function newComponent($event){var component,type="appointment";"tasks"==vm.componentType&&(type="task"),component=new Component({pid:"personal",type:type});var templateUrl="UIx"+type.capitalize()+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:component}})}function filter(filterpopup){Component.$filter(vm.componentType,{filterpopup:filterpopup})}function filteredBy(filterpopup){return Component["$query"+vm.componentType.capitalize()].filterpopup==filterpopup}function sort(field){Component.$filter(vm.componentType,{sort:field})}function sortedBy(field){return Component["$query"+vm.componentType.capitalize()].sort==field}function cancelSearch(){vm.mode.search=!1,Component.$filter(vm.componentType,{value:""})}var vm=this;vm.component=Component,vm.componentType="events",vm.selectedList=0,vm.selectComponentType=selectComponentType,vm.openEvent=openEvent,vm.openTask=openTask,vm.newComponent=newComponent,vm.filter=filter,vm.filteredBy=filteredBy,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1},Preferences.ready().then(function(){var type="events";"tasksListView"==Preferences.settings.Calendar.SelectedList&&(vm.selectedList=1,type="tasks"),selectComponentType(type,{reload:!0})}),$scope.$on("calendars:list",function(){Component.$filter(vm.componentType,{reload:!0})})}CalendarListController.$inject=["$scope","$timeout","$state","$mdDialog","encodeUriFilter","Dialog","Preferences","Calendar","Component"],angular.module("SOGo.SchedulerUI").controller("CalendarListController",CalendarListController)}(),function(){"use strict";function CalendarsController($scope,$rootScope,$stateParams,$state,$timeout,$q,$mdDialog,$log,focus,encodeUriFilter,Dialog,Settings,Calendar,User,stateCalendars){function newCalendar(ev){Dialog.prompt(l("New calendar"),l("Name of the Calendar")).then(function(name){var calendar=new Calendar({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});Calendar.$add(calendar)})}function addWebCalendar(){Dialog.prompt(l("Subscribe to a web calendar..."),l("URL of the Calendar"),{inputType:"url"}).then(function(url){Calendar.$addWebCalendar(url)})}function confirmDelete(folder){folder.isSubscription?folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",folder.name)).then(function(){folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))})})}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function showProperties(calendar){function PropertiesDialogController($mdDialog,calendar){function saveProperties(){vm.calendar.$save(),calendar.init(vm.calendar.$omit()),$mdDialog.hide()}function close(){$mdDialog.hide()}var vm=this;vm.calendar=new Calendar(calendar.$omit()),vm.saveProperties=saveProperties,vm.close=close}$mdDialog.show({templateUrl:calendar.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:!0,escapeToClose:!0,locals:{calendar:calendar}}),PropertiesDialogController.$inject=["$mdDialog","calendar"]}function share(calendar){calendar.$acl.$users().then(function(){$mdDialog.show({templateUrl:calendar.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:calendar.$acl.users,User:User,folder:calendar}})})}function subscribeToFolder(calendarData){$log.debug("subscribeToFolder "+calendarData.owner+calendarData.name),Calendar.$subscribe(calendarData.owner,calendarData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=Calendar,vm.newCalendar=newCalendar,vm.addWebCalendar=addWebCalendar,vm.confirmDelete=confirmDelete,vm.share=share,vm.showLinks=showLinks,vm.showProperties=showProperties,vm.subscribeToFolder=subscribeToFolder,$scope.$watch(function(){return _.union(_.map(Calendar.$calendars,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$subscriptions,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$webcalendars,function(o){return _.pick(o,["id","active","color"])}))},function(newList,oldList){var ids=_.pluck(_.filter(newList,function(o,i){return!_.isEqual(o,oldList[i])}),"id");ids.length>0&&($log.debug(ids.join(", ")+" changed"),_.each(ids,function(id){var calendar=Calendar.$get(id);calendar.$setActivation().then(function(){$scope.$broadcast("calendars:list")})}))},!0)}CalendarsController.$inject=["$scope","$rootScope","$stateParams","$state","$timeout","$q","$mdDialog","$log","sgFocus","encodeUriFilter","Dialog","sgSettings","Calendar","User","stateCalendars"],angular.module("SOGo.SchedulerUI").controller("CalendarsController",CalendarsController)}(),function(){"use strict";function ComponentController($rootScope,$mdDialog,Calendar,AddressBook,Alarm,stateComponent){function close(){$mdDialog.hide()}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function edit(){var type="vevent"==vm.component.component?"Appointment":"Task";$mdDialog.hide().then(function(){var templateUrl="UIx"+type+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:vm.component}})})}function editAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){vm.component=component,edit()})}function reply(component){var c=component||vm.component;c.$reply().then(function(){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()})}function replyAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){component.reply=vm.component.reply,component.delegatedTo=vm.component.delegatedTo,component.$hasAlarm=vm.component.$hasAlarm,component.alarm=vm.component.alarm,reply(component)})}var component,vm=this;vm.component=stateComponent,vm.close=close,vm.cardFilter=cardFilter,vm.edit=edit,vm.editAllOccurrences=editAllOccurrences,vm.reply=reply,vm.replyAllOccurrences=replyAllOccurrences,angular.isUndefined(vm.component.$futureComponentData)&&(component=Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name,vm.component.c_recurrence_id),component.$futureComponentData.then(function(){vm.component=component,vm.organizer=[vm.component.organizer]}))}function ComponentEditorController($rootScope,$scope,$log,$timeout,$mdDialog,User,Calendar,Component,AddressBook,Card,Alarm,stateComponent){function addAttachUrl(){var i=vm.component.addAttachUrl("");focus("attachUrl_"+i)}function toggleRecurrenceEditor(){vm.showRecurrenceEditor=!vm.showRecurrenceEditor,vm.component.$hasCustomRepeat=vm.showRecurrenceEditor}function toggleAttendeesEditor(){vm.showAttendeesEditor=!vm.showAttendeesEditor}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function addAttendee(card){angular.isString(card)?card.isValidEmail()&&(vm.component.addAttendee(new Card({emails:[{value:card}]})),vm.searchText=""):vm.component.addAttendee(card)}function save(form){form.$valid&&vm.component.$save().then(function(data){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()},function(data,status){$log.debug("failed")})}function cancel(){vm.component.$reset(),vm.component.isNew&&(vm.component=null),$mdDialog.hide()}function getDays(){var days=[];return vm.component.start&&vm.component.end&&(days=vm.component.start.daysUpTo(vm.component.end)),_.map(days,function(date){return{stringWithSeparator:date.stringWithSeparator(),getDayString:date.getDayString()}})}function getHours(){for(var hours=[],i=0;23>=i;i++)hours.push(i.toString());return hours}var vm=this;vm.calendars=Calendar.$calendars,vm.component=stateComponent,vm.categories={},vm.showRecurrenceEditor=vm.component.$hasCustomRepeat,vm.toggleRecurrenceEditor=toggleRecurrenceEditor,vm.showAttendeesEditor=angular.isDefined(vm.component.attendees),vm.toggleAttendeesEditor=toggleAttendeesEditor,vm.cardFilter=cardFilter,vm.addAttendee=addAttendee,vm.addAttachUrl=addAttachUrl,vm.cancel=cancel,vm.save=save,vm.attendeesEditor={startDate:vm.component.startDate,endDate:vm.component.endDate,days:getDays(),hours:getHours()},$scope.$watch("editor.component.startDate",function(newStartDate,oldStartDate){newStartDate&&$timeout(function(){vm.component.start=new Date(newStartDate.substring(0,10)+" "+newStartDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})}),$scope.$watch("editor.component.endDate",function(newEndDate,oldEndDate){newEndDate&&$timeout(function(){vm.component.end=new Date(newEndDate.substring(0,10)+" "+newEndDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})})}ComponentController.$inject=["$rootScope","$mdDialog","Calendar","AddressBook","Alarm","stateComponent"],ComponentEditorController.$inject=["$rootScope","$scope","$log","$timeout","$mdDialog","User","Calendar","Component","AddressBook","Card","Alarm","stateComponent"],angular.module("SOGo.SchedulerUI").controller("ComponentController",ComponentController).controller("ComponentEditorController",ComponentEditorController)}(),function(){"use strict";function sgCalendarDayBlock(){function link(scope,iElement,attrs){var pc=100/scope.block.siblings,left=scope.block.position*pc,right=100-(scope.block.position+1)*pc;100>pc&&(left>0&&(left-=5),right>0&&(right-=5)),iElement.css("left",left+"%"),iElement.css("right",right+"%"),iElement.addClass("starts"+scope.block.start),iElement.addClass("lasts"+scope.block.length),iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:!0,template:['
','
','
',"
",'
{{ block.component.c_title }}',' ',' ',' ',' ',"
","
",'
','
',"
"].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayBlock",sgCalendarDayBlock)}(),function(){"use strict";function sgCalendarDayTable(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[''].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayTable",sgCalendarDayTable)}(),function(){"use strict";function sgCalendarMonthDay(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay"},replace:!0,template:["'].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthDay",sgCalendarMonthDay)}(),function(){"use strict";function sgCalendarMonthEvent(){function link(scope,iElement,attrs){iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock"},replace:!0,template:['
',' {{ block.starthour }} - '," {{ block.component.c_title }}",' ',' ',' ',' '," ",'
','
',"
",""].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthEvent",sgCalendarMonthEvent)}(); +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainFrame",controller:"CalendarsController",controllerAs:"calendars"}},resolve:{stateCalendars:stateCalendars}}).state("calendars.view",{url:"/{view:(?:day|week|month)}/:day",sticky:!0,deepStateRedirect:!0,views:{calendarView:{templateUrl:function($stateParams){return $stateParams.view+"view?day="+$stateParams.day},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:stateEventsBlocks}}),$urlRouterProvider.when("/calendar/day",function(){var now=new Date;return"/calendar/day/"+now.getDayString()}),$urlRouterProvider.when("/calendar/week",function(){var now=new Date;return"/calendar/week/"+now.getDayString()}),$urlRouterProvider.when("/calendar/month",function(){var now=new Date;return"/calendar/month/"+now.getDayString()}),$urlRouterProvider.otherwise("/calendar")}function stateCalendars(Calendar){return Calendar.$calendars||Calendar.$findAll(window.calendarsData)}function stateEventsBlocks($stateParams,Component){return Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate())}function runBlock($rootScope,$location,Preferences){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)}),0===$location.url().length&&Preferences.ready().then(function(){var view=/(.+)view/.exec(Preferences.settings.Calendar.View);view&&$location.replace().url("/calendar/"+view[1])})}angular.module("SOGo.SchedulerUI",["ngSanitize","ui.router","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateCalendars.$inject=["Calendar"],stateEventsBlocks.$inject=["$stateParams","Component"],runBlock.$inject=["$rootScope","$location","Preferences"]}(),function(){"use strict";function CalendarController($scope,$state,$stateParams,$timeout,$interval,$log,focus,Calendar,Component,stateEventsBlocks){function changeView($event){var date=angular.element($event.currentTarget).attr("date");$state.go("calendars.view",{view:$stateParams.view,day:date})}var vm=this;vm.blocks=stateEventsBlocks,vm.changeView=changeView,$scope.$on("calendars:list",function(){Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(data){vm.blocks=data})})}CalendarController.$inject=["$scope","$state","$stateParams","$timeout","$interval","$log","sgFocus","Calendar","Component","stateEventsBlocks"],angular.module("SOGo.SchedulerUI").controller("CalendarController",CalendarController)}(),function(){"use strict";function CalendarListController($scope,$timeout,$state,$mdDialog,encodeUriFilter,Dialog,Preferences,Calendar,Component){function selectComponentType(type,options){(options&&options.reload||vm.componentType!=type)&&(angular.isUndefined(Component["$"+type])&&Component.$filter(type),vm.componentType=type,Component.saveSelectedList(type))}function openEvent($event,event){openComponent($event,event,"appointment")}function openTask($event,task){openComponent($event,task,"task")}function openComponent($event,component,type){var templateUrl="UIx"+type.capitalize()+"ViewTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentController",controllerAs:"editor",locals:{stateComponent:component}})}function newComponent($event){var component,type="appointment";"tasks"==vm.componentType&&(type="task"),component=new Component({pid:"personal",type:type});var templateUrl="UIx"+type.capitalize()+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:component}})}function filter(filterpopup){Component.$filter(vm.componentType,{filterpopup:filterpopup})}function filteredBy(filterpopup){return Component["$query"+vm.componentType.capitalize()].filterpopup==filterpopup}function sort(field){Component.$filter(vm.componentType,{sort:field})}function sortedBy(field){return Component["$query"+vm.componentType.capitalize()].sort==field}function cancelSearch(){vm.mode.search=!1,Component.$filter(vm.componentType,{value:""})}var vm=this;vm.component=Component,vm.componentType="events",vm.selectedList=0,vm.selectComponentType=selectComponentType,vm.openEvent=openEvent,vm.openTask=openTask,vm.newComponent=newComponent,vm.filter=filter,vm.filteredBy=filteredBy,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.mode={search:!1},Preferences.ready().then(function(){var type="events";"tasksListView"==Preferences.settings.Calendar.SelectedList&&(vm.selectedList=1,type="tasks"),selectComponentType(type,{reload:!0})}),$scope.$on("calendars:list",function(){Component.$filter(vm.componentType,{reload:!0})})}CalendarListController.$inject=["$scope","$timeout","$state","$mdDialog","encodeUriFilter","Dialog","Preferences","Calendar","Component"],angular.module("SOGo.SchedulerUI").controller("CalendarListController",CalendarListController)}(),function(){"use strict";function CalendarsController($scope,$rootScope,$stateParams,$state,$timeout,$q,$mdDialog,$log,focus,encodeUriFilter,Dialog,Settings,Calendar,User,stateCalendars){function newCalendar(ev){Dialog.prompt(l("New calendar"),l("Name of the Calendar")).then(function(name){var calendar=new Calendar({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});Calendar.$add(calendar)})}function addWebCalendar(){Dialog.prompt(l("Subscribe to a web calendar..."),l("URL of the Calendar"),{inputType:"url"}).then(function(url){Calendar.$addWebCalendar(url)})}function confirmDelete(folder){folder.isSubscription?folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",folder.name)).then(function(){folder.$delete().then(function(){$scope.$broadcast("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',folder.name),l(data.error))})})}function showLinks(selectedFolder){function LinksDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:selectedFolder.id+"/links",locals:{},controller:LinksDialogController}),LinksDialogController.$inject=["scope","$mdDialog"]}function showProperties(calendar){function PropertiesDialogController($mdDialog,calendar){function saveProperties(){vm.calendar.$save(),calendar.init(vm.calendar.$omit()),$mdDialog.hide()}function close(){$mdDialog.hide()}var vm=this;vm.calendar=new Calendar(calendar.$omit()),vm.saveProperties=saveProperties,vm.close=close}$mdDialog.show({templateUrl:calendar.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:!0,escapeToClose:!0,locals:{calendar:calendar}}),PropertiesDialogController.$inject=["$mdDialog","calendar"]}function share(calendar){calendar.$acl.$users().then(function(){$mdDialog.show({templateUrl:calendar.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:calendar.$acl.users,User:User,folder:calendar}})})}function subscribeToFolder(calendarData){$log.debug("subscribeToFolder "+calendarData.owner+calendarData.name),Calendar.$subscribe(calendarData.owner,calendarData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=Calendar,vm.newCalendar=newCalendar,vm.addWebCalendar=addWebCalendar,vm.confirmDelete=confirmDelete,vm.share=share,vm.showLinks=showLinks,vm.showProperties=showProperties,vm.subscribeToFolder=subscribeToFolder,$scope.$watch(function(){return _.union(_.map(Calendar.$calendars,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$subscriptions,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$webcalendars,function(o){return _.pick(o,["id","active","color"])}))},function(newList,oldList){var ids=_.pluck(_.filter(newList,function(o,i){return!_.isEqual(o,oldList[i])}),"id");ids.length>0&&($log.debug(ids.join(", ")+" changed"),_.each(ids,function(id){var calendar=Calendar.$get(id);calendar.$setActivation().then(function(){$scope.$broadcast("calendars:list")})}))},!0)}CalendarsController.$inject=["$scope","$rootScope","$stateParams","$state","$timeout","$q","$mdDialog","$log","sgFocus","encodeUriFilter","Dialog","sgSettings","Calendar","User","stateCalendars"],angular.module("SOGo.SchedulerUI").controller("CalendarsController",CalendarsController)}(),function(){"use strict";function ComponentController($rootScope,$mdDialog,Calendar,AddressBook,Alarm,stateComponent){function close(){$mdDialog.hide()}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function edit(){var type="vevent"==vm.component.component?"Appointment":"Task";$mdDialog.hide().then(function(){var templateUrl="UIx"+type+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:vm.component}})})}function editAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){vm.component=component,edit()})}function reply(component){var c=component||vm.component;c.$reply().then(function(){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()})}function replyAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id),component.$futureComponentData.then(function(){component.reply=vm.component.reply,component.delegatedTo=vm.component.delegatedTo,component.$hasAlarm=vm.component.$hasAlarm,component.alarm=vm.component.alarm,reply(component)})}var component,vm=this;vm.component=stateComponent,vm.close=close,vm.cardFilter=cardFilter,vm.edit=edit,vm.editAllOccurrences=editAllOccurrences,vm.reply=reply,vm.replyAllOccurrences=replyAllOccurrences,angular.isUndefined(vm.component.$futureComponentData)&&(component=Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name,vm.component.c_recurrence_id),component.$futureComponentData.then(function(){vm.component=component,vm.organizer=[vm.component.organizer]}))}function ComponentEditorController($rootScope,$scope,$log,$timeout,$mdDialog,User,Calendar,Component,AddressBook,Card,Alarm,stateComponent){function addAttachUrl(){var i=vm.component.addAttachUrl("");focus("attachUrl_"+i)}function toggleRecurrenceEditor(){vm.showRecurrenceEditor=!vm.showRecurrenceEditor,vm.component.$hasCustomRepeat=vm.showRecurrenceEditor}function toggleAttendeesEditor(){vm.showAttendeesEditor=!vm.showAttendeesEditor}function cardFilter($query){return AddressBook.$filterAll($query),AddressBook.$cards}function addAttendee(card){angular.isString(card)?card.isValidEmail()&&(vm.component.addAttendee(new Card({emails:[{value:card}]})),vm.searchText=""):vm.component.addAttendee(card)}function save(form){form.$valid&&vm.component.$save().then(function(data){$rootScope.$broadcast("calendars:list"),$mdDialog.hide(),Alarm.getAlarms()},function(data,status){$log.debug("failed")})}function cancel(){vm.component.$reset(),vm.component.isNew&&(vm.component=null),$mdDialog.hide()}function getDays(){var days=[];return vm.component.start&&vm.component.end&&(days=vm.component.start.daysUpTo(vm.component.end)),_.map(days,function(date){return{stringWithSeparator:date.stringWithSeparator(),getDayString:date.getDayString()}})}function getHours(){for(var hours=[],i=0;23>=i;i++)hours.push(i.toString());return hours}var vm=this;vm.calendars=Calendar.$calendars,vm.component=stateComponent,vm.categories={},vm.showRecurrenceEditor=vm.component.$hasCustomRepeat,vm.toggleRecurrenceEditor=toggleRecurrenceEditor,vm.showAttendeesEditor=angular.isDefined(vm.component.attendees),vm.toggleAttendeesEditor=toggleAttendeesEditor,vm.cardFilter=cardFilter,vm.addAttendee=addAttendee,vm.addAttachUrl=addAttachUrl,vm.cancel=cancel,vm.save=save,vm.attendeesEditor={startDate:vm.component.startDate,endDate:vm.component.endDate,days:getDays(),hours:getHours()},$scope.$watch("editor.component.startDate",function(newStartDate,oldStartDate){newStartDate&&$timeout(function(){vm.component.start=new Date(newStartDate.substring(0,10)+" "+newStartDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})}),$scope.$watch("editor.component.endDate",function(newEndDate,oldEndDate){newEndDate&&$timeout(function(){vm.component.end=new Date(newEndDate.substring(0,10)+" "+newEndDate.substring(11,16)),vm.component.freebusy=vm.component.updateFreeBusyCoverage(),vm.attendeesEditor.days=getDays()})})}ComponentController.$inject=["$rootScope","$mdDialog","Calendar","AddressBook","Alarm","stateComponent"],ComponentEditorController.$inject=["$rootScope","$scope","$log","$timeout","$mdDialog","User","Calendar","Component","AddressBook","Card","Alarm","stateComponent"],angular.module("SOGo.SchedulerUI").controller("ComponentController",ComponentController).controller("ComponentEditorController",ComponentEditorController)}(),function(){"use strict";function sgCalendarDayBlock(){function link(scope,iElement,attrs){var pc=100/scope.block.siblings,left=scope.block.position*pc,right=100-(scope.block.position+1)*pc;100>pc&&(left>0&&(left-=5),right>0&&(right-=5)),iElement.css("left",left+"%"),iElement.css("right",right+"%"),iElement.addClass("starts"+scope.block.start),iElement.addClass("lasts"+scope.block.length),iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:!0,template:['
','
','
',"
",'
{{ block.component.c_title }}',' ',' ',' ',' ',"
","
",'
','
',"
"].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayBlock",sgCalendarDayBlock)}(),function(){"use strict";function sgCalendarDayTable(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[''].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayTable",sgCalendarDayTable)}(),function(){"use strict";function sgCalendarMonthDay(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:["'].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthDay",sgCalendarMonthDay)}(),function(){"use strict";function sgCalendarMonthEvent(){function link(scope,iElement,attrs){iElement.addClass("bg-folder"+scope.block.component.c_folder)}return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:!0,template:['
',' {{ block.starthour }} - '," {{ block.component.c_title }}",' ',' ',' ',' '," ",'
','
',"
"].join(""),link:link}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthEvent",sgCalendarMonthEvent)}(); //# sourceMappingURL=Scheduler.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.js.map b/UI/WebServerResources/js/Scheduler.js.map index 630ba2743..701d67bf7 100644 --- a/UI/WebServerResources/js/Scheduler.js.map +++ b/UI/WebServerResources/js/Scheduler.js.map @@ -1 +1 @@ -{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","sticky","deepStateRedirect","calendarView","$stateParams","view","day","stateEventsBlocks","when","now","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","runBlock","$rootScope","$location","Preferences","$on","event","current","previous","rejection","console","error","length","ready","then","exec","settings","View","replace","angular","module","config","run","$inject","CalendarController","$scope","$state","$timeout","$interval","$log","focus","changeView","$event","date","element","currentTarget","attr","go","vm","this","blocks","data","CalendarListController","$mdDialog","encodeUriFilter","Dialog","selectComponentType","type","options","reload","componentType","isUndefined","$filter","openEvent","openComponent","openTask","task","component","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","newComponent","pid","filter","filterpopup","filteredBy","sort","field","sortedBy","cancelSearch","mode","search","value","selectedList","SelectedList","CalendarsController","$q","Settings","User","newCalendar","ev","prompt","l","name","calendar","isEditable","isRemote","owner","UserLogin","$add","addWebCalendar","inputType","$addWebCalendar","confirmDelete","folder","isSubscription","$delete","$broadcast","status","alert","confirm","showLinks","selectedFolder","LinksDialogController","scope","close","hide","id","showProperties","PropertiesDialogController","saveProperties","$save","init","$omit","share","$acl","$users","usersWithACL","users","subscribeToFolder","calendarData","debug","$subscribe","activeUser","service","$watch","_","union","map","o","pick","$subscriptions","$webcalendars","newList","oldList","ids","pluck","i","isEqual","join","each","$get","$setActivation","ComponentController","AddressBook","Alarm","cardFilter","$query","$filterAll","$cards","edit","editAllOccurrences","$getComponent","$futureComponentData","reply","c","$reply","getAlarms","replyAllOccurrences","delegatedTo","$hasAlarm","alarm","c_folder","c_name","c_recurrence_id","organizer","ComponentEditorController","Card","addAttachUrl","toggleRecurrenceEditor","showRecurrenceEditor","$hasCustomRepeat","toggleAttendeesEditor","showAttendeesEditor","addAttendee","card","isString","isValidEmail","emails","searchText","save","form","$valid","cancel","$reset","isNew","getDays","days","start","end","daysUpTo","stringWithSeparator","getHours","hours","push","toString","categories","isDefined","attendees","attendeesEditor","startDate","endDate","newStartDate","oldStartDate","substring","freebusy","updateFreeBusyCoverage","newEndDate","oldEndDate","sgCalendarDayBlock","link","iElement","attrs","pc","block","siblings","left","position","right","css","addClass","restrict","clickBlock","template","directive","sgCalendarDayTable","sgCalendarMonthDay","sgCalendarMonthEvent"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.SchedulerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.SchedulerUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.ContactsUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('calendars', {\n url: '/calendar',\n views: {\n calendars: {\n templateUrl: 'UIxCalMainFrame', // UI/Templates/SchedulerUI/UIxCalMainFrame.wox\n controller: 'CalendarsController',\n controllerAs: 'calendars'\n }\n },\n resolve: {\n stateCalendars: stateCalendars\n }\n })\n .state('calendars.view', {\n url: '/{view:(?:day|week|month)}/:day',\n sticky: true,\n deepStateRedirect: true,\n views: {\n calendarView: {\n templateUrl: function($stateParams) {\n // UI/Templates/SchedulerUI/UIxCalDayView.wox or\n // UI/Templates/SchedulerUI/UIxCalWeekView.wox or\n // UI/Templates/SchedulerUI/UIxCalMonthView.wox\n return $stateParams.view + 'view?day=' + $stateParams.day;\n },\n controller: 'CalendarController',\n controllerAs: 'calendar'\n }\n },\n resolve: {\n stateEventsBlocks: stateEventsBlocks\n }\n });\n\n $urlRouterProvider.when('/calendar/day', function() {\n // If no date is specified, show today\n var now = new Date();\n return '/calendar/day/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/week', function() {\n // If no date is specified, show today's week\n var now = new Date();\n return '/calendar/week/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/month', function() {\n // If no date is specified, show today's month\n var now = new Date();\n return '/calendar/month/' + now.getDayString();\n });\n\n // If none of the above states are matched, use this as the fallback.\n // runBlock will also act as a fallback by looking at user's settings\n $urlRouterProvider.otherwise('/calendar');\n }\n\n /**\n * @ngInject\n */\n stateCalendars.$inject = ['Calendar'];\n function stateCalendars(Calendar) {\n return Calendar.$calendars || Calendar.$findAll(window.calendarsData);\n }\n\n /**\n * @ngInject\n */\n stateEventsBlocks.$inject = ['$stateParams', 'Component'];\n function stateEventsBlocks($stateParams, Component) {\n return Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate());\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope', '$location', 'Preferences'];\n function runBlock($rootScope, $location, Preferences) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n if ($location.url().length === 0) {\n // Restore user's last view\n Preferences.ready().then(function() {\n var view = /(.+)view/.exec(Preferences.settings.Calendar.View);\n if (view) {\n $location.replace().url('/calendar/' + view[1]);\n }\n });\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarController.$inject = ['$scope', '$state', '$stateParams', '$timeout', '$interval', '$log', 'sgFocus', 'Calendar', 'Component', 'stateEventsBlocks'];\n function CalendarController($scope, $state, $stateParams, $timeout, $interval, $log, focus, Calendar, Component, stateEventsBlocks) {\n var vm = this;\n\n vm.blocks = stateEventsBlocks;\n vm.changeView = changeView;\n\n // Refresh current view when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate()).then(function(data) {\n vm.blocks = data;\n });\n });\n\n // Change calendar's view\n function changeView($event) {\n var date = angular.element($event.currentTarget).attr('date');\n $state.go('calendars.view', { view: $stateParams.view, day: date });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI') \n .controller('CalendarController', CalendarController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarListController.$inject = ['$scope', '$timeout', '$state', '$mdDialog', 'encodeUriFilter', 'Dialog', 'Preferences', 'Calendar', 'Component'];\n function CalendarListController($scope, $timeout, $state, $mdDialog, encodeUriFilter, Dialog, Preferences, Calendar, Component) {\n var vm = this;\n\n vm.component = Component;\n vm.componentType = 'events';\n vm.selectedList = 0;\n vm.selectComponentType = selectComponentType;\n vm.openEvent = openEvent;\n vm.openTask = openTask;\n vm.newComponent = newComponent;\n vm.filter = filter;\n vm.filteredBy = filteredBy;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.mode = { search: false };\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n var type = 'events';\n if (Preferences.settings.Calendar.SelectedList == 'tasksListView') {\n vm.selectedList = 1;\n type = 'tasks';\n }\n selectComponentType(type, { reload: true });\n });\n\n // Refresh current list when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$filter(vm.componentType, { reload: true });\n });\n\n // Switch between components tabs\n function selectComponentType(type, options) {\n if (options && options.reload || vm.componentType != type) {\n // TODO: save user settings (Calendar.SelectedList)\n if (angular.isUndefined(Component['$' + type]))\n Component.$filter(type);\n vm.componentType = type;\n }\n }\n\n function openEvent($event, event) {\n openComponent($event, event, 'appointment');\n }\n\n function openTask($event, task) {\n openComponent($event, task, 'task');\n }\n\n function openComponent($event, component, type) {\n // UI/Templates/SchedulerUI/UIxAppointmentViewTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskViewTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'ViewTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function newComponent($event) {\n var type = 'appointment', component;\n\n if (vm.componentType == 'tasks')\n type = 'task';\n component = new Component({ pid: 'personal', type: type });\n\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function filter(filterpopup) {\n Component.$filter(vm.componentType, { filterpopup: filterpopup });\n }\n\n function filteredBy(filterpopup) {\n return Component['$query' + vm.componentType.capitalize()].filterpopup == filterpopup;\n }\n\n function sort(field) {\n Component.$filter(vm.componentType, { sort: field });\n }\n\n function sortedBy(field) {\n return Component['$query' + vm.componentType.capitalize()].sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n Component.$filter(vm.componentType, { value: '' });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarListController', CalendarListController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarsController.$inject = ['$scope', '$rootScope', '$stateParams', '$state', '$timeout', '$q', '$mdDialog', '$log', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Calendar', 'User', 'stateCalendars'];\n function CalendarsController($scope, $rootScope, $stateParams, $state, $timeout, $q, $mdDialog, $log, focus, encodeUriFilter, Dialog, Settings, Calendar, User, stateCalendars) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = Calendar;\n vm.newCalendar = newCalendar;\n vm.addWebCalendar = addWebCalendar;\n vm.confirmDelete = confirmDelete;\n vm.share = share;\n vm.showLinks = showLinks;\n vm.showProperties = showProperties;\n vm.subscribeToFolder = subscribeToFolder;\n\n // Dispatch the event named 'calendars:list' when a calendar is activated or deactivated or\n // when the color of a calendar is changed\n $scope.$watch(\n function() {\n return _.union(\n _.map(Calendar.$calendars, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$subscriptions, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$webcalendars, function(o) { return _.pick(o, ['id', 'active', 'color']); })\n );\n },\n function(newList, oldList) {\n // Identify which calendar has changed\n var ids = _.pluck(_.filter(newList, function(o, i) { return !_.isEqual(o, oldList[i]); }), 'id');\n if (ids.length > 0) {\n $log.debug(ids.join(', ') + ' changed');\n _.each(ids, function(id) {\n var calendar = Calendar.$get(id);\n calendar.$setActivation().then(function() {\n $scope.$broadcast('calendars:list');\n });\n });\n }\n },\n true // compare for object equality\n );\n\n function newCalendar(ev) {\n Dialog.prompt(l('New calendar'), l('Name of the Calendar'))\n .then(function(name) {\n var calendar = new Calendar(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n Calendar.$add(calendar);\n });\n }\n\n function addWebCalendar() {\n Dialog.prompt(l('Subscribe to a web calendar...'), l('URL of the Calendar'), {inputType: 'url'})\n .then(function(url) {\n Calendar.$addWebCalendar(url);\n });\n }\n\n function confirmDelete(folder) {\n if (folder.isSubscription) {\n // Unsubscribe without confirmation\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?', folder.name))\n .then(function() {\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function showProperties(calendar) {\n $mdDialog.show({\n templateUrl: calendar.id + '/properties',\n controller: PropertiesDialogController,\n controllerAs: 'properties',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n calendar: calendar\n }\n });\n \n /**\n * @ngInject\n */\n PropertiesDialogController.$inject = ['$mdDialog', 'calendar'];\n function PropertiesDialogController($mdDialog, calendar) {\n var vm = this;\n\n vm.calendar = new Calendar(calendar.$omit());\n vm.saveProperties = saveProperties;\n vm.close = close;\n\n function saveProperties() {\n vm.calendar.$save();\n // Refresh list instance\n calendar.init(vm.calendar.$omit());\n $mdDialog.hide();\n }\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(calendar) {\n calendar.$acl.$users().then(function() {\n $mdDialog.show({\n templateUrl: calendar.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: calendar.$acl.users,\n User: User,\n folder: calendar\n }\n });\n });\n }\n\n // Callback of sgSubscribe directive\n function subscribeToFolder(calendarData) {\n $log.debug('subscribeToFolder ' + calendarData.owner + calendarData.name);\n Calendar.$subscribe(calendarData.owner, calendarData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarsController', CalendarsController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n ComponentController.$inject = ['$rootScope', '$mdDialog', 'Calendar', 'AddressBook', 'Alarm', 'stateComponent'];\n function ComponentController($rootScope, $mdDialog, Calendar, AddressBook, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.component = stateComponent;\n vm.close = close;\n vm.cardFilter = cardFilter;\n vm.edit = edit;\n vm.editAllOccurrences = editAllOccurrences;\n vm.reply = reply;\n vm.replyAllOccurrences = replyAllOccurrences;\n\n // Load all attributes of component\n if (angular.isUndefined(vm.component.$futureComponentData)) {\n component = Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name, vm.component.c_recurrence_id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n vm.organizer = [vm.component.organizer];\n });\n }\n\n function close() {\n $mdDialog.hide();\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function edit() {\n var type = (vm.component.component == 'vevent')? 'Appointment':'Task';\n $mdDialog.hide().then(function() {\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: vm.component\n }\n });\n });\n }\n\n function editAllOccurrences() {\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n edit();\n });\n }\n\n function reply(component) {\n var c = component || vm.component;\n\n c.$reply().then(function() {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n });\n }\n\n function replyAllOccurrences() {\n // Retrieve master event\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n // Propagate the participant status and alarm to the master event\n component.reply = vm.component.reply;\n component.delegatedTo = vm.component.delegatedTo;\n component.$hasAlarm = vm.component.$hasAlarm;\n component.alarm = vm.component.alarm;\n // Send reply to the server\n reply(component);\n });\n }\n }\n\n /**\n * @ngInject\n */\n ComponentEditorController.$inject = ['$rootScope', '$scope', '$log', '$timeout', '$mdDialog', 'User', 'Calendar', 'Component', 'AddressBook', 'Card', 'Alarm', 'stateComponent'];\n function ComponentEditorController($rootScope, $scope, $log, $timeout, $mdDialog, User, Calendar, Component, AddressBook, Card, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.calendars = Calendar.$calendars;\n vm.component = stateComponent;\n vm.categories = {};\n vm.showRecurrenceEditor = vm.component.$hasCustomRepeat;\n vm.toggleRecurrenceEditor = toggleRecurrenceEditor;\n vm.showAttendeesEditor = angular.isDefined(vm.component.attendees);\n vm.toggleAttendeesEditor = toggleAttendeesEditor;\n vm.cardFilter = cardFilter;\n vm.addAttendee = addAttendee;\n vm.addAttachUrl = addAttachUrl;\n vm.cancel = cancel;\n vm.save = save;\n vm.attendeesEditor = {\n startDate: vm.component.startDate,\n endDate: vm.component.endDate,\n days: getDays(),\n hours: getHours()\n };\n\n $scope.$watch('editor.component.startDate', function(newStartDate, oldStartDate) {\n if (newStartDate) {\n $timeout(function() {\n vm.component.start = new Date(newStartDate.substring(0,10) + ' ' + newStartDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n $scope.$watch('editor.component.endDate', function(newEndDate, oldEndDate) {\n if (newEndDate) {\n $timeout(function() {\n vm.component.end = new Date(newEndDate.substring(0,10) + ' ' + newEndDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n function addAttachUrl() {\n var i = vm.component.addAttachUrl('');\n focus('attachUrl_' + i);\n }\n\n function toggleRecurrenceEditor() {\n vm.showRecurrenceEditor = !vm.showRecurrenceEditor;\n vm.component.$hasCustomRepeat = vm.showRecurrenceEditor;\n }\n\n function toggleAttendeesEditor() {\n vm.showAttendeesEditor = !vm.showAttendeesEditor;\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function addAttendee(card) {\n if (angular.isString(card)) {\n // User pressed \"Enter\" in search field, adding a non-matching card\n if (card.isValidEmail()) {\n vm.component.addAttendee(new Card({ emails: [{ value: card }] }));\n vm.searchText = '';\n }\n }\n else {\n vm.component.addAttendee(card);\n }\n }\n\n function save(form) {\n if (form.$valid) {\n vm.component.$save()\n .then(function(data) {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n }, function(data, status) {\n $log.debug('failed');\n });\n }\n }\n\n function cancel() {\n vm.component.$reset();\n if (vm.component.isNew) {\n // Cancelling the creation of a component\n vm.component = null;\n }\n $mdDialog.hide();\n }\n\n function getDays() {\n var days = [];\n\n if (vm.component.start && vm.component.end)\n days = vm.component.start.daysUpTo(vm.component.end);\n\n return _.map(days, function(date) {\n return { stringWithSeparator: date.stringWithSeparator(),\n getDayString: date.getDayString() };\n });\n }\n\n function getHours() {\n var hours = [];\n for (var i = 0; i <= 23; i++) {\n //hours.push(Component.timeFormat.formatTime(i, 0));\n hours.push(i.toString());\n }\n return hours;\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('ComponentController', ComponentController)\n .controller('ComponentEditorController', ComponentEditorController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayBlock - An event block to be displayed in a week\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: clickEvent (the event that triggered the mouse click),\n * and clickComponent (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayBlock() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock',\n clickBlock: '&sgClick'\n },\n replace: true,\n template: [\n '
',\n '
',\n '
',\n '
',\n '
{{ block.component.c_title }}',\n ' ',\n // Component has an alarm\n ' ',\n // Component is confidential\n ' ',\n // Component is private\n ' ',\n '
',\n '
',\n '
',\n '
',\n '
'\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n // Compute overlapping (5%)\n var pc = 100 / scope.block.siblings,\n left = scope.block.position * pc,\n right = 100 - (scope.block.position + 1) * pc;\n\n if (pc < 100) {\n if (left > 0)\n left -= 5;\n if (right > 0)\n right -= 5;\n }\n\n // Set position\n iElement.css('left', left + '%');\n iElement.css('right', right + '%');\n iElement.addClass('starts' + scope.block.start);\n iElement.addClass('lasts' + scope.block.length);\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayBlock', sgCalendarDayBlock);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayTable - Build list of blocks for a specific day\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: event (the event that triggered the mouse click),\n * and component (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayTable() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay',\n clickBlock: '&sgClick'\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayTable', sgCalendarDayTable);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthDay - Build list of blocks for a specific day in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthDay() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay'\n },\n replace: true,\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthDay', sgCalendarMonthDay);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthEvent - An event block to be displayed in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthEvent() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock'\n },\n replace: true,\n template: [\n '
',\n ' {{ block.starthour }} - ',\n ' {{ block.component.c_title }}',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n '
',\n ''\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthEvent', sgCalendarMonthEvent);\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","sticky","deepStateRedirect","calendarView","$stateParams","view","day","stateEventsBlocks","when","now","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","runBlock","$rootScope","$location","Preferences","$on","event","current","previous","rejection","console","error","length","ready","then","exec","settings","View","replace","angular","module","config","run","$inject","CalendarController","$scope","$state","$timeout","$interval","$log","focus","changeView","$event","date","element","currentTarget","attr","go","vm","this","blocks","data","CalendarListController","$mdDialog","encodeUriFilter","Dialog","selectComponentType","type","options","reload","componentType","isUndefined","$filter","saveSelectedList","openEvent","openComponent","openTask","task","component","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","newComponent","pid","filter","filterpopup","filteredBy","sort","field","sortedBy","cancelSearch","mode","search","value","selectedList","SelectedList","CalendarsController","$q","Settings","User","newCalendar","ev","prompt","l","name","calendar","isEditable","isRemote","owner","UserLogin","$add","addWebCalendar","inputType","$addWebCalendar","confirmDelete","folder","isSubscription","$delete","$broadcast","status","alert","confirm","showLinks","selectedFolder","LinksDialogController","scope","close","hide","id","showProperties","PropertiesDialogController","saveProperties","$save","init","$omit","share","$acl","$users","usersWithACL","users","subscribeToFolder","calendarData","debug","$subscribe","activeUser","service","$watch","_","union","map","o","pick","$subscriptions","$webcalendars","newList","oldList","ids","pluck","i","isEqual","join","each","$get","$setActivation","ComponentController","AddressBook","Alarm","cardFilter","$query","$filterAll","$cards","edit","editAllOccurrences","$getComponent","$futureComponentData","reply","c","$reply","getAlarms","replyAllOccurrences","delegatedTo","$hasAlarm","alarm","c_folder","c_name","c_recurrence_id","organizer","ComponentEditorController","Card","addAttachUrl","toggleRecurrenceEditor","showRecurrenceEditor","$hasCustomRepeat","toggleAttendeesEditor","showAttendeesEditor","addAttendee","card","isString","isValidEmail","emails","searchText","save","form","$valid","cancel","$reset","isNew","getDays","days","start","end","daysUpTo","stringWithSeparator","getHours","hours","push","toString","categories","isDefined","attendees","attendeesEditor","startDate","endDate","newStartDate","oldStartDate","substring","freebusy","updateFreeBusyCoverage","newEndDate","oldEndDate","sgCalendarDayBlock","link","iElement","attrs","pc","block","siblings","left","position","right","css","addClass","restrict","clickBlock","template","directive","sgCalendarDayTable","sgCalendarMonthDay","sgCalendarMonthEvent"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.SchedulerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.SchedulerUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.ContactsUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('calendars', {\n url: '/calendar',\n views: {\n calendars: {\n templateUrl: 'UIxCalMainFrame', // UI/Templates/SchedulerUI/UIxCalMainFrame.wox\n controller: 'CalendarsController',\n controllerAs: 'calendars'\n }\n },\n resolve: {\n stateCalendars: stateCalendars\n }\n })\n .state('calendars.view', {\n url: '/{view:(?:day|week|month)}/:day',\n sticky: true,\n deepStateRedirect: true,\n views: {\n calendarView: {\n templateUrl: function($stateParams) {\n // UI/Templates/SchedulerUI/UIxCalDayView.wox or\n // UI/Templates/SchedulerUI/UIxCalWeekView.wox or\n // UI/Templates/SchedulerUI/UIxCalMonthView.wox\n return $stateParams.view + 'view?day=' + $stateParams.day;\n },\n controller: 'CalendarController',\n controllerAs: 'calendar'\n }\n },\n resolve: {\n stateEventsBlocks: stateEventsBlocks\n }\n });\n\n $urlRouterProvider.when('/calendar/day', function() {\n // If no date is specified, show today\n var now = new Date();\n return '/calendar/day/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/week', function() {\n // If no date is specified, show today's week\n var now = new Date();\n return '/calendar/week/' + now.getDayString();\n });\n $urlRouterProvider.when('/calendar/month', function() {\n // If no date is specified, show today's month\n var now = new Date();\n return '/calendar/month/' + now.getDayString();\n });\n\n // If none of the above states are matched, use this as the fallback.\n // runBlock will also act as a fallback by looking at user's settings\n $urlRouterProvider.otherwise('/calendar');\n }\n\n /**\n * @ngInject\n */\n stateCalendars.$inject = ['Calendar'];\n function stateCalendars(Calendar) {\n return Calendar.$calendars || Calendar.$findAll(window.calendarsData);\n }\n\n /**\n * @ngInject\n */\n stateEventsBlocks.$inject = ['$stateParams', 'Component'];\n function stateEventsBlocks($stateParams, Component) {\n return Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate());\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope', '$location', 'Preferences'];\n function runBlock($rootScope, $location, Preferences) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n if ($location.url().length === 0) {\n // Restore user's last view\n Preferences.ready().then(function() {\n var view = /(.+)view/.exec(Preferences.settings.Calendar.View);\n if (view) {\n $location.replace().url('/calendar/' + view[1]);\n }\n });\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarController.$inject = ['$scope', '$state', '$stateParams', '$timeout', '$interval', '$log', 'sgFocus', 'Calendar', 'Component', 'stateEventsBlocks'];\n function CalendarController($scope, $state, $stateParams, $timeout, $interval, $log, focus, Calendar, Component, stateEventsBlocks) {\n var vm = this;\n\n vm.blocks = stateEventsBlocks;\n vm.changeView = changeView;\n\n // Refresh current view when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$eventsBlocksForView($stateParams.view, $stateParams.day.asDate()).then(function(data) {\n vm.blocks = data;\n });\n });\n\n // Change calendar's view\n function changeView($event) {\n var date = angular.element($event.currentTarget).attr('date');\n $state.go('calendars.view', { view: $stateParams.view, day: date });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI') \n .controller('CalendarController', CalendarController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarListController.$inject = ['$scope', '$timeout', '$state', '$mdDialog', 'encodeUriFilter', 'Dialog', 'Preferences', 'Calendar', 'Component'];\n function CalendarListController($scope, $timeout, $state, $mdDialog, encodeUriFilter, Dialog, Preferences, Calendar, Component) {\n var vm = this;\n\n vm.component = Component;\n vm.componentType = 'events';\n vm.selectedList = 0;\n vm.selectComponentType = selectComponentType;\n vm.openEvent = openEvent;\n vm.openTask = openTask;\n vm.newComponent = newComponent;\n vm.filter = filter;\n vm.filteredBy = filteredBy;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.mode = { search: false };\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n var type = 'events';\n if (Preferences.settings.Calendar.SelectedList == 'tasksListView') {\n vm.selectedList = 1;\n type = 'tasks';\n }\n selectComponentType(type, { reload: true });\n });\n\n // Refresh current list when the list of calendars is modified\n $scope.$on('calendars:list', function() {\n Component.$filter(vm.componentType, { reload: true });\n });\n\n // Switch between components tabs\n function selectComponentType(type, options) {\n if (options && options.reload || vm.componentType != type) {\n // TODO: save user settings (Calendar.SelectedList)\n if (angular.isUndefined(Component['$' + type]))\n Component.$filter(type);\n vm.componentType = type;\n Component.saveSelectedList(type);\n }\n }\n\n function openEvent($event, event) {\n openComponent($event, event, 'appointment');\n }\n\n function openTask($event, task) {\n openComponent($event, task, 'task');\n }\n\n function openComponent($event, component, type) {\n // UI/Templates/SchedulerUI/UIxAppointmentViewTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskViewTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'ViewTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function newComponent($event) {\n var type = 'appointment', component;\n\n if (vm.componentType == 'tasks')\n type = 'task';\n component = new Component({ pid: 'personal', type: type });\n\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type.capitalize() + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: component\n }\n });\n }\n\n function filter(filterpopup) {\n Component.$filter(vm.componentType, { filterpopup: filterpopup });\n }\n\n function filteredBy(filterpopup) {\n return Component['$query' + vm.componentType.capitalize()].filterpopup == filterpopup;\n }\n\n function sort(field) {\n Component.$filter(vm.componentType, { sort: field });\n }\n\n function sortedBy(field) {\n return Component['$query' + vm.componentType.capitalize()].sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n Component.$filter(vm.componentType, { value: '' });\n }\n }\n \n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarListController', CalendarListController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n CalendarsController.$inject = ['$scope', '$rootScope', '$stateParams', '$state', '$timeout', '$q', '$mdDialog', '$log', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Calendar', 'User', 'stateCalendars'];\n function CalendarsController($scope, $rootScope, $stateParams, $state, $timeout, $q, $mdDialog, $log, focus, encodeUriFilter, Dialog, Settings, Calendar, User, stateCalendars) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = Calendar;\n vm.newCalendar = newCalendar;\n vm.addWebCalendar = addWebCalendar;\n vm.confirmDelete = confirmDelete;\n vm.share = share;\n vm.showLinks = showLinks;\n vm.showProperties = showProperties;\n vm.subscribeToFolder = subscribeToFolder;\n\n // Dispatch the event named 'calendars:list' when a calendar is activated or deactivated or\n // when the color of a calendar is changed\n $scope.$watch(\n function() {\n return _.union(\n _.map(Calendar.$calendars, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$subscriptions, function(o) { return _.pick(o, ['id', 'active', 'color']); }),\n _.map(Calendar.$webcalendars, function(o) { return _.pick(o, ['id', 'active', 'color']); })\n );\n },\n function(newList, oldList) {\n // Identify which calendar has changed\n var ids = _.pluck(_.filter(newList, function(o, i) { return !_.isEqual(o, oldList[i]); }), 'id');\n if (ids.length > 0) {\n $log.debug(ids.join(', ') + ' changed');\n _.each(ids, function(id) {\n var calendar = Calendar.$get(id);\n calendar.$setActivation().then(function() {\n $scope.$broadcast('calendars:list');\n });\n });\n }\n },\n true // compare for object equality\n );\n\n function newCalendar(ev) {\n Dialog.prompt(l('New calendar'), l('Name of the Calendar'))\n .then(function(name) {\n var calendar = new Calendar(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n Calendar.$add(calendar);\n });\n }\n\n function addWebCalendar() {\n Dialog.prompt(l('Subscribe to a web calendar...'), l('URL of the Calendar'), {inputType: 'url'})\n .then(function(url) {\n Calendar.$addWebCalendar(url);\n });\n }\n\n function confirmDelete(folder) {\n if (folder.isSubscription) {\n // Unsubscribe without confirmation\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?', folder.name))\n .then(function() {\n folder.$delete()\n .then(function() {\n $scope.$broadcast('calendars:list');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n }\n\n function showProperties(calendar) {\n $mdDialog.show({\n templateUrl: calendar.id + '/properties',\n controller: PropertiesDialogController,\n controllerAs: 'properties',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n calendar: calendar\n }\n });\n \n /**\n * @ngInject\n */\n PropertiesDialogController.$inject = ['$mdDialog', 'calendar'];\n function PropertiesDialogController($mdDialog, calendar) {\n var vm = this;\n\n vm.calendar = new Calendar(calendar.$omit());\n vm.saveProperties = saveProperties;\n vm.close = close;\n\n function saveProperties() {\n vm.calendar.$save();\n // Refresh list instance\n calendar.init(vm.calendar.$omit());\n $mdDialog.hide();\n }\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(calendar) {\n calendar.$acl.$users().then(function() {\n $mdDialog.show({\n templateUrl: calendar.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: calendar.$acl.users,\n User: User,\n folder: calendar\n }\n });\n });\n }\n\n // Callback of sgSubscribe directive\n function subscribeToFolder(calendarData) {\n $log.debug('subscribeToFolder ' + calendarData.owner + calendarData.name);\n Calendar.$subscribe(calendarData.owner, calendarData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('CalendarsController', CalendarsController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n ComponentController.$inject = ['$rootScope', '$mdDialog', 'Calendar', 'AddressBook', 'Alarm', 'stateComponent'];\n function ComponentController($rootScope, $mdDialog, Calendar, AddressBook, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.component = stateComponent;\n vm.close = close;\n vm.cardFilter = cardFilter;\n vm.edit = edit;\n vm.editAllOccurrences = editAllOccurrences;\n vm.reply = reply;\n vm.replyAllOccurrences = replyAllOccurrences;\n\n // Load all attributes of component\n if (angular.isUndefined(vm.component.$futureComponentData)) {\n component = Calendar.$get(vm.component.c_folder).$getComponent(vm.component.c_name, vm.component.c_recurrence_id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n vm.organizer = [vm.component.organizer];\n });\n }\n\n function close() {\n $mdDialog.hide();\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function edit() {\n var type = (vm.component.component == 'vevent')? 'Appointment':'Task';\n $mdDialog.hide().then(function() {\n // UI/Templates/SchedulerUI/UIxAppointmentEditorTemplate.wox or\n // UI/Templates/SchedulerUI/UIxTaskEditorTemplate.wox\n var templateUrl = 'UIx' + type + 'EditorTemplate';\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: templateUrl,\n controller: 'ComponentEditorController',\n controllerAs: 'editor',\n locals: {\n stateComponent: vm.component\n }\n });\n });\n }\n\n function editAllOccurrences() {\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n vm.component = component;\n edit();\n });\n }\n\n function reply(component) {\n var c = component || vm.component;\n\n c.$reply().then(function() {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n });\n }\n\n function replyAllOccurrences() {\n // Retrieve master event\n component = Calendar.$get(vm.component.pid).$getComponent(vm.component.id);\n component.$futureComponentData.then(function() {\n // Propagate the participant status and alarm to the master event\n component.reply = vm.component.reply;\n component.delegatedTo = vm.component.delegatedTo;\n component.$hasAlarm = vm.component.$hasAlarm;\n component.alarm = vm.component.alarm;\n // Send reply to the server\n reply(component);\n });\n }\n }\n\n /**\n * @ngInject\n */\n ComponentEditorController.$inject = ['$rootScope', '$scope', '$log', '$timeout', '$mdDialog', 'User', 'Calendar', 'Component', 'AddressBook', 'Card', 'Alarm', 'stateComponent'];\n function ComponentEditorController($rootScope, $scope, $log, $timeout, $mdDialog, User, Calendar, Component, AddressBook, Card, Alarm, stateComponent) {\n var vm = this, component;\n\n vm.calendars = Calendar.$calendars;\n vm.component = stateComponent;\n vm.categories = {};\n vm.showRecurrenceEditor = vm.component.$hasCustomRepeat;\n vm.toggleRecurrenceEditor = toggleRecurrenceEditor;\n vm.showAttendeesEditor = angular.isDefined(vm.component.attendees);\n vm.toggleAttendeesEditor = toggleAttendeesEditor;\n vm.cardFilter = cardFilter;\n vm.addAttendee = addAttendee;\n vm.addAttachUrl = addAttachUrl;\n vm.cancel = cancel;\n vm.save = save;\n vm.attendeesEditor = {\n startDate: vm.component.startDate,\n endDate: vm.component.endDate,\n days: getDays(),\n hours: getHours()\n };\n\n $scope.$watch('editor.component.startDate', function(newStartDate, oldStartDate) {\n if (newStartDate) {\n $timeout(function() {\n vm.component.start = new Date(newStartDate.substring(0,10) + ' ' + newStartDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n $scope.$watch('editor.component.endDate', function(newEndDate, oldEndDate) {\n if (newEndDate) {\n $timeout(function() {\n vm.component.end = new Date(newEndDate.substring(0,10) + ' ' + newEndDate.substring(11,16));\n vm.component.freebusy = vm.component.updateFreeBusyCoverage();\n vm.attendeesEditor.days = getDays();\n });\n }\n });\n\n function addAttachUrl() {\n var i = vm.component.addAttachUrl('');\n focus('attachUrl_' + i);\n }\n\n function toggleRecurrenceEditor() {\n vm.showRecurrenceEditor = !vm.showRecurrenceEditor;\n vm.component.$hasCustomRepeat = vm.showRecurrenceEditor;\n }\n\n function toggleAttendeesEditor() {\n vm.showAttendeesEditor = !vm.showAttendeesEditor;\n }\n\n // Autocomplete cards for attendees\n function cardFilter($query) {\n AddressBook.$filterAll($query);\n return AddressBook.$cards;\n }\n\n function addAttendee(card) {\n if (angular.isString(card)) {\n // User pressed \"Enter\" in search field, adding a non-matching card\n if (card.isValidEmail()) {\n vm.component.addAttendee(new Card({ emails: [{ value: card }] }));\n vm.searchText = '';\n }\n }\n else {\n vm.component.addAttendee(card);\n }\n }\n\n function save(form) {\n if (form.$valid) {\n vm.component.$save()\n .then(function(data) {\n $rootScope.$broadcast('calendars:list');\n $mdDialog.hide();\n Alarm.getAlarms();\n }, function(data, status) {\n $log.debug('failed');\n });\n }\n }\n\n function cancel() {\n vm.component.$reset();\n if (vm.component.isNew) {\n // Cancelling the creation of a component\n vm.component = null;\n }\n $mdDialog.hide();\n }\n\n function getDays() {\n var days = [];\n\n if (vm.component.start && vm.component.end)\n days = vm.component.start.daysUpTo(vm.component.end);\n\n return _.map(days, function(date) {\n return { stringWithSeparator: date.stringWithSeparator(),\n getDayString: date.getDayString() };\n });\n }\n\n function getHours() {\n var hours = [];\n for (var i = 0; i <= 23; i++) {\n //hours.push(Component.timeFormat.formatTime(i, 0));\n hours.push(i.toString());\n }\n return hours;\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .controller('ComponentController', ComponentController)\n .controller('ComponentEditorController', ComponentEditorController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayBlock - An event block to be displayed in a week\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: clickEvent (the event that triggered the mouse click),\n * and clickComponent (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayBlock() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock',\n clickBlock: '&sgClick'\n },\n replace: true,\n template: [\n '
',\n '
',\n '
',\n '
',\n '
{{ block.component.c_title }}',\n ' ',\n // Component has an alarm\n ' ',\n // Component is confidential\n ' ',\n // Component is private\n ' ',\n '
',\n '
',\n '
',\n '
',\n '
'\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n // Compute overlapping (5%)\n var pc = 100 / scope.block.siblings,\n left = scope.block.position * pc,\n right = 100 - (scope.block.position + 1) * pc;\n\n if (pc < 100) {\n if (left > 0)\n left -= 5;\n if (right > 0)\n right -= 5;\n }\n\n // Set position\n iElement.css('left', left + '%');\n iElement.css('right', right + '%');\n iElement.addClass('starts' + scope.block.start);\n iElement.addClass('lasts' + scope.block.length);\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayBlock', sgCalendarDayBlock);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarDayTable - Build list of blocks for a specific day\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @param {function} sgClick - the function to call when clicking on a block.\n * Two variables are available: event (the event that triggered the mouse click),\n * and component (a Component object)\n *\n * @example:\n\n \n */\n function sgCalendarDayTable() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay',\n clickBlock: '&sgClick'\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarDayTable', sgCalendarDayTable);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthDay - Build list of blocks for a specific day in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlocks - the events blocks definitions for the current view\n * @param {string} sgDay - the day of the events to display\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthDay() {\n return {\n restrict: 'E',\n scope: {\n blocks: '=sgBlocks',\n day: '@sgDay',\n clickBlock: '&sgClick'\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthDay', sgCalendarMonthDay);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCalendarMonthEvent - An event block to be displayed in a month\n * @memberof SOGo.Common\n * @restrict element\n * @param {object} sgBlock - the event block definition\n * @ngInject\n * @example:\n\n \n */\n function sgCalendarMonthEvent() {\n return {\n restrict: 'E',\n scope: {\n block: '=sgBlock',\n clickBlock: '&sgClick'\n },\n replace: true,\n template: [\n '
',\n ' {{ block.starthour }} - ',\n ' {{ block.component.c_title }}',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n '
'\n ].join(''),\n link: link\n };\n\n function link(scope, iElement, attrs) {\n iElement.addClass('bg-folder' + scope.block.component.c_folder);\n }\n }\n\n angular\n .module('SOGo.SchedulerUI')\n .directive('sgCalendarMonthEvent', sgCalendarMonthEvent);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js b/UI/WebServerResources/js/Scheduler.services.js index 723810107..5b57f109a 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)})),this.$calendars},Calendar.$get=function(id){var calendar;return calendar=_.find(Calendar.$calendars,function(o){return o.id==id}),calendar||(calendar=_.find(Calendar.$subscriptions,function(o){return o.id==id})),calendar||(calendar=_.find(Calendar.$webcalendars,function(o){return o.id==id})),calendar},Calendar.$subscribe=function(uid,path){var _this=this;return Calendar.$$resource.userResource(uid).fetch(path,"subscribe").then(function(calendarData){var calendar=new Calendar(calendarData);return _.find(_this.$subscriptions,function(o){return o.id==calendarData.id})||Calendar.$add(calendar),calendar})},Calendar.$addWebCalendar=function(url){var _this=this,d=Calendar.$q.defer();return _.find(_this.$webcalendars,function(o){return o.urls.webCalendarURL==url})?d.reject():Calendar.$$resource.post(null,"addWebCalendar",{url:url}).then(function(calendarData){angular.extend(calendarData,{isWebCalendar:!0,isEditable:!0,isRemote:!1,owner:Calendar.activeUser.login,urls:{webCalendarURL:url}});var calendar=new Calendar(calendarData);Calendar.$add(calendar),Calendar.$$resource.fetch(calendar.id,"reload").then(function(data){Calendar.$log.debug(JSON.stringify(data,void 0,2))}),d.resolve()},function(){d.reject()}),d.promise},Calendar.prototype.init=function(data){angular.extend(this,data),this.isOwned=Calendar.activeUser.isSuperUser||this.owner==Calendar.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=Calendar.activeUser.login},Calendar.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+this.id},Calendar.prototype.$rename=function(name){var i=_.indexOf(_.pluck(Calendar.$calendars,"id"),this.id);return this.name=name,Calendar.$calendars.splice(i,1),Calendar.$add(this),this.$save()},Calendar.prototype.$delete=function(){var list,promise,_this=this,d=Calendar.$q.defer();return this.isSubscription?(promise=Calendar.$$resource.fetch(this.id,"unsubscribe"),list=Calendar.$subscriptions):(promise=Calendar.$$resource.remove(this.id),list=this.isWebCalendar?Calendar.$webcalendars:Calendar.$calendars),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},Calendar.prototype.$save=function(){return Calendar.$$resource.save(this.id,this.$omit()).then(function(data){return data})},Calendar.prototype.$setActivation=function(){return Calendar.$$resource.fetch(this.id,(this.active?"":"de")+"activateFolder")},Calendar.prototype.$getComponent=function(componentId,recurrenceId){return Calendar.$Component.$find(this.id,componentId,recurrenceId)},Calendar.prototype.$omit=function(){var calendar={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(calendar[key]=value)}),calendar}}(),function(){"use strict";function Component(futureComponentData){if("function"!=typeof futureComponentData.then){if(this.init(futureComponentData),this.pid&&!this.id){var newComponentData=Component.$$resource.newguid(this.pid);this.$unwrap(newComponentData),this.isNew=!0}}else this.$unwrap(futureComponentData)}Component.$factory=["$q","$timeout","$log","sgSettings","Preferences","Gravatar","Resource",function($q,$timeout,$log,Settings,Preferences,Gravatar,Resource){return angular.extend(Component,{$q:$q,$timeout:$timeout,$log:$log,$Preferences:Preferences,$gravatar:Gravatar,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),timeFormat:"%H:%M",$query:{value:"",search:"title_Category_Location"},$queryEvents:{sort:"start",asc:1,filterpopup:"view_next7"},$queryTasks:{sort:"status",asc:1,filterpopup:"view_next7"}}),Preferences.ready().then(function(){Component.$queryEvents.filterpopup=Preferences.settings.CalendarDefaultFilter,Component.$queryTasks.show_completed=parseInt(Preferences.settings.ShowCompletedTasks),Component.$categories=Preferences.defaults.SOGoCalendarCategoriesColors,Preferences.defaults.SOGoTimeFormat&&(Component.timeFormat=Preferences.defaults.SOGoTimeFormat)}),Component}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Component",Component.$factory),Component.$filter=function(type,options){var _this=this,now=new Date,day=now.getDate(),month=now.getMonth()+1,year=now.getFullYear(),queryKey="$query"+type.capitalize(),params={day:""+year+(10>month?"0":"")+month+(10>day?"0":"")+day};return this.$Preferences.ready().then(function(){var futureComponentData,otherType,dirty=!1;return angular.extend(_this.$query,params),options&&_.each(_.keys(options),function(key){dirty|=_this.$query[key]&&options[key]!=Component.$query[key],"reload"==key&&options[key]?dirty=!0:angular.isDefined(_this.$query[key])?_this.$query[key]=options[key]:_this[queryKey][key]=options[key]}),futureComponentData=_this.$$resource.fetch(null,type+"list",angular.extend(_this[queryKey],_this.$query)),otherType="tasks"==type?"$events":"$tasks",dirty&&(delete Component[otherType],Component.$log.debug("force reload of "+otherType)),_this.$unwrapCollection(type,futureComponentData)})},Component.$find=function(calendarId,componentId,occurrenceId){var futureComponentData,path=[calendarId,componentId];return occurrenceId&&path.push(occurrenceId),futureComponentData=this.$$resource.fetch(path.join("/"),"view"),new Component(futureComponentData)},Component.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Component.$categories),function(category){return-1!=category.search(re)})},Component.$eventsBlocksForView=function(view,date){var viewAction,startDate,endDate;return"day"==view?(viewAction="dayView",startDate=endDate=date):"week"==view?(viewAction="weekView",startDate=date.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.addDays(6)):"month"==view&&(viewAction="monthView",startDate=date,startDate.setDate(1),startDate=startDate.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.setMonth(endDate.getMonth()+1),endDate.addDays(-1),endDate=endDate.endOfWeek()),this.$eventsBlocks(viewAction,startDate,endDate)},Component.$eventsBlocks=function(view,startDate,endDate){var params,futureComponentData,i,deferred=Component.$q.defer();return params={view:view.toLowerCase(),sd:startDate.getDayString(),ed:endDate.getDayString()},Component.$log.debug("eventsblocks "+JSON.stringify(params,void 0,2)),futureComponentData=this.$$resource.fetch(null,"eventsblocks",params),futureComponentData.then(function(data){Component.$timeout(function(){var components=[],blocks={};for(_.reduce(data.events,function(objects,eventData,i){var componentData=_.object(data.eventsFields,eventData),start=new Date(1e3*componentData.c_startdate);return componentData.hour=start.getHourString(),objects.push(new Component(componentData)),objects},components),_.each(_.flatten(data.blocks),function(block){block.component=components[block.nbr]}),i=0;i1||this.repeat.days&&this.repeat.days.length>0||this.repeat.monthdays&&this.repeat.monthdays.length>0||this.repeat.months&&this.repeat.months.length>0);return b},Component.prototype.isEditable=function(){return!this.occurrenceId&&!this.isReadOnly},Component.prototype.isEditableOccurrence=function(){return this.occurrenceId&&!this.isReadOnly},Component.prototype.isInvitation=function(){return!this.occurrenceId&&this.userHasRSVP},Component.prototype.isInvitationOccurrence=function(){return this.occurrenceId&&this.userHasRSVP},Component.prototype.isReadOnly=function(){return this.isReadOnly&&!this.userHasRSVP},Component.prototype.enablePercentComplete=function(){return this.component="not-specified"!=this.status&&"cancelled"!=this.status},Component.prototype.coversFreeBusy=function(day,hour,quarter){var b=angular.isDefined(this.freebusy[day])&&angular.isDefined(this.freebusy[day][hour])&&1==this.freebusy[day][hour][quarter];return b},Component.prototype.updateFreeBusyCoverage=function(){var _this=this,freebusy={};if(this.start&&this.end){var roundedStart=new Date(this.start.getTime()),roundedEnd=new Date(this.end.getTime()),startQuarter=parseInt(roundedStart.getMinutes()/15+.5),endQuarter=parseInt(roundedEnd.getMinutes()/15+.5);return roundedStart.setMinutes(15*startQuarter),roundedEnd.setMinutes(15*endQuarter),_.each(roundedStart.daysUpTo(roundedEnd),function(date,index){var hourKey,currentDay=date.getDate(),dayKey=date.getDayString();if(dayKey==_this.start.getDayString())for(hourKey=date.getHours().toString(),freebusy[dayKey]={},freebusy[dayKey][hourKey]=[];startQuarter>0;)freebusy[dayKey][hourKey].push(0),startQuarter--;else date=date.beginOfDay(),freebusy[dayKey]={};for(;date.getTime()<_this.end.getTime()&&date.getDate()==currentDay;)hourKey=date.getHours().toString(),angular.isUndefined(freebusy[dayKey][hourKey])&&(freebusy[dayKey][hourKey]=[]),freebusy[dayKey][hourKey].push(1),date.addMinutes(15)}),freebusy}},Component.prototype.updateFreeBusy=function(attendee){var params,url,days;attendee.uid&&(params={sday:this.start.getDayString(),eday:this.end.getDayString()},url=["..","..",attendee.uid,"freebusy.ifb"],days=_.map(this.start.daysUpTo(this.end),function(day){return day.getDayString()}),angular.isUndefined(attendee.freebusy)&&(attendee.freebusy={}),Component.$$resource.fetch(url.join("/"),"ajaxRead",params).then(function(data){_.each(days,function(day){var hour;angular.isUndefined(attendee.freebusy[day])&&(attendee.freebusy[day]={}),angular.isUndefined(data[day])&&(data[day]={});for(var i=0;23>=i;i++)hour=i.toString(),data[day][hour]?attendee.freebusy[day][hour]=[data[day][hour][0],data[day][hour][15],data[day][hour][30],data[day][hour][45]]:attendee.freebusy[day][hour]=[0,0,0,0]})}))},Component.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+(this.destinationCalendar||this.c_folder)},Component.prototype.addAttendee=function(card){var attendee;card&&(attendee={name:card.c_cn,email:card.$preferredEmail(),role:"req-participant",status:"needs-action",uid:card.c_uid},_.find(this.attendees,function(o){return o.email==attendee.email})||(attendee.image=Component.$gravatar(attendee.email,32),this.attendees?this.attendees.push(attendee):this.attendees=[attendee],this.updateFreeBusy(attendee)))},Component.prototype.hasAttendee=function(card){var attendee=_.find(this.attendees,function(attendee){return _.find(card.emails,function(email){return email.value==attendee.email})});return angular.isDefined(attendee)},Component.prototype.canRemindAttendeesByEmail=function(){return"email"==this.alarm.action&&!this.isReadOnly&&this.attendees&&this.attendees.length>0},Component.prototype.addAttachUrl=function(attachUrl){if(angular.isUndefined(this.attachUrls))this.attachUrls=[{value:attachUrl}];else{for(var i=0;i-1&&this.attachUrls.length>index&&this.attachUrls.splice(index,1)},Component.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit(!0)},Component.prototype.$reply=function(){var data,_this=this,path=[this.pid,this.id];return this.occurrenceId&&path.push(this.occurrenceId),data={reply:this.reply,delegatedTo:this.delegatedTo,alarm:this.$hasAlarm?this.alarm:{}},Component.$$resource.save(path.join("/"),data,{action:"rsvpAppointment"}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$save=function(){var options,_this=this,path=[this.pid,this.id];return this.isNew&&(options={action:"saveAs"+this.type.capitalize()}),this.occurrenceId&&path.push(this.occurrenceId),Component.$$resource.save(path.join("/"),this.$omit(),options).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$unwrap=function(futureComponentData){var _this=this;this.$futureComponentData=futureComponentData,this.$futureComponentData.then(function(data){_this.init(data),_this.$shadowData=_this.$omit()},function(data){angular.extend(_this,data),_this.isError=!0,Component.$log.error(_this.error)})},Component.prototype.$omit=function(){function formatTime(dateString){var date=new Date(dateString.substring(0,10)+" "+dateString.substring(11,16)),hours=date.getHours(),minutes=date.getMinutes();return 10>hours&&(hours="0"+hours),10>minutes&&(minutes="0"+minutes),hours+":"+minutes}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startTime=component.startDate?formatTime(component.startDate):"",component.endTime=component.endDate?formatTime(component.endDate):"",this.$hasCustomRepeat?"monthly"==this.repeat.frequency&&this.repeat.month.type&&"byday"==this.repeat.month.type||"yearly"==this.repeat.frequency&&this.repeat.year.byday?(delete component.repeat.monthdays,component.repeat.days=[{day:this.repeat.month.day,occurrence:this.repeat.month.occurrence.toString()}]):this.repeat.month.type&&delete component.repeat.days:this.repeat.frequency&&(component.repeat={frequency:this.repeat.frequency}),this.repeat.frequency?"until"==this.repeat.end&&this.repeat.until?component.repeat.until=this.repeat.until.stringWithSeparator("-"):"count"==this.repeat.end&&this.repeat.count?component.repeat.count=this.repeat.count:(delete component.repeat.until,delete component.repeat.count):delete component.repeat,this.$hasAlarm?!this.alarm.action||"email"!=this.alarm.action||this.attendees&&this.attendees.length>0||(this.alarm.attendees=0,this.alarm.organizer=1):component.alarm={},component}}(); +!function(){"use strict";function Calendar(futureCalendarData){if(this.init(futureCalendarData),this.name&&!this.id){var newCalendarData=Calendar.$$resource.create("createFolder",this.name);angular.extend(this,newCalendarData)}this.id&&(this.$acl=new Calendar.$$Acl("Calendar/"+this.id))}Calendar.$factory=["$q","$timeout","$log","sgSettings","Resource","Component","Acl",function($q,$timeout,$log,Settings,Resource,Component,Acl){return angular.extend(Calendar,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$Component:Component,$$Acl:Acl,activeUser:Settings.activeUser()}),Calendar}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Calendar",Calendar.$factory),Calendar.$add=function(calendar){var list,sibling,i;list=calendar.isWebCalendar?this.$webcalendars:calendar.isSubscription?this.$subscriptions:this.$calendars,sibling=_.find(list,function(o){return"personal"!=o.id&&1===o.name.localeCompare(calendar.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,calendar)},Calendar.$findAll=function(data){var _this=this;return data&&(this.$calendars=[],this.$subscriptions=[],this.$webcalendars=[],angular.forEach(data,function(o,i){var calendar=new Calendar(o);calendar.isWebCalendar?_this.$webcalendars.push(calendar):calendar.isSubscription?_this.$subscriptions.push(calendar):_this.$calendars.push(calendar)})),this.$calendars},Calendar.$get=function(id){var calendar;return calendar=_.find(Calendar.$calendars,function(o){return o.id==id}),calendar||(calendar=_.find(Calendar.$subscriptions,function(o){return o.id==id})),calendar||(calendar=_.find(Calendar.$webcalendars,function(o){return o.id==id})),calendar},Calendar.$subscribe=function(uid,path){var _this=this;return Calendar.$$resource.userResource(uid).fetch(path,"subscribe").then(function(calendarData){var calendar=new Calendar(calendarData);return _.find(_this.$subscriptions,function(o){return o.id==calendarData.id})||Calendar.$add(calendar),calendar})},Calendar.$addWebCalendar=function(url){var _this=this,d=Calendar.$q.defer();return _.find(_this.$webcalendars,function(o){return o.urls.webCalendarURL==url})?d.reject():Calendar.$$resource.post(null,"addWebCalendar",{url:url}).then(function(calendarData){angular.extend(calendarData,{isWebCalendar:!0,isEditable:!0,isRemote:!1,owner:Calendar.activeUser.login,urls:{webCalendarURL:url}});var calendar=new Calendar(calendarData);Calendar.$add(calendar),Calendar.$$resource.fetch(calendar.id,"reload").then(function(data){Calendar.$log.debug(JSON.stringify(data,void 0,2))}),d.resolve()},function(){d.reject()}),d.promise},Calendar.prototype.init=function(data){angular.extend(this,data),this.isOwned=Calendar.activeUser.isSuperUser||this.owner==Calendar.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=Calendar.activeUser.login},Calendar.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+this.id},Calendar.prototype.$rename=function(name){var i=_.indexOf(_.pluck(Calendar.$calendars,"id"),this.id);return this.name=name,Calendar.$calendars.splice(i,1),Calendar.$add(this),this.$save()},Calendar.prototype.$delete=function(){var list,promise,_this=this,d=Calendar.$q.defer();return this.isSubscription?(promise=Calendar.$$resource.fetch(this.id,"unsubscribe"),list=Calendar.$subscriptions):(promise=Calendar.$$resource.remove(this.id),list=this.isWebCalendar?Calendar.$webcalendars:Calendar.$calendars),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},Calendar.prototype.$save=function(){return Calendar.$$resource.save(this.id,this.$omit()).then(function(data){return data})},Calendar.prototype.$setActivation=function(){return Calendar.$$resource.fetch(this.id,(this.active?"":"de")+"activateFolder")},Calendar.prototype.$getComponent=function(componentId,recurrenceId){return Calendar.$Component.$find(this.id,componentId,recurrenceId)},Calendar.prototype.$omit=function(){var calendar={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(calendar[key]=value)}),calendar}}(),function(){"use strict";function Component(futureComponentData){if("function"!=typeof futureComponentData.then){if(this.init(futureComponentData),this.pid&&!this.id){var newComponentData=Component.$$resource.newguid(this.pid);this.$unwrap(newComponentData),this.isNew=!0}}else this.$unwrap(futureComponentData)}Component.$factory=["$q","$timeout","$log","sgSettings","Preferences","Gravatar","Resource",function($q,$timeout,$log,Settings,Preferences,Gravatar,Resource){return angular.extend(Component,{$q:$q,$timeout:$timeout,$log:$log,$Preferences:Preferences,$gravatar:Gravatar,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),timeFormat:"%H:%M",$query:{value:"",search:"title_Category_Location"},$queryEvents:{sort:"start",asc:1,filterpopup:"view_next7"},$queryTasks:{sort:"status",asc:1,filterpopup:"view_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.$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]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit(!0)},Component.prototype.$reply=function(){var data,_this=this,path=[this.pid,this.id];return this.occurrenceId&&path.push(this.occurrenceId),data={reply:this.reply,delegatedTo:this.delegatedTo,alarm:this.$hasAlarm?this.alarm:{}},Component.$$resource.save(path.join("/"),data,{action:"rsvpAppointment"}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$save=function(){var options,_this=this,path=[this.pid,this.id];return this.isNew&&(options={action:"saveAs"+this.type.capitalize()}),this.occurrenceId&&path.push(this.occurrenceId),Component.$$resource.save(path.join("/"),this.$omit(),options).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$unwrap=function(futureComponentData){var _this=this;this.$futureComponentData=futureComponentData,this.$futureComponentData.then(function(data){_this.init(data),_this.$shadowData=_this.$omit()},function(data){angular.extend(_this,data),_this.isError=!0,Component.$log.error(_this.error)})},Component.prototype.$omit=function(){function formatTime(dateString){var date=new Date(dateString.substring(0,10)+" "+dateString.substring(11,16)),hours=date.getHours(),minutes=date.getMinutes();return 10>hours&&(hours="0"+hours),10>minutes&&(minutes="0"+minutes),hours+":"+minutes}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startTime=component.startDate?formatTime(component.startDate):"",component.endTime=component.endDate?formatTime(component.endDate):"",this.$hasCustomRepeat?"monthly"==this.repeat.frequency&&this.repeat.month.type&&"byday"==this.repeat.month.type||"yearly"==this.repeat.frequency&&this.repeat.year.byday?(delete component.repeat.monthdays,component.repeat.days=[{day:this.repeat.month.day,occurrence:this.repeat.month.occurrence.toString()}]):this.repeat.month.type&&delete component.repeat.days:this.repeat.frequency&&(component.repeat={frequency:this.repeat.frequency}),this.repeat.frequency?"until"==this.repeat.end&&this.repeat.until?component.repeat.until=this.repeat.until.stringWithSeparator("-"):"count"==this.repeat.end&&this.repeat.count?component.repeat.count=this.repeat.count:(delete component.repeat.until,delete component.repeat.count):delete component.repeat,this.$hasAlarm?!this.alarm.action||"email"!=this.alarm.action||this.attendees&&this.attendees.length>0||(this.alarm.attendees=0,this.alarm.organizer=1):component.alarm={},component}}(); //# sourceMappingURL=Scheduler.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js.map b/UI/WebServerResources/js/Scheduler.services.js.map index cf2842871..91cedf8c9 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","$get","$subscribe","uid","path","userResource","fetch","then","calendarData","$addWebCalendar","url","d","defer","urls","webCalendarURL","reject","post","isEditable","isRemote","owner","login","debug","JSON","stringify","undefined","resolve","promise","prototype","isOwned","isSuperUser","getClassName","base","isUndefined","$rename","$save","$delete","remove","status","save","$omit","$setActivation","active","$getComponent","componentId","recurrenceId","$find","value","key","futureComponentData","pid","newComponentData","newguid","$unwrap","isNew","Preferences","Gravatar","$Preferences","$gravatar","baseURL","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","ready","settings","CalendarDefaultFilter","show_completed","parseInt","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","isDefined","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","filter","category","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","components","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","component","nbr","length","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","count","until","asDate","$hasCustomRepeat","hasCustomRepeat","units","M","H","D","W","match","exec","SOGoCalendarDefaultReminder","$hasAlarm","destinationCalendar","organizer","email","$image","freebusy","updateFreeBusyCoverage","attendees","attendee","image","updateFreeBusy","b","isReadOnly","isEditableOccurrence","isInvitation","userHasRSVP","isInvitationOccurrence","enablePercentComplete","coversFreeBusy","quarter","roundedStart","roundedEnd","startQuarter","getMinutes","endQuarter","setMinutes","daysUpTo","index","hourKey","currentDay","dayKey","getHours","beginOfDay","addMinutes","sday","eday","map","c_folder","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","dateString","hours","minutes","copy","startTime","endTime","stringWithSeparator"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Calendar\n * @constructor\n * @param {object} futureCalendarData - either an object literal or a promise\n */\n function Calendar(futureCalendarData) {\n // Data is immediately available\n this.init(futureCalendarData);\n if (this.name && !this.id) {\n // Create a new calendar on the server\n var newCalendarData = Calendar.$$resource.create('createFolder', this.name);\n angular.extend(this, newCalendarData);\n }\n if (this.id) {\n this.$acl = new Calendar.$$Acl('Calendar/' + this.id);\n }\n }\n\n /**\n * @memberof Calendar\n * @desc The factory we'll use to register with Angular\n * @returns the Calendar constructor\n */\n Calendar.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Component', 'Acl', function($q, $timeout, $log, Settings, Resource, Component, Acl) {\n angular.extend(Calendar, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $Component: Component,\n $$Acl: Acl,\n activeUser: Settings.activeUser()\n });\n\n return Calendar; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Calendar in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Calendar', Calendar.$factory);\n\n /**\n * @memberof Calendar\n * @desc Add a new calendar to the static list of calendars\n * @param {Calendar} calendar - an Calendar object instance\n */\n Calendar.$add = function(calendar) {\n // Insert new calendar at proper index\n var list, sibling, i;\n\n if (calendar.isWebCalendar)\n list = this.$webcalendars;\n else if (calendar.isSubscription)\n list = this.$subscriptions;\n else\n list = this.$calendars;\n\n sibling = _.find(list, function(o) {\n return (o.id != 'personal' &&\n o.name.localeCompare(calendar.name) === 1);\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, calendar);\n };\n\n /**\n * @memberof Calendar\n * @desc Set or get the list of calendars. Will instanciate a new Calendar object for each item.\n * @param {object[]} [data] - the metadata of the calendars\n * @returns the list of calendars\n */\n Calendar.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$calendars = [];\n this.$subscriptions = [];\n this.$webcalendars = [];\n // Instanciate Calendar objects\n angular.forEach(data, function(o, i) {\n var calendar = new Calendar(o);\n if (calendar.isWebCalendar)\n _this.$webcalendars.push(calendar);\n else if (calendar.isSubscription)\n _this.$subscriptions.push(calendar);\n else\n _this.$calendars.push(calendar);\n });\n }\n return this.$calendars;\n };\n\n /**\n * @memberof Calendar\n * @desc Find a calendar among local instances (personal calendars, subscriptions and Web calendars).\n * @param {string} id - the calendar ID\n * @returns an object literal of the matching Calendar instance\n */\n Calendar.$get = function(id) {\n var calendar;\n\n calendar = _.find(Calendar.$calendars, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$subscriptions, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$webcalendars, function(o) { return o.id == id; });\n\n return calendar;\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to another user's calendar and add it to the list of calendars.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n Calendar.$subscribe = function(uid, path) {\n var _this = this;\n return Calendar.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(calendarData) {\n var calendar = new Calendar(calendarData);\n if (!_.find(_this.$subscriptions, function(o) {\n return o.id == calendarData.id;\n })) {\n Calendar.$add(calendar);\n }\n return calendar;\n });\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to a remote Web calendar\n * @param {string} url - URL of .ics file\n * @returns a promise of the HTTP query result\n */\n Calendar.$addWebCalendar = function(url) {\n var _this = this,\n d = Calendar.$q.defer();\n\n if (_.find(_this.$webcalendars, function(o) {\n return o.urls.webCalendarURL == url;\n })) {\n // Already subscribed\n d.reject();\n }\n else {\n Calendar.$$resource.post(null, 'addWebCalendar', { url: url }).then(function(calendarData) {\n angular.extend(calendarData, {\n isWebCalendar: true,\n isEditable: true,\n isRemote: false,\n owner: Calendar.activeUser.login,\n urls: { webCalendarURL: url }\n });\n var calendar = new Calendar(calendarData);\n Calendar.$add(calendar);\n Calendar.$$resource.fetch(calendar.id, 'reload').then(function(data) {\n // TODO: show a toast of the reload status\n Calendar.$log.debug(JSON.stringify(data, undefined, 2));\n });\n d.resolve();\n }, function() {\n d.reject();\n });\n }\n\n return d.promise;\n };\n\n /**\n * @function init\n * @memberof Calendar.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of calendar\n */\n Calendar.prototype.init = function(data) {\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = Calendar.activeUser.isSuperUser || this.owner == Calendar.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != Calendar.activeUser.login;\n };\n\n /**\n * @function getClassName\n * @memberof Calendar.prototype\n * @desc Return the calendar CSS class name based on its ID.\n * @returns a string representing the foreground CSS class name\n */\n Calendar.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + this.id;\n };\n\n /**\n * @function $rename\n * @memberof Calendar.prototype\n * @desc Rename the calendar and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(Calendar.$calendars, 'id'), this.id);\n this.name = name;\n Calendar.$calendars.splice(i, 1);\n Calendar.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof Calendar.prototype\n * @desc Delete the calendar from the server and the static list of calendars.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$delete = function() {\n var _this = this,\n d = Calendar.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = Calendar.$$resource.fetch(this.id, 'unsubscribe');\n list = Calendar.$subscriptions;\n }\n else {\n promise = Calendar.$$resource.remove(this.id);\n if (this.isWebCalendar)\n list = Calendar.$webcalendars;\n else\n list = Calendar.$calendars;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $save\n * @memberof Calendar.prototype\n * @desc Save the calendar properties to the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$save = function() {\n return Calendar.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $setActivation\n * @memberof Calendar.prototype\n * @desc Either activate or deactivate the calendar.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$setActivation = function() {\n return Calendar.$$resource.fetch(this.id, (this.active?'':'de') + 'activateFolder');\n };\n\n /**\n * @function $getComponent\n * @memberof Calendar.prototype\n * @desc Fetch a component attributes from the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$getComponent = function(componentId, recurrenceId) {\n return Calendar.$Component.$find(this.id, componentId, recurrenceId);\n };\n\n /**\n * @function $omit\n * @memberof Calendar.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Calendar instance\n */\n Calendar.prototype.$omit = function() {\n var calendar = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key[0] != '$') {\n calendar[key] = value;\n }\n });\n return calendar;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Component\n * @constructor\n * @param {object} futureComponentData - either an object literal or a promise\n */\n function Component(futureComponentData) {\n // Data is immediately available\n if (typeof futureComponentData.then !== 'function') {\n this.init(futureComponentData);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new component;\n // Get UID from the server.\n var newComponentData = Component.$$resource.newguid(this.pid);\n this.$unwrap(newComponentData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureComponentData);\n }\n }\n\n /**\n * @memberof Component\n * @desc The factory we'll use to register with Angular\n * @returns the Component constructor\n */\n Component.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Preferences', 'Gravatar', 'Resource', function($q, $timeout, $log, Settings, Preferences, Gravatar, Resource) {\n angular.extend(Component, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Preferences: Preferences,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n timeFormat: \"%H:%M\",\n // Filter parameters common to events and tasks\n $query: { value: '', search: 'title_Category_Location' },\n // Filter paramaters specific to events\n $queryEvents: { sort: 'start', asc: 1, filterpopup: 'view_next7' },\n // Filter parameters specific to tasks\n $queryTasks: { sort: 'status', asc: 1, filterpopup: 'view_next7' } //'view_incomplete' }\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n Component.$queryEvents.filterpopup = Preferences.settings.CalendarDefaultFilter;\n Component.$queryTasks.show_completed = parseInt(Preferences.settings.ShowCompletedTasks);\n // Initialize categories from user's defaults\n Component.$categories = Preferences.defaults.SOGoCalendarCategoriesColors;\n // Initialize time format from user's defaults\n if (Preferences.defaults.SOGoTimeFormat) {\n Component.timeFormat = Preferences.defaults.SOGoTimeFormat;\n }\n });\n\n return Component; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Component in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Component', Component.$factory);\n\n /**\n * @function $filter\n * @memberof Component.prototype\n * @desc Search for components matching some criterias\n * @param {string} type - either 'events' or 'tasks'\n * @param {object} [options] - additional options to the query\n * @returns a collection of Components instances\n */\n Component.$filter = function(type, options) {\n var _this = this,\n now = new Date(),\n day = now.getDate(),\n month = now.getMonth() + 1,\n year = now.getFullYear(),\n queryKey = '$query' + type.capitalize(),\n params = {\n day: '' + year + (month < 10?'0':'') + month + (day < 10?'0':'') + day,\n };\n\n return this.$Preferences.ready().then(function() {\n var futureComponentData,\n dirty = false,\n otherType;\n\n angular.extend(_this.$query, params);\n\n if (options) {\n _.each(_.keys(options), function(key) {\n // Query parameters common to events and tasks are compared\n dirty |= (_this.$query[key] && options[key] != Component.$query[key]);\n if (key == 'reload' && options[key])\n dirty = true;\n // Update either the common parameters or the type-specific parameters\n else if (angular.isDefined(_this.$query[key]))\n _this.$query[key] = options[key];\n else\n _this[queryKey][key] = options[key];\n });\n }\n\n // Perform query with both common and type-specific parameters\n futureComponentData = _this.$$resource.fetch(null, type + 'list',\n angular.extend(_this[queryKey], _this.$query));\n\n // Invalidate cached results of other type if $query has changed\n otherType = (type == 'tasks')? '$events' : '$tasks';\n if (dirty) {\n delete Component[otherType];\n Component.$log.debug('force reload of ' + otherType);\n }\n\n return _this.$unwrapCollection(type, futureComponentData);\n });\n };\n\n /**\n * @function $find\n * @desc Fetch a component from a specific calendar.\n * @param {string} calendarId - the calendar ID\n * @param {string} componentId - the component ID\n * @param {string} [occurrenceId] - the component ID\n * @see {@link Calendar.$getComponent}\n */\n Component.$find = function(calendarId, componentId, occurrenceId) {\n var futureComponentData, path = [calendarId, componentId];\n\n if (occurrenceId)\n path.push(occurrenceId);\n\n futureComponentData = this.$$resource.fetch(path.join('/'), 'view');\n\n return new Component(futureComponentData);\n };\n\n /**\n * @function filterCategories\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Component.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Component.$categories), function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @function $eventsBlocksForView\n * @desc Events blocks for a specific week\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} type - Date of any day of the desired period\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocksForView = function(view, date) {\n var viewAction, startDate, endDate, params;\n\n if (view == 'day') {\n viewAction = 'dayView';\n startDate = endDate = date;\n }\n else if (view == 'week') {\n viewAction = 'weekView';\n startDate = date.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.addDays(6);\n }\n else if (view == 'month') {\n viewAction = 'monthView';\n startDate = date;\n startDate.setDate(1);\n startDate = startDate.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.addDays(-1);\n endDate = endDate.endOfWeek();\n }\n return this.$eventsBlocks(viewAction, startDate, endDate);\n };\n\n /**\n * @function $eventsBlocks\n * @desc Events blocks for a specific view and period\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} startDate - period's start date\n * @param {Date} endDate - period's end date\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocks = function(view, startDate, endDate) {\n var params, futureComponentData, i,\n deferred = Component.$q.defer();\n\n params = { view: view.toLowerCase(), sd: startDate.getDayString(), ed: endDate.getDayString() };\n Component.$log.debug('eventsblocks ' + JSON.stringify(params, undefined, 2));\n futureComponentData = this.$$resource.fetch(null, 'eventsblocks', params);\n futureComponentData.then(function(data) {\n Component.$timeout(function() {\n var components = [], blocks = {};\n\n // Instantiate Component objects\n _.reduce(data.events, function(objects, eventData, i) {\n var componentData = _.object(data.eventsFields, eventData),\n start = new Date(componentData.c_startdate * 1000);\n componentData.hour = start.getHourString();\n objects.push(new Component(componentData));\n return objects;\n }, components);\n\n // Associate Component objects to blocks positions\n _.each(_.flatten(data.blocks), function(block) {\n block.component = components[block.nbr];\n });\n\n // Convert array of blocks to object with days as keys\n for (i = 0; i < data.blocks.length; i++) {\n blocks[startDate.getDayString()] = data.blocks[i];\n startDate.addDays(1);\n }\n\n Component.$log.debug('blocks ready (' + _.keys(blocks).length + ')');\n\n // Save the blocks to the object model\n Component.$blocks = blocks;\n\n deferred.resolve(blocks);\n });\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapCollection\n * @desc Unwrap a promise and instanciate new Component objects using received data.\n * @param {string} type - either 'events' or 'tasks'\n * @param {promise} futureComponentData - a promise of the components' metadata\n * @returns a promise of the HTTP operation\n */\n Component.$unwrapCollection = function(type, futureComponentData) {\n var _this = this,\n components = [];\n\n return futureComponentData.then(function(data) {\n return Component.$timeout(function() {\n var fields = _.invoke(data.fields, 'toLowerCase');\n\n // Instanciate Component objects\n _.reduce(data[type], function(components, componentData, i) {\n var data = _.object(fields, componentData);\n components.push(new Component(data));\n return components;\n }, components);\n\n Component.$log.debug('list of ' + type + ' ready (' + components.length + ')');\n\n // Save the list of components to the object model\n Component['$' + type] = components;\n\n return components;\n });\n });\n };\n\n /**\n * @function init\n * @memberof Component.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of component\n */\n Component.prototype.init = function(data) {\n var _this = this;\n\n this.categories = [];\n this.repeat = {};\n this.alarm = { action: 'display', quantity: 5, unit: 'MINUTES', reference: 'BEFORE', relation: 'START' };\n this.status = 'not-specified';\n angular.extend(this, data);\n\n Component.$Preferences.ready().then(function() {\n var type = (_this.type == 'appointment')? 'Events' : 'Tasks';\n\n // Set default values from user's defaults\n _this.classification = _this.classification ||\n Component.$Preferences.defaults['SOGoCalendar' + type + 'DefaultClassification'].toLowerCase();\n });\n\n if (this.startDate)\n this.start = new Date(this.startDate.substring(0,10) + ' ' + this.startDate.substring(11,16));\n if (this.endDate)\n this.end = new Date(this.endDate.substring(0,10) + ' ' + this.endDate.substring(11,16));\n if (this.dueDate)\n this.due = new Date(this.dueDate.substring(0,10) + ' ' + this.dueDate.substring(11,16));\n\n // Parse recurrence rule definition and initialize default values\n this.$isRecurrent = angular.isDefined(data.repeat);\n if (this.repeat.days) {\n var byDayMask = _.find(this.repeat.days, function(o) {\n return angular.isDefined(o.occurrence);\n });\n if (byDayMask)\n if (this.repeat.frequency == 'yearly')\n this.repeat.year = { byday: true };\n this.repeat.month = {\n type: 'byday',\n occurrence: byDayMask.occurrence.toString(),\n day: byDayMask.day\n };\n }\n else {\n this.repeat.days = [];\n }\n if (angular.isUndefined(this.repeat.frequency))\n this.repeat.frequency = 'never';\n if (angular.isUndefined(this.repeat.interval))\n this.repeat.interval = 1;\n if (angular.isUndefined(this.repeat.month))\n this.repeat.month = { occurrence: '1', day: 'SU', type: 'bymonthday' };\n if (angular.isUndefined(this.repeat.monthdays))\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n this.repeat.months = [];\n if (angular.isUndefined(this.repeat.year))\n this.repeat.year = {};\n if (this.repeat.count)\n this.repeat.end = 'count';\n else if (this.repeat.until) {\n this.repeat.end = 'until';\n this.repeat.until = this.repeat.until.substring(0,10).asDate();\n }\n else\n this.repeat.end = 'never';\n this.$hasCustomRepeat = this.hasCustomRepeat();\n\n if (this.isNew) {\n // Set default alarm\n Component.$Preferences.ready().then(function() {\n var units = { M: 'MINUTES', H: 'HOURS', D: 'DAYS', W: 'WEEKS' };\n var match = /-PT?([0-9]+)([MHDW])/.exec(Component.$Preferences.defaults.SOGoCalendarDefaultReminder);\n if (match) {\n _this.$hasAlarm = true;\n _this.alarm.quantity = parseInt(match[1]);\n _this.alarm.unit = units[match[2]];\n }\n });\n }\n else {\n this.$hasAlarm = angular.isDefined(data.alarm);\n }\n\n // Allow the component to be moved to a different calendar\n this.destinationCalendar = this.pid;\n\n if (this.organizer && this.organizer.email) {\n this.organizer.$image = Component.$gravatar(this.organizer.email, 32);\n }\n\n // Load freebusy of attendees\n this.freebusy = this.updateFreeBusyCoverage();\n\n if (this.attendees) {\n _.each(this.attendees, function(attendee) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n _this.updateFreeBusy(attendee);\n });\n }\n };\n\n /**\n * @function hasCustomRepeat\n * @memberof Component.prototype\n * @desc Check if the component has a custom recurrence rule.\n * @returns true if the recurrence rule requires the full recurrence editor\n */\n Component.prototype.hasCustomRepeat = function() {\n var b = angular.isDefined(this.repeat) &&\n (this.repeat.interval > 1 ||\n this.repeat.days && this.repeat.days.length > 0 ||\n this.repeat.monthdays && this.repeat.monthdays.length > 0 ||\n this.repeat.months && this.repeat.months.length > 0);\n return b;\n };\n\n /**\n * @function isEditable\n * @memberof Component.prototype\n * @desc Check if the component is editable and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditable = function() {\n return (!this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isEditableOccurrence\n * @memberof Component.prototype\n * @desc Check if the component is editable and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditableOccurrence = function() {\n return (this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isInvitation\n * @memberof Component.prototype\n * @desc Check if the component an invitation and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitation = function() {\n return (!this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isInvitationOccurrence\n * @memberof Component.prototype\n * @desc Check if the component an invitation and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitationOccurrence = function() {\n return (this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isReadOnly\n * @memberof Component.prototype\n * @desc Check if the component is not editable and not an invitation\n * @returns true or false\n */\n Component.prototype.isReadOnly = function() {\n return (this.isReadOnly && !this.userHasRSVP);\n };\n\n /**\n * @function enablePercentComplete\n * @memberof Component.prototype\n * @desc Check if the percent completion should be enabled with respect to the\n * component's type and status.\n * @returns true if the percent completion should be displayed\n */\n Component.prototype.enablePercentComplete = function() {\n return (this.component = 'vtodo' &&\n this.status != 'not-specified' &&\n this.status != 'cancelled');\n };\n\n /**\n * @function coversFreeBusy\n * @memberof Component.prototype\n * @desc Check if a specific quarter matches the component's period\n * @returns true if the quarter covers the component's period\n */\n Component.prototype.coversFreeBusy = function(day, hour, quarter) {\n var b = (angular.isDefined(this.freebusy[day]) &&\n angular.isDefined(this.freebusy[day][hour]) &&\n this.freebusy[day][hour][quarter] == 1);\n return b;\n };\n\n /**\n * @function updateFreeBusyCoverage\n * @memberof Component.prototype\n * @desc Build a 15-minute-based representation of the component's period.\n * @returns an object literal hashed by days and hours and arrays of four 1's and 0's\n */\n Component.prototype.updateFreeBusyCoverage = function() {\n var _this = this, freebusy = {};\n\n if (this.start && this.end) {\n var roundedStart = new Date(this.start.getTime()),\n roundedEnd = new Date(this.end.getTime()),\n startQuarter = parseInt(roundedStart.getMinutes()/15 + 0.5),\n endQuarter = parseInt(roundedEnd.getMinutes()/15 + 0.5);\n roundedStart.setMinutes(15*startQuarter);\n roundedEnd.setMinutes(15*endQuarter);\n\n _.each(roundedStart.daysUpTo(roundedEnd), function(date, index) {\n var currentDay = date.getDate(),\n dayKey = date.getDayString(),\n hourKey;\n if (dayKey == _this.start.getDayString()) {\n hourKey = date.getHours().toString();\n freebusy[dayKey] = {};\n freebusy[dayKey][hourKey] = [];\n while (startQuarter > 0) {\n freebusy[dayKey][hourKey].push(0);\n startQuarter--;\n }\n }\n else {\n date = date.beginOfDay();\n freebusy[dayKey] = {};\n }\n while (date.getTime() < _this.end.getTime() &&\n date.getDate() == currentDay) {\n hourKey = date.getHours().toString();\n if (angular.isUndefined(freebusy[dayKey][hourKey]))\n freebusy[dayKey][hourKey] = [];\n freebusy[dayKey][hourKey].push(1);\n date.addMinutes(15);\n }\n });\n return freebusy;\n }\n };\n\n /**\n * @function updateFreeBusy\n * @memberof Component.prototype\n * @desc Update the freebusy information for the component's period for a specific attendee.\n * @param {Object} card - an Card object instance of the attendee\n */\n Component.prototype.updateFreeBusy = function(attendee) {\n var params, url, days;\n if (attendee.uid) {\n params =\n {\n sday: this.start.getDayString(),\n eday: this.end.getDayString()\n };\n url = ['..', '..', attendee.uid, 'freebusy.ifb'];\n days = _.map(this.start.daysUpTo(this.end), function(day) { return day.getDayString(); });\n\n if (angular.isUndefined(attendee.freebusy))\n attendee.freebusy = {};\n\n // Fetch FreeBusy information\n Component.$$resource.fetch(url.join('/'), 'ajaxRead', params).then(function(data) {\n _.each(days, function(day) {\n var hour;\n\n if (angular.isUndefined(attendee.freebusy[day]))\n attendee.freebusy[day] = {};\n\n if (angular.isUndefined(data[day]))\n data[day] = {};\n\n for (var i = 0; i <= 23; i++) {\n hour = i.toString();\n if (data[day][hour])\n attendee.freebusy[day][hour] = [\n data[day][hour][\"0\"],\n data[day][hour][\"15\"],\n data[day][hour][\"30\"],\n data[day][hour][\"45\"]\n ];\n else\n attendee.freebusy[day][hour] = [0, 0, 0, 0];\n }\n });\n });\n }\n };\n\n /**\n * @function getClassName\n * @memberof Component.prototype\n * @desc Return the component CSS class name based on its container (calendar) ID.\n * @param {string} [base] - the prefix to add to the class name (defaults to \"fg\")\n * @returns a string representing the foreground CSS class name\n */\n Component.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + (this.destinationCalendar || this.c_folder);\n };\n\n /**\n * @function addAttendee\n * @memberof Component.prototype\n * @desc Add an attendee and fetch his freebusy info.\n * @param {Object} card - an Card object instance to be added to the attendees list\n */\n Component.prototype.addAttendee = function(card) {\n var attendee, url, params;\n if (card) {\n attendee = {\n name: card.c_cn,\n email: card.$preferredEmail(),\n role: 'req-participant',\n status: 'needs-action',\n uid: card.c_uid\n };\n if (!_.find(this.attendees, function(o) {\n return o.email == attendee.email;\n })) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n if (this.attendees)\n this.attendees.push(attendee);\n else\n this.attendees = [attendee];\n this.updateFreeBusy(attendee);\n }\n }\n };\n\n /**\n * @function hasAttendee\n * @memberof Component.prototype\n * @desc Verify if one of the email addresses of a Card instance matches an attendee.\n * @param {Object} card - an Card object instance\n * @returns true if the Card matches an attendee\n */\n Component.prototype.hasAttendee = function(card) {\n var attendee = _.find(this.attendees, function(attendee) {\n return _.find(card.emails, function(email) {\n return email.value == attendee.email;\n });\n });\n return angular.isDefined(attendee);\n };\n\n /**\n * @function canRemindAttendeesByEmail\n * @memberof Component.prototype\n * @desc Verify if the component's reminder must be send by email and if it has at least one attendee.\n * @returns true if attendees can receive a reminder by email\n */\n Component.prototype.canRemindAttendeesByEmail = function() {\n return this.alarm.action == 'email' &&\n !this.isReadOnly &&\n this.attendees && this.attendees.length > 0;\n };\n\n /**\n * @function addAttachUrl\n * @memberof Component.prototype\n * @desc Add a new attach URL if not already defined\n * @param {string} attachUrl - the URL\n * @returns the number of values in the list of attach URLs\n */\n Component.prototype.addAttachUrl = function(attachUrl) {\n if (angular.isUndefined(this.attachUrls)) {\n this.attachUrls = [{value: attachUrl}];\n }\n else {\n for (var i = 0; i < this.attachUrls.length; i++) {\n if (this.attachUrls[i].value == attachUrl) {\n break;\n }\n }\n if (i == this.attachUrls.length)\n this.attachUrls.push({value: attachUrl});\n }\n return this.attachUrls.length - 1;\n };\n\n /**\n * @function deleteAttachUrl\n * @memberof Component.prototype\n * @desc Remove an attach URL\n * @param {number} index - the URL index in the list of attach URLs\n */\n Component.prototype.deleteAttachUrl = function(index) {\n if (index > -1 && this.attachUrls.length > index) {\n this.attachUrls.splice(index, 1);\n }\n };\n\n /**\n * @function $reset\n * @memberof Component.prototype\n * @desc Reset the original state the component's data.\n */\n Component.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function reply\n * @memberof Component.prototype\n * @desc Reply to an invitation.\n * @returns a promise of the HTTP operation\n */\n Component.prototype.$reply = function() {\n var _this = this, data, path = [this.pid, this.id];\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n data = {\n reply: this.reply,\n delegatedTo: this.delegatedTo,\n alarm: this.$hasAlarm? this.alarm : {}\n };\n\n return Component.$$resource.save(path.join('/'), data, { action: 'rsvpAppointment' })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $save\n * @memberof Component.prototype\n * @desc Save the component to the server.\n */\n Component.prototype.$save = function() {\n var _this = this, options, path = [this.pid, this.id];\n\n if (this.isNew)\n options = { action: 'saveAs' + this.type.capitalize() };\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n return Component.$$resource.save(path.join('/'), this.$omit(), options)\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof Component.prototype\n * @desc Unwrap a promise.\n * @param {promise} futureComponentData - a promise of some of the Component's data\n */\n Component.prototype.$unwrap = function(futureComponentData) {\n var _this = this;\n\n // Expose the promise\n this.$futureComponentData = futureComponentData;\n\n // Resolve the promise\n this.$futureComponentData.then(function(data) {\n _this.init(data);\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Component.$log.error(_this.error);\n });\n };\n\n /**\n * @function $omit\n * @memberof Component.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Component instance\n */\n Component.prototype.$omit = function() {\n var component = {}, date;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n component[key] = angular.copy(value);\n }\n });\n\n // Format times\n component.startTime = component.startDate ? formatTime(component.startDate) : '';\n component.endTime = component.endDate ? formatTime(component.endDate) : '';\n\n // Update recurrence definition depending on selections\n if (this.$hasCustomRepeat) {\n if (this.repeat.frequency == 'monthly' && this.repeat.month.type && this.repeat.month.type == 'byday' ||\n this.repeat.frequency == 'yearly' && this.repeat.year.byday) {\n // BYDAY mask for a monthly or yearly recurrence\n delete component.repeat.monthdays;\n component.repeat.days = [{ day: this.repeat.month.day, occurrence: this.repeat.month.occurrence.toString() }];\n }\n else if (this.repeat.month.type) {\n // montly recurrence by month days or yearly by month\n delete component.repeat.days;\n }\n }\n else if (this.repeat.frequency) {\n component.repeat = { frequency: this.repeat.frequency };\n }\n if (this.repeat.frequency) {\n if (this.repeat.end == 'until' && this.repeat.until)\n component.repeat.until = this.repeat.until.stringWithSeparator('-');\n else if (this.repeat.end == 'count' && this.repeat.count)\n component.repeat.count = this.repeat.count;\n else {\n delete component.repeat.until;\n delete component.repeat.count;\n }\n }\n else {\n delete component.repeat;\n }\n\n if (this.$hasAlarm) {\n if (this.alarm.action && this.alarm.action == 'email' &&\n !(this.attendees && this.attendees.length > 0)) {\n // No attendees; email reminder must be sent to organizer only\n this.alarm.attendees = 0;\n this.alarm.organizer = 1;\n }\n }\n else {\n component.alarm = {};\n }\n\n function formatTime(dateString) {\n // YYYY-MM-DDTHH:MM-ZZ:00 => YYYY-MM-DD HH:MM\n var date = new Date(dateString.substring(0,10) + ' ' + dateString.substring(11,16)),\n hours = date.getHours(),\n minutes = date.getMinutes();\n\n if (hours < 10) hours = '0' + hours;\n if (minutes < 10) minutes = '0' + minutes;\n\n return hours + ':' + minutes;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Calendar.service.js","Scheduler/Component.service.js"],"names":["Calendar","futureCalendarData","this","init","name","id","newCalendarData","$$resource","create","angular","extend","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Component","Acl","activeUser","$Component","module","e","factory","$add","calendar","list","sibling","i","isWebCalendar","$webcalendars","isSubscription","$subscriptions","$calendars","_","find","o","localeCompare","indexOf","pluck","splice","$findAll","data","_this","forEach","push","$get","$subscribe","uid","path","userResource","fetch","then","calendarData","$addWebCalendar","url","d","defer","urls","webCalendarURL","reject","post","isEditable","isRemote","owner","login","debug","JSON","stringify","undefined","resolve","promise","prototype","isOwned","isSuperUser","getClassName","base","isUndefined","$rename","$save","$delete","remove","status","save","$omit","$setActivation","active","$getComponent","componentId","recurrenceId","$find","value","key","futureComponentData","pid","newComponentData","newguid","$unwrap","isNew","Preferences","Gravatar","$Preferences","$gravatar","baseURL","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","ready","settings","EventsFilterState","TasksFilterState","EventsSortingState","parseInt","TasksSortingState","show_completed","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","isDefined","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","filter","category","saveSelectedList","componentType","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","components","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","component","nbr","length","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","count","until","asDate","$hasCustomRepeat","hasCustomRepeat","units","M","H","D","W","match","exec","SOGoCalendarDefaultReminder","$hasAlarm","destinationCalendar","organizer","email","$image","freebusy","updateFreeBusyCoverage","attendees","attendee","image","updateFreeBusy","b","isReadOnly","isEditableOccurrence","isInvitation","userHasRSVP","isInvitationOccurrence","enablePercentComplete","coversFreeBusy","quarter","roundedStart","roundedEnd","startQuarter","getMinutes","endQuarter","setMinutes","daysUpTo","index","hourKey","currentDay","dayKey","getHours","beginOfDay","addMinutes","sday","eday","map","c_folder","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","dateString","hours","minutes","copy","startTime","endTime","stringWithSeparator"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Calendar\n * @constructor\n * @param {object} futureCalendarData - either an object literal or a promise\n */\n function Calendar(futureCalendarData) {\n // Data is immediately available\n this.init(futureCalendarData);\n if (this.name && !this.id) {\n // Create a new calendar on the server\n var newCalendarData = Calendar.$$resource.create('createFolder', this.name);\n angular.extend(this, newCalendarData);\n }\n if (this.id) {\n this.$acl = new Calendar.$$Acl('Calendar/' + this.id);\n }\n }\n\n /**\n * @memberof Calendar\n * @desc The factory we'll use to register with Angular\n * @returns the Calendar constructor\n */\n Calendar.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Component', 'Acl', function($q, $timeout, $log, Settings, Resource, Component, Acl) {\n angular.extend(Calendar, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $Component: Component,\n $$Acl: Acl,\n activeUser: Settings.activeUser()\n });\n\n return Calendar; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Calendar in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Calendar', Calendar.$factory);\n\n /**\n * @memberof Calendar\n * @desc Add a new calendar to the static list of calendars\n * @param {Calendar} calendar - an Calendar object instance\n */\n Calendar.$add = function(calendar) {\n // Insert new calendar at proper index\n var list, sibling, i;\n\n if (calendar.isWebCalendar)\n list = this.$webcalendars;\n else if (calendar.isSubscription)\n list = this.$subscriptions;\n else\n list = this.$calendars;\n\n sibling = _.find(list, function(o) {\n return (o.id != 'personal' &&\n o.name.localeCompare(calendar.name) === 1);\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, calendar);\n };\n\n /**\n * @memberof Calendar\n * @desc Set or get the list of calendars. Will instanciate a new Calendar object for each item.\n * @param {object[]} [data] - the metadata of the calendars\n * @returns the list of calendars\n */\n Calendar.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$calendars = [];\n this.$subscriptions = [];\n this.$webcalendars = [];\n // Instanciate Calendar objects\n angular.forEach(data, function(o, i) {\n var calendar = new Calendar(o);\n if (calendar.isWebCalendar)\n _this.$webcalendars.push(calendar);\n else if (calendar.isSubscription)\n _this.$subscriptions.push(calendar);\n else\n _this.$calendars.push(calendar);\n });\n }\n return this.$calendars;\n };\n\n /**\n * @memberof Calendar\n * @desc Find a calendar among local instances (personal calendars, subscriptions and Web calendars).\n * @param {string} id - the calendar ID\n * @returns an object literal of the matching Calendar instance\n */\n Calendar.$get = function(id) {\n var calendar;\n\n calendar = _.find(Calendar.$calendars, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$subscriptions, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$webcalendars, function(o) { return o.id == id; });\n\n return calendar;\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to another user's calendar and add it to the list of calendars.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n Calendar.$subscribe = function(uid, path) {\n var _this = this;\n return Calendar.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(calendarData) {\n var calendar = new Calendar(calendarData);\n if (!_.find(_this.$subscriptions, function(o) {\n return o.id == calendarData.id;\n })) {\n Calendar.$add(calendar);\n }\n return calendar;\n });\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to a remote Web calendar\n * @param {string} url - URL of .ics file\n * @returns a promise of the HTTP query result\n */\n Calendar.$addWebCalendar = function(url) {\n var _this = this,\n d = Calendar.$q.defer();\n\n if (_.find(_this.$webcalendars, function(o) {\n return o.urls.webCalendarURL == url;\n })) {\n // Already subscribed\n d.reject();\n }\n else {\n Calendar.$$resource.post(null, 'addWebCalendar', { url: url }).then(function(calendarData) {\n angular.extend(calendarData, {\n isWebCalendar: true,\n isEditable: true,\n isRemote: false,\n owner: Calendar.activeUser.login,\n urls: { webCalendarURL: url }\n });\n var calendar = new Calendar(calendarData);\n Calendar.$add(calendar);\n Calendar.$$resource.fetch(calendar.id, 'reload').then(function(data) {\n // TODO: show a toast of the reload status\n Calendar.$log.debug(JSON.stringify(data, undefined, 2));\n });\n d.resolve();\n }, function() {\n d.reject();\n });\n }\n\n return d.promise;\n };\n\n /**\n * @function init\n * @memberof Calendar.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of calendar\n */\n Calendar.prototype.init = function(data) {\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = Calendar.activeUser.isSuperUser || this.owner == Calendar.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != Calendar.activeUser.login;\n };\n\n /**\n * @function getClassName\n * @memberof Calendar.prototype\n * @desc Return the calendar CSS class name based on its ID.\n * @returns a string representing the foreground CSS class name\n */\n Calendar.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + this.id;\n };\n\n /**\n * @function $rename\n * @memberof Calendar.prototype\n * @desc Rename the calendar and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(Calendar.$calendars, 'id'), this.id);\n this.name = name;\n Calendar.$calendars.splice(i, 1);\n Calendar.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof Calendar.prototype\n * @desc Delete the calendar from the server and the static list of calendars.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$delete = function() {\n var _this = this,\n d = Calendar.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = Calendar.$$resource.fetch(this.id, 'unsubscribe');\n list = Calendar.$subscriptions;\n }\n else {\n promise = Calendar.$$resource.remove(this.id);\n if (this.isWebCalendar)\n list = Calendar.$webcalendars;\n else\n list = Calendar.$calendars;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $save\n * @memberof Calendar.prototype\n * @desc Save the calendar properties to the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$save = function() {\n return Calendar.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $setActivation\n * @memberof Calendar.prototype\n * @desc Either activate or deactivate the calendar.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$setActivation = function() {\n return Calendar.$$resource.fetch(this.id, (this.active?'':'de') + 'activateFolder');\n };\n\n /**\n * @function $getComponent\n * @memberof Calendar.prototype\n * @desc Fetch a component attributes from the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$getComponent = function(componentId, recurrenceId) {\n return Calendar.$Component.$find(this.id, componentId, recurrenceId);\n };\n\n /**\n * @function $omit\n * @memberof Calendar.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Calendar instance\n */\n Calendar.prototype.$omit = function() {\n var calendar = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key[0] != '$') {\n calendar[key] = value;\n }\n });\n return calendar;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Component\n * @constructor\n * @param {object} futureComponentData - either an object literal or a promise\n */\n function Component(futureComponentData) {\n // Data is immediately available\n if (typeof futureComponentData.then !== 'function') {\n this.init(futureComponentData);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new component;\n // Get UID from the server.\n var newComponentData = Component.$$resource.newguid(this.pid);\n this.$unwrap(newComponentData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureComponentData);\n }\n }\n\n /**\n * @memberof Component\n * @desc The factory we'll use to register with Angular\n * @returns the Component constructor\n */\n Component.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Preferences', 'Gravatar', 'Resource', function($q, $timeout, $log, Settings, Preferences, Gravatar, Resource) {\n angular.extend(Component, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Preferences: Preferences,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n timeFormat: \"%H:%M\",\n // Filter parameters common to events and tasks\n $query: { value: '', search: 'title_Category_Location' },\n // Filter paramaters specific to events\n $queryEvents: { sort: 'start', asc: 1, filterpopup: 'view_next7' },\n // Filter parameters specific to tasks\n $queryTasks: { sort: 'status', asc: 1, filterpopup: 'view_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 $filter\n * @memberof Component.prototype\n * @desc Search for components matching some criterias\n * @param {string} type - either 'events' or 'tasks'\n * @param {object} [options] - additional options to the query\n * @returns a collection of Components instances\n */\n Component.$filter = function(type, options) {\n var _this = this,\n now = new Date(),\n day = now.getDate(),\n month = now.getMonth() + 1,\n year = now.getFullYear(),\n queryKey = '$query' + type.capitalize(),\n params = {\n day: '' + year + (month < 10?'0':'') + month + (day < 10?'0':'') + day,\n };\n\n return this.$Preferences.ready().then(function() {\n var futureComponentData,\n dirty = false,\n otherType;\n\n angular.extend(_this.$query, params);\n\n if (options) {\n _.each(_.keys(options), function(key) {\n // Query parameters common to events and tasks are compared\n dirty |= (_this.$query[key] && options[key] != Component.$query[key]);\n if (key == 'reload' && options[key])\n dirty = true;\n // Update either the common parameters or the type-specific parameters\n else if (angular.isDefined(_this.$query[key]))\n _this.$query[key] = options[key];\n else\n _this[queryKey][key] = options[key];\n });\n }\n\n // Perform query with both common and type-specific parameters\n futureComponentData = _this.$$resource.fetch(null, type + 'list',\n angular.extend(_this[queryKey], _this.$query));\n\n // Invalidate cached results of other type if $query has changed\n otherType = (type == 'tasks')? '$events' : '$tasks';\n if (dirty) {\n delete Component[otherType];\n Component.$log.debug('force reload of ' + otherType);\n }\n\n return _this.$unwrapCollection(type, futureComponentData);\n });\n };\n\n /**\n * @function $find\n * @desc Fetch a component from a specific calendar.\n * @param {string} calendarId - the calendar ID\n * @param {string} componentId - the component ID\n * @param {string} [occurrenceId] - the component ID\n * @see {@link Calendar.$getComponent}\n */\n Component.$find = function(calendarId, componentId, occurrenceId) {\n var futureComponentData, path = [calendarId, componentId];\n\n if (occurrenceId)\n path.push(occurrenceId);\n\n futureComponentData = this.$$resource.fetch(path.join('/'), 'view');\n\n return new Component(futureComponentData);\n };\n\n /**\n * @function filterCategories\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Component.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Component.$categories), function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @function 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 this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n this.repeat.months = [];\n if (angular.isUndefined(this.repeat.year))\n this.repeat.year = {};\n if (this.repeat.count)\n this.repeat.end = 'count';\n else if (this.repeat.until) {\n this.repeat.end = 'until';\n this.repeat.until = this.repeat.until.substring(0,10).asDate();\n }\n else\n this.repeat.end = 'never';\n this.$hasCustomRepeat = this.hasCustomRepeat();\n\n if (this.isNew) {\n // Set default alarm\n Component.$Preferences.ready().then(function() {\n var units = { M: 'MINUTES', H: 'HOURS', D: 'DAYS', W: 'WEEKS' };\n var match = /-PT?([0-9]+)([MHDW])/.exec(Component.$Preferences.defaults.SOGoCalendarDefaultReminder);\n if (match) {\n _this.$hasAlarm = true;\n _this.alarm.quantity = parseInt(match[1]);\n _this.alarm.unit = units[match[2]];\n }\n });\n }\n else {\n this.$hasAlarm = angular.isDefined(data.alarm);\n }\n\n // Allow the component to be moved to a different calendar\n this.destinationCalendar = this.pid;\n\n if (this.organizer && this.organizer.email) {\n this.organizer.$image = Component.$gravatar(this.organizer.email, 32);\n }\n\n // Load freebusy of attendees\n this.freebusy = this.updateFreeBusyCoverage();\n\n if (this.attendees) {\n _.each(this.attendees, function(attendee) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n _this.updateFreeBusy(attendee);\n });\n }\n };\n\n /**\n * @function hasCustomRepeat\n * @memberof Component.prototype\n * @desc Check if the component has a custom recurrence rule.\n * @returns true if the recurrence rule requires the full recurrence editor\n */\n Component.prototype.hasCustomRepeat = function() {\n var b = angular.isDefined(this.repeat) &&\n (this.repeat.interval > 1 ||\n this.repeat.days && this.repeat.days.length > 0 ||\n this.repeat.monthdays && this.repeat.monthdays.length > 0 ||\n this.repeat.months && this.repeat.months.length > 0);\n return b;\n };\n\n /**\n * @function isEditable\n * @memberof Component.prototype\n * @desc Check if the component is editable and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditable = function() {\n return (!this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isEditableOccurrence\n * @memberof Component.prototype\n * @desc Check if the component is editable and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditableOccurrence = function() {\n return (this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isInvitation\n * @memberof Component.prototype\n * @desc Check if the component an invitation and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitation = function() {\n return (!this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isInvitationOccurrence\n * @memberof Component.prototype\n * @desc Check if the component an invitation and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitationOccurrence = function() {\n return (this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isReadOnly\n * @memberof Component.prototype\n * @desc Check if the component is not editable and not an invitation\n * @returns true or false\n */\n Component.prototype.isReadOnly = function() {\n return (this.isReadOnly && !this.userHasRSVP);\n };\n\n /**\n * @function enablePercentComplete\n * @memberof Component.prototype\n * @desc Check if the percent completion should be enabled with respect to the\n * component's type and status.\n * @returns true if the percent completion should be displayed\n */\n Component.prototype.enablePercentComplete = function() {\n return (this.component = 'vtodo' &&\n this.status != 'not-specified' &&\n this.status != 'cancelled');\n };\n\n /**\n * @function coversFreeBusy\n * @memberof Component.prototype\n * @desc Check if a specific quarter matches the component's period\n * @returns true if the quarter covers the component's period\n */\n Component.prototype.coversFreeBusy = function(day, hour, quarter) {\n var b = (angular.isDefined(this.freebusy[day]) &&\n angular.isDefined(this.freebusy[day][hour]) &&\n this.freebusy[day][hour][quarter] == 1);\n return b;\n };\n\n /**\n * @function updateFreeBusyCoverage\n * @memberof Component.prototype\n * @desc Build a 15-minute-based representation of the component's period.\n * @returns an object literal hashed by days and hours and arrays of four 1's and 0's\n */\n Component.prototype.updateFreeBusyCoverage = function() {\n var _this = this, freebusy = {};\n\n if (this.start && this.end) {\n var roundedStart = new Date(this.start.getTime()),\n roundedEnd = new Date(this.end.getTime()),\n startQuarter = parseInt(roundedStart.getMinutes()/15 + 0.5),\n endQuarter = parseInt(roundedEnd.getMinutes()/15 + 0.5);\n roundedStart.setMinutes(15*startQuarter);\n roundedEnd.setMinutes(15*endQuarter);\n\n _.each(roundedStart.daysUpTo(roundedEnd), function(date, index) {\n var currentDay = date.getDate(),\n dayKey = date.getDayString(),\n hourKey;\n if (dayKey == _this.start.getDayString()) {\n hourKey = date.getHours().toString();\n freebusy[dayKey] = {};\n freebusy[dayKey][hourKey] = [];\n while (startQuarter > 0) {\n freebusy[dayKey][hourKey].push(0);\n startQuarter--;\n }\n }\n else {\n date = date.beginOfDay();\n freebusy[dayKey] = {};\n }\n while (date.getTime() < _this.end.getTime() &&\n date.getDate() == currentDay) {\n hourKey = date.getHours().toString();\n if (angular.isUndefined(freebusy[dayKey][hourKey]))\n freebusy[dayKey][hourKey] = [];\n freebusy[dayKey][hourKey].push(1);\n date.addMinutes(15);\n }\n });\n return freebusy;\n }\n };\n\n /**\n * @function updateFreeBusy\n * @memberof Component.prototype\n * @desc Update the freebusy information for the component's period for a specific attendee.\n * @param {Object} card - an Card object instance of the attendee\n */\n Component.prototype.updateFreeBusy = function(attendee) {\n var params, url, days;\n if (attendee.uid) {\n params =\n {\n sday: this.start.getDayString(),\n eday: this.end.getDayString()\n };\n url = ['..', '..', attendee.uid, 'freebusy.ifb'];\n days = _.map(this.start.daysUpTo(this.end), function(day) { return day.getDayString(); });\n\n if (angular.isUndefined(attendee.freebusy))\n attendee.freebusy = {};\n\n // Fetch FreeBusy information\n Component.$$resource.fetch(url.join('/'), 'ajaxRead', params).then(function(data) {\n _.each(days, function(day) {\n var hour;\n\n if (angular.isUndefined(attendee.freebusy[day]))\n attendee.freebusy[day] = {};\n\n if (angular.isUndefined(data[day]))\n data[day] = {};\n\n for (var i = 0; i <= 23; i++) {\n hour = i.toString();\n if (data[day][hour])\n attendee.freebusy[day][hour] = [\n data[day][hour][\"0\"],\n data[day][hour][\"15\"],\n data[day][hour][\"30\"],\n data[day][hour][\"45\"]\n ];\n else\n attendee.freebusy[day][hour] = [0, 0, 0, 0];\n }\n });\n });\n }\n };\n\n /**\n * @function getClassName\n * @memberof Component.prototype\n * @desc Return the component CSS class name based on its container (calendar) ID.\n * @param {string} [base] - the prefix to add to the class name (defaults to \"fg\")\n * @returns a string representing the foreground CSS class name\n */\n Component.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + (this.destinationCalendar || this.c_folder);\n };\n\n /**\n * @function addAttendee\n * @memberof Component.prototype\n * @desc Add an attendee and fetch his freebusy info.\n * @param {Object} card - an Card object instance to be added to the attendees list\n */\n Component.prototype.addAttendee = function(card) {\n var attendee, url, params;\n if (card) {\n attendee = {\n name: card.c_cn,\n email: card.$preferredEmail(),\n role: 'req-participant',\n status: 'needs-action',\n uid: card.c_uid\n };\n if (!_.find(this.attendees, function(o) {\n return o.email == attendee.email;\n })) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n if (this.attendees)\n this.attendees.push(attendee);\n else\n this.attendees = [attendee];\n this.updateFreeBusy(attendee);\n }\n }\n };\n\n /**\n * @function hasAttendee\n * @memberof Component.prototype\n * @desc Verify if one of the email addresses of a Card instance matches an attendee.\n * @param {Object} card - an Card object instance\n * @returns true if the Card matches an attendee\n */\n Component.prototype.hasAttendee = function(card) {\n var attendee = _.find(this.attendees, function(attendee) {\n return _.find(card.emails, function(email) {\n return email.value == attendee.email;\n });\n });\n return angular.isDefined(attendee);\n };\n\n /**\n * @function canRemindAttendeesByEmail\n * @memberof Component.prototype\n * @desc Verify if the component's reminder must be send by email and if it has at least one attendee.\n * @returns true if attendees can receive a reminder by email\n */\n Component.prototype.canRemindAttendeesByEmail = function() {\n return this.alarm.action == 'email' &&\n !this.isReadOnly &&\n this.attendees && this.attendees.length > 0;\n };\n\n /**\n * @function addAttachUrl\n * @memberof Component.prototype\n * @desc Add a new attach URL if not already defined\n * @param {string} attachUrl - the URL\n * @returns the number of values in the list of attach URLs\n */\n Component.prototype.addAttachUrl = function(attachUrl) {\n if (angular.isUndefined(this.attachUrls)) {\n this.attachUrls = [{value: attachUrl}];\n }\n else {\n for (var i = 0; i < this.attachUrls.length; i++) {\n if (this.attachUrls[i].value == attachUrl) {\n break;\n }\n }\n if (i == this.attachUrls.length)\n this.attachUrls.push({value: attachUrl});\n }\n return this.attachUrls.length - 1;\n };\n\n /**\n * @function deleteAttachUrl\n * @memberof Component.prototype\n * @desc Remove an attach URL\n * @param {number} index - the URL index in the list of attach URLs\n */\n Component.prototype.deleteAttachUrl = function(index) {\n if (index > -1 && this.attachUrls.length > index) {\n this.attachUrls.splice(index, 1);\n }\n };\n\n /**\n * @function $reset\n * @memberof Component.prototype\n * @desc Reset the original state the component's data.\n */\n Component.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function reply\n * @memberof Component.prototype\n * @desc Reply to an invitation.\n * @returns a promise of the HTTP operation\n */\n Component.prototype.$reply = function() {\n var _this = this, data, path = [this.pid, this.id];\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n data = {\n reply: this.reply,\n delegatedTo: this.delegatedTo,\n alarm: this.$hasAlarm? this.alarm : {}\n };\n\n return Component.$$resource.save(path.join('/'), data, { action: 'rsvpAppointment' })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $save\n * @memberof Component.prototype\n * @desc Save the component to the server.\n */\n Component.prototype.$save = function() {\n var _this = this, options, path = [this.pid, this.id];\n\n if (this.isNew)\n options = { action: 'saveAs' + this.type.capitalize() };\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n return Component.$$resource.save(path.join('/'), this.$omit(), options)\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof Component.prototype\n * @desc Unwrap a promise.\n * @param {promise} futureComponentData - a promise of some of the Component's data\n */\n Component.prototype.$unwrap = function(futureComponentData) {\n var _this = this;\n\n // Expose the promise\n this.$futureComponentData = futureComponentData;\n\n // Resolve the promise\n this.$futureComponentData.then(function(data) {\n _this.init(data);\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Component.$log.error(_this.error);\n });\n };\n\n /**\n * @function $omit\n * @memberof Component.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Component instance\n */\n Component.prototype.$omit = function() {\n var component = {}, date;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n component[key] = angular.copy(value);\n }\n });\n\n // Format times\n component.startTime = component.startDate ? formatTime(component.startDate) : '';\n component.endTime = component.endDate ? formatTime(component.endDate) : '';\n\n // Update recurrence definition depending on selections\n if (this.$hasCustomRepeat) {\n if (this.repeat.frequency == 'monthly' && this.repeat.month.type && this.repeat.month.type == 'byday' ||\n this.repeat.frequency == 'yearly' && this.repeat.year.byday) {\n // BYDAY mask for a monthly or yearly recurrence\n delete component.repeat.monthdays;\n component.repeat.days = [{ day: this.repeat.month.day, occurrence: this.repeat.month.occurrence.toString() }];\n }\n else if (this.repeat.month.type) {\n // montly recurrence by month days or yearly by month\n delete component.repeat.days;\n }\n }\n else if (this.repeat.frequency) {\n component.repeat = { frequency: this.repeat.frequency };\n }\n if (this.repeat.frequency) {\n if (this.repeat.end == 'until' && this.repeat.until)\n component.repeat.until = this.repeat.until.stringWithSeparator('-');\n else if (this.repeat.end == 'count' && this.repeat.count)\n component.repeat.count = this.repeat.count;\n else {\n delete component.repeat.until;\n delete component.repeat.count;\n }\n }\n else {\n delete component.repeat;\n }\n\n if (this.$hasAlarm) {\n if (this.alarm.action && this.alarm.action == 'email' &&\n !(this.attendees && this.attendees.length > 0)) {\n // No attendees; email reminder must be sent to organizer only\n this.alarm.attendees = 0;\n this.alarm.organizer = 1;\n }\n }\n else {\n component.alarm = {};\n }\n\n function formatTime(dateString) {\n // YYYY-MM-DDTHH:MM-ZZ:00 => YYYY-MM-DD HH:MM\n var date = new Date(dateString.substring(0,10) + ' ' + dateString.substring(11,16)),\n hours = date.getHours(),\n minutes = date.getMinutes();\n\n if (hours < 10) hours = '0' + hours;\n if (minutes < 10) minutes = '0' + minutes;\n\n return hours + ':' + minutes;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/vendor/angular-file-upload.min.js b/UI/WebServerResources/js/vendor/angular-file-upload.min.js index fff0e666d..7242fd09e 100644 --- a/UI/WebServerResources/js/vendor/angular-file-upload.min.js +++ b/UI/WebServerResources/js/vendor/angular-file-upload.min.js @@ -1,7 +1,7 @@ /* - angular-file-upload v1.2.0 + angular-file-upload v2.1.1 https://github.com/nervgh/angular-file-upload */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=r(n(2)),o=r(n(3)),s=r(n(4)),a=r(n(5)),u=r(n(6)),l=r(n(7)),c=r(n(1)),f=r(n(8)),p=r(n(9)),d=r(n(10)),h=r(n(11)),v=r(n(12));angular.module(i.name,[]).value("fileUploaderOptions",o).factory("FileUploader",s).factory("FileLikeObject",a).factory("FileItem",u).factory("FileDirective",l).factory("FileSelect",c).factory("FileDrop",f).factory("FileOver",p).directive("nvFileSelect",d).directive("nvFileDrop",h).directive("nvFileOver",v).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver",function(e,t,n,r,i,o,s){e.FileLikeObject=t,e.FileItem=n,e.FileDirective=r,e.FileSelect=i,e.FileDrop=o,e.FileOver=s}])},function(e,t,n){"use strict";function r(e){var t=function(e){function t(e){u(this,t),this.events={$destroy:"destroy",change:"onChange"},this.prop="select",s(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return a(t,e),o(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},isEmptyAfterSelection:{value:function(){return!!this.element.attr("multiple")}},onChange:{value:function(){var e=this.uploader.isHTML5?this.element[0].files:this.element[0],t=this.getOptions(),n=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(e,t,n),this.isEmptyAfterSelection()&&this.element.prop("value",null)}}}),t}(e);return t}var i=function(e){return e&&e.__esModule?e["default"]:e},o=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},a=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},u=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};e.exports=r;i(n(2));r.$inject=["FileDirective"]},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){"use strict";e.exports={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}},function(e,t,n){"use strict";function r(e,t,n,r,i,v){var m=r.File,_=r.FormData,g=function(){function r(t){s(this,r);var n=a(e);u(this,n,t,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}return o(r,{addToQueue:{value:function(e,t,n){var r=this.isArrayLikeObject(e)?e:[e],o=this._getFilters(n),s=this.queue.length,a=[];l(r,function(e){var n=new i(e);if(this._isValidFile(n,o,t)){var r=new v(this,e,t);a.push(r),this.queue.push(r),this._onAfterAddingFile(r)}else{var s=o[this._failFilterIndex];this._onWhenAddingFileFailed(n,s,t)}},this),this.queue.length!==s&&(this._onAfterAddingAll(a),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()}},removeFromQueue:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t];n.isUploading&&n.cancel(),this.queue.splice(t,1),n._destroy(),this.progress=this._getTotalProgress()}},clearQueue:{value:function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}},uploadItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhrTransport":"_iframeTransport";n._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[r](n))}},cancelItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhr":"_form";n&&n.isUploading&&n[r].abort()}},uploadAll:{value:function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(l(e,function(e){e._prepareToUploading()}),e[0].upload())}},cancelAll:{value:function(){var e=this.getNotUploadedItems();l(e,function(e){e.cancel()})}},isFile:{value:function(e){return this.constructor.isFile(e)}},isFileLikeObject:{value:function(e){return this.constructor.isFileLikeObject(e)}},isArrayLikeObject:{value:function(e){return this.constructor.isArrayLikeObject(e)}},getIndexOfItem:{value:function(e){return f(e)?e:this.queue.indexOf(e)}},getNotUploadedItems:{value:function(){return this.queue.filter(function(e){return!e.isUploaded})}},getReadyItems:{value:function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})}},destroy:{value:function(){l(this._directives,function(e){l(this._directives[e],function(e){e.destroy()},this)},this)}},onAfterAddingAll:{value:function(e){}},onAfterAddingFile:{value:function(e){}},onWhenAddingFileFailed:{value:function(e,t,n){}},onBeforeUploadItem:{value:function(e){}},onProgressItem:{value:function(e,t){}},onProgressAll:{value:function(e){}},onSuccessItem:{value:function(e,t,n,r){}},onErrorItem:{value:function(e,t,n,r){}},onCancelItem:{value:function(e,t,n,r){}},onCompleteItem:{value:function(e,t,n,r){}},onCompleteAll:{value:function(){}},_getTotalProgress:{value:function(e){if(this.removeAfterUpload)return e||0;var t=this.getNotUploadedItems().length,n=t?this.queue.length-t:this.queue.length,r=100/this.queue.length,i=(e||0)*r/100;return Math.round(n*r+i)}},_getFilters:{value:function(e){if(!e)return this.filters;if(d(e))return e;var t=e.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==t.indexOf(e.name)},this)}},_render:{value:function(){t.$$phase||t.$apply()}},_folderFilter:{value:function(e){return!(!e.size&&!e.type)}},_queueLimitFilter:{value:function(){return this.queue.length=200&&300>e||304===e}},_transformResponse:{value:function(e,t){var r=this._headersGetter(t);return l(n.defaults.transformResponse,function(t){e=t(e,r)}),e}},_parseHeaders:{value:function(e){var t,n,r,i={};return e?(l(e.split("\n"),function(e){r=e.indexOf(":"),t=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim(),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},_headersGetter:{value:function(e){return function(t){return t?e[t.toLowerCase()]||null:e}}},_xhrTransport:{value:function(e){var t=e._xhr=new XMLHttpRequest,n=new _,r=this;if(r._onBeforeUploadItem(e),l(e.formData,function(e){l(e,function(e,t){n.append(t,e)})}),"number"!=typeof e._file.size)throw new TypeError("The file specified is no longer valid");n.append(e.alias,e._file,e.file.name),t.upload.onprogress=function(t){var n=Math.round(t.lengthComputable?100*t.loaded/t.total:0);r._onProgressItem(e,n)},t.onload=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n),o=r._isSuccessCode(t.status)?"Success":"Error",s="_on"+o+"Item";r[s](e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.onerror=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n);r._onErrorItem(e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.onabort=function(){var n=r._parseHeaders(t.getAllResponseHeaders()),i=r._transformResponse(t.response,n);r._onCancelItem(e,i,t.status,n),r._onCompleteItem(e,i,t.status,n)},t.open(e.method,e.url,!0),t.withCredentials=e.withCredentials,l(e.headers,function(e,n){t.setRequestHeader(n,e)}),t.send(n),this._render()}},_iframeTransport:{value:function(e){var t=h('
'),n=h('