diff --git a/UI/WebServerResources/css/styles.css b/UI/WebServerResources/css/styles.css index a6fc4f57d..3f0e761ef 100644 --- a/UI/WebServerResources/css/styles.css +++ b/UI/WebServerResources/css/styles.css @@ -4,264 +4,6 @@ * @see http://www.google.com/design/spec/style/color.html * **/ -.md-default-theme.fg-sogoBlue-50 { - color: #f0faf9; } - -.md-default-theme.bg-sogoBlue-50 { - background-color: #f0faf9; } - -.md-default-theme.fg-sogoBlue-100 { - color: #e1f5f3; } - -.md-default-theme.bg-sogoBlue-100 { - background-color: #e1f5f3; } - -.md-default-theme.fg-sogoBlue-200 { - color: #ceebe8; } - -.md-default-theme.bg-sogoBlue-200 { - background-color: #ceebe8; } - -.md-default-theme.fg-sogoBlue-300 { - color: #bfe0dd; } - -.md-default-theme.bg-sogoBlue-300 { - background-color: #bfe0dd; } - -.md-default-theme.fg-sogoBlue-400 { - color: #b2d6d3; } - -.md-default-theme.bg-sogoBlue-400 { - background-color: #b2d6d3; } - -.md-default-theme.fg-sogoBlue-500 { - color: #a1ccc8; } - -.md-default-theme.bg-sogoBlue-500 { - background-color: #a1ccc8; } - -.md-default-theme.fg-sogoBlue-600 { - color: #8ebfbb; } - -.md-default-theme.bg-sogoBlue-600 { - background-color: #8ebfbb; } - -.md-default-theme.fg-sogoBlue-700 { - color: #7db3b0; } - -.md-default-theme.bg-sogoBlue-700 { - background-color: #7db3b0; } - -.md-default-theme.fg-sogoBlue-800 { - color: #639997; } - -.md-default-theme.bg-sogoBlue-800 { - background-color: #639997; } - -.md-default-theme.fg-sogoBlue-900 { - color: #4d8080; } - -.md-default-theme.bg-sogoBlue-900 { - background-color: #4d8080; } - -.md-default-theme.fg-sogoBlue-A100 { - color: #d4f7fa; } - -.md-default-theme.bg-sogoBlue-A100 { - background-color: #d4f7fa; } - -.md-default-theme.fg-sogoBlue-A200 { - color: #c3f5fa; } - -.md-default-theme.bg-sogoBlue-A200 { - background-color: #c3f5fa; } - -.md-default-theme.fg-sogoBlue-A400 { - color: #53e3f0; } - -.md-default-theme.bg-sogoBlue-A400 { - background-color: #53e3f0; } - -.md-default-theme.fg-sogoBlue-A700 { - color: #00b0c0; } - -.md-default-theme.bg-sogoBlue-A700 { - background-color: #00b0c0; } - -.md-default-theme.fg-sogoGreen-50 { - color: #eaf5e9; } - -.md-default-theme.bg-sogoGreen-50 { - background-color: #eaf5e9; } - -.md-default-theme.fg-sogoGreen-100 { - color: #cbe5c8; } - -.md-default-theme.bg-sogoGreen-100 { - background-color: #cbe5c8; } - -.md-default-theme.fg-sogoGreen-200 { - color: #aad6a5; } - -.md-default-theme.bg-sogoGreen-200 { - background-color: #aad6a5; } - -.md-default-theme.fg-sogoGreen-300 { - color: #88c781; } - -.md-default-theme.bg-sogoGreen-300 { - background-color: #88c781; } - -.md-default-theme.fg-sogoGreen-400 { - color: #66b86a; } - -.md-default-theme.bg-sogoGreen-400 { - background-color: #66b86a; } - -.md-default-theme.fg-sogoGreen-500 { - color: #56b04c; } - -.md-default-theme.bg-sogoGreen-500 { - background-color: #56b04c; } - -.md-default-theme.fg-sogoGreen-600 { - color: #4da143; } - -.md-default-theme.bg-sogoGreen-600 { - background-color: #4da143; } - -.md-default-theme.fg-sogoGreen-700 { - color: #388e3c; } - -.md-default-theme.bg-sogoGreen-700 { - background-color: #388e3c; } - -.md-default-theme.fg-sogoGreen-800 { - color: #367d2e; } - -.md-default-theme.bg-sogoGreen-800 { - background-color: #367d2e; } - -.md-default-theme.fg-sogoGreen-900 { - color: #225e1b; } - -.md-default-theme.bg-sogoGreen-900 { - background-color: #225e1b; } - -.md-default-theme.fg-sogoGreen-A100 { - color: #b9f6ca; } - -.md-default-theme.bg-sogoGreen-A100 { - background-color: #b9f6ca; } - -.md-default-theme.fg-sogoGreen-A200 { - color: #69f0ae; } - -.md-default-theme.bg-sogoGreen-A200 { - background-color: #69f0ae; } - -.md-default-theme.fg-sogoGreen-A400 { - color: #00e676; } - -.md-default-theme.bg-sogoGreen-A400 { - background-color: #00e676; } - -.md-default-theme.fg-sogoGreen-A700 { - color: #00c853; } - -.md-default-theme.bg-sogoGreen-A700 { - background-color: #00c853; } - -.md-default-theme.fg-sogoPaper-50 { - color: #fcfbf8; } - -.md-default-theme.bg-sogoPaper-50 { - background-color: #fcfbf8; } - -.md-default-theme.fg-sogoPaper-100 { - color: #f7f1dc; } - -.md-default-theme.bg-sogoPaper-100 { - background-color: #f7f1dc; } - -.md-default-theme.fg-sogoPaper-200 { - color: #ede5ca; } - -.md-default-theme.bg-sogoPaper-200 { - background-color: #ede5ca; } - -.md-default-theme.fg-sogoPaper-300 { - color: #e6d8ba; } - -.md-default-theme.bg-sogoPaper-300 { - background-color: #e6d8ba; } - -.md-default-theme.fg-sogoPaper-400 { - color: #e2d2a3; } - -.md-default-theme.bg-sogoPaper-400 { - background-color: #e2d2a3; } - -.md-default-theme.fg-sogoPaper-500 { - color: #d6c48d; } - -.md-default-theme.bg-sogoPaper-500 { - background-color: #d6c48d; } - -.md-default-theme.fg-sogoPaper-600 { - color: #baa870; } - -.md-default-theme.bg-sogoPaper-600 { - background-color: #baa870; } - -.md-default-theme.fg-sogoPaper-700 { - color: #857545; } - -.md-default-theme.bg-sogoPaper-700 { - background-color: #857545; } - -.md-default-theme.fg-sogoPaper-800 { - color: #524517; } - -.md-default-theme.bg-sogoPaper-800 { - background-color: #524517; } - -.md-default-theme.fg-sogoPaper-900 { - color: #433809; } - -.md-default-theme.bg-sogoPaper-900 { - background-color: #433809; } - -.md-default-theme.fg-sogoPaper-1000 { - color: #000; } - -.md-default-theme.bg-sogoPaper-1000 { - background-color: #000; } - -.md-default-theme.fg-sogoPaper-A100 { - color: #fff; } - -.md-default-theme.bg-sogoPaper-A100 { - background-color: #fff; } - -.md-default-theme.fg-sogoPaper-A200 { - color: #eee; } - -.md-default-theme.bg-sogoPaper-A200 { - background-color: #eee; } - -.md-default-theme.fg-sogoPaper-A400 { - color: #bdbdbd; } - -.md-default-theme.bg-sogoPaper-A400 { - background-color: #bdbdbd; } - -.md-default-theme.fg-sogoPaper-A700 { - color: #857545; } - -.md-default-theme.bg-sogoPaper-A700 { - background-color: #857545; } - /* Welcome to Compass. * In this file you should write your main styles. (or centralize your imports) * Import this file using the following HTML or equivalent: @@ -563,275 +305,137 @@ html * { -ms-flex: 0 0 0%; flex: 0 0 0%; } -.layout-row > .flex-0 { - max-width: 0%; } - -.layout-column > .flex-0 { - max-height: 0%; } - .flex-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } -.layout-row > .flex-5 { - max-width: 5%; } - -.layout-column > .flex-5 { - max-height: 5%; } - .flex-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } -.layout-row > .flex-10 { - max-width: 10%; } - -.layout-column > .flex-10 { - max-height: 10%; } - .flex-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } -.layout-row > .flex-15 { - max-width: 15%; } - -.layout-column > .flex-15 { - max-height: 15%; } - .flex-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } -.layout-row > .flex-20 { - max-width: 20%; } - -.layout-column > .flex-20 { - max-height: 20%; } - .flex-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } -.layout-row > .flex-25 { - max-width: 25%; } - -.layout-column > .flex-25 { - max-height: 25%; } - .flex-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } -.layout-row > .flex-30 { - max-width: 30%; } - -.layout-column > .flex-30 { - max-height: 30%; } - .flex-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } -.layout-row > .flex-35 { - max-width: 35%; } - -.layout-column > .flex-35 { - max-height: 35%; } - .flex-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } -.layout-row > .flex-40 { - max-width: 40%; } - -.layout-column > .flex-40 { - max-height: 40%; } - .flex-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } -.layout-row > .flex-45 { - max-width: 45%; } - -.layout-column > .flex-45 { - max-height: 45%; } - .flex-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } -.layout-row > .flex-50 { - max-width: 50%; } - -.layout-column > .flex-50 { - max-height: 50%; } - .flex-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } -.layout-row > .flex-55 { - max-width: 55%; } - -.layout-column > .flex-55 { - max-height: 55%; } - .flex-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } -.layout-row > .flex-60 { - max-width: 60%; } - -.layout-column > .flex-60 { - max-height: 60%; } - .flex-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } -.layout-row > .flex-65 { - max-width: 65%; } - -.layout-column > .flex-65 { - max-height: 65%; } - .flex-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } -.layout-row > .flex-70 { - max-width: 70%; } - -.layout-column > .flex-70 { - max-height: 70%; } - .flex-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } -.layout-row > .flex-75 { - max-width: 75%; } - -.layout-column > .flex-75 { - max-height: 75%; } - .flex-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } -.layout-row > .flex-80 { - max-width: 80%; } - -.layout-column > .flex-80 { - max-height: 80%; } - .flex-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } -.layout-row > .flex-85 { - max-width: 85%; } - -.layout-column > .flex-85 { - max-height: 85%; } - .flex-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } -.layout-row > .flex-90 { - max-width: 90%; } - -.layout-column > .flex-90 { - max-height: 90%; } - .flex-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } -.layout-row > .flex-95 { - max-width: 95%; } - -.layout-column > .flex-95 { - max-height: 95%; } - .flex-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } -.layout-row > .flex-100 { - max-width: 100%; } - -.layout-column > .flex-100 { - max-height: 100%; } - .flex-33, .flex-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-66, .flex-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - -.layout-row > .flex-33, .layout-row > .flex-34 { - max-width: 33.33%; } - -.layout-row > .flex-66, .layout-row > .flex-67 { - max-width: 66.66%; } - -.layout-column > .flex-33, .layout-column > .flex-34 { - max-height: 33.33%; } - -.layout-column > .flex-66, .layout-column > .flex-67 { - max-height: 66.66%; } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } .layout-align-center, .layout-align-center-center, .layout-align-center-start, @@ -1201,208 +805,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-sm-0 { - max-width: 0%; } - .layout-column > .flex-sm-0 { - max-height: 0%; } .flex-sm-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-sm-5 { - max-width: 5%; } - .layout-column > .flex-sm-5 { - max-height: 5%; } .flex-sm-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-sm-10 { - max-width: 10%; } - .layout-column > .flex-sm-10 { - max-height: 10%; } .flex-sm-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-sm-15 { - max-width: 15%; } - .layout-column > .flex-sm-15 { - max-height: 15%; } .flex-sm-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-sm-20 { - max-width: 20%; } - .layout-column > .flex-sm-20 { - max-height: 20%; } .flex-sm-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-sm-25 { - max-width: 25%; } - .layout-column > .flex-sm-25 { - max-height: 25%; } .flex-sm-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-sm-30 { - max-width: 30%; } - .layout-column > .flex-sm-30 { - max-height: 30%; } .flex-sm-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-sm-35 { - max-width: 35%; } - .layout-column > .flex-sm-35 { - max-height: 35%; } .flex-sm-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-sm-40 { - max-width: 40%; } - .layout-column > .flex-sm-40 { - max-height: 40%; } .flex-sm-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-sm-45 { - max-width: 45%; } - .layout-column > .flex-sm-45 { - max-height: 45%; } .flex-sm-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-sm-50 { - max-width: 50%; } - .layout-column > .flex-sm-50 { - max-height: 50%; } .flex-sm-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-sm-55 { - max-width: 55%; } - .layout-column > .flex-sm-55 { - max-height: 55%; } .flex-sm-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-sm-60 { - max-width: 60%; } - .layout-column > .flex-sm-60 { - max-height: 60%; } .flex-sm-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-sm-65 { - max-width: 65%; } - .layout-column > .flex-sm-65 { - max-height: 65%; } .flex-sm-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-sm-70 { - max-width: 70%; } - .layout-column > .flex-sm-70 { - max-height: 70%; } .flex-sm-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-sm-75 { - max-width: 75%; } - .layout-column > .flex-sm-75 { - max-height: 75%; } .flex-sm-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-sm-80 { - max-width: 80%; } - .layout-column > .flex-sm-80 { - max-height: 80%; } .flex-sm-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-sm-85 { - max-width: 85%; } - .layout-column > .flex-sm-85 { - max-height: 85%; } .flex-sm-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-sm-90 { - max-width: 90%; } - .layout-column > .flex-sm-90 { - max-height: 90%; } .flex-sm-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-sm-95 { - max-width: 95%; } - .layout-column > .flex-sm-95 { - max-height: 95%; } .flex-sm-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-sm-100 { - max-width: 100%; } - .layout-column > .flex-sm-100 { - max-height: 100%; } .flex-sm-33, .flex-sm-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-sm-66, .flex-sm-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-sm-33, .layout-row > .flex-sm-34 { - max-width: 33.33%; } - .layout-row > .flex-sm-66, .layout-row > .flex-sm-67 { - max-width: 66.66%; } - .layout-column > .flex-sm-33, .layout-column > .flex-sm-34 { - max-height: 33.33%; } - .layout-column > .flex-sm-66, .layout-column > .flex-sm-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } @media (min-width: 600px) { .flex-order-gt-sm-0 { @@ -1581,208 +1093,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-gt-sm-0 { - max-width: 0%; } - .layout-column > .flex-gt-sm-0 { - max-height: 0%; } .flex-gt-sm-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-gt-sm-5 { - max-width: 5%; } - .layout-column > .flex-gt-sm-5 { - max-height: 5%; } .flex-gt-sm-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-gt-sm-10 { - max-width: 10%; } - .layout-column > .flex-gt-sm-10 { - max-height: 10%; } .flex-gt-sm-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-gt-sm-15 { - max-width: 15%; } - .layout-column > .flex-gt-sm-15 { - max-height: 15%; } .flex-gt-sm-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-gt-sm-20 { - max-width: 20%; } - .layout-column > .flex-gt-sm-20 { - max-height: 20%; } .flex-gt-sm-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-gt-sm-25 { - max-width: 25%; } - .layout-column > .flex-gt-sm-25 { - max-height: 25%; } .flex-gt-sm-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-gt-sm-30 { - max-width: 30%; } - .layout-column > .flex-gt-sm-30 { - max-height: 30%; } .flex-gt-sm-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-gt-sm-35 { - max-width: 35%; } - .layout-column > .flex-gt-sm-35 { - max-height: 35%; } .flex-gt-sm-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-gt-sm-40 { - max-width: 40%; } - .layout-column > .flex-gt-sm-40 { - max-height: 40%; } .flex-gt-sm-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-gt-sm-45 { - max-width: 45%; } - .layout-column > .flex-gt-sm-45 { - max-height: 45%; } .flex-gt-sm-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-gt-sm-50 { - max-width: 50%; } - .layout-column > .flex-gt-sm-50 { - max-height: 50%; } .flex-gt-sm-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-gt-sm-55 { - max-width: 55%; } - .layout-column > .flex-gt-sm-55 { - max-height: 55%; } .flex-gt-sm-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-gt-sm-60 { - max-width: 60%; } - .layout-column > .flex-gt-sm-60 { - max-height: 60%; } .flex-gt-sm-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-gt-sm-65 { - max-width: 65%; } - .layout-column > .flex-gt-sm-65 { - max-height: 65%; } .flex-gt-sm-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-gt-sm-70 { - max-width: 70%; } - .layout-column > .flex-gt-sm-70 { - max-height: 70%; } .flex-gt-sm-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-gt-sm-75 { - max-width: 75%; } - .layout-column > .flex-gt-sm-75 { - max-height: 75%; } .flex-gt-sm-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-gt-sm-80 { - max-width: 80%; } - .layout-column > .flex-gt-sm-80 { - max-height: 80%; } .flex-gt-sm-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-gt-sm-85 { - max-width: 85%; } - .layout-column > .flex-gt-sm-85 { - max-height: 85%; } .flex-gt-sm-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-gt-sm-90 { - max-width: 90%; } - .layout-column > .flex-gt-sm-90 { - max-height: 90%; } .flex-gt-sm-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-gt-sm-95 { - max-width: 95%; } - .layout-column > .flex-gt-sm-95 { - max-height: 95%; } .flex-gt-sm-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-gt-sm-100 { - max-width: 100%; } - .layout-column > .flex-gt-sm-100 { - max-height: 100%; } .flex-gt-sm-33, .flex-gt-sm-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-gt-sm-66, .flex-gt-sm-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-sm-33, .layout-row > .flex-gt-sm-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-sm-66, .layout-row > .flex-gt-sm-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-sm-33, .layout-column > .flex-gt-sm-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-sm-66, .layout-column > .flex-gt-sm-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } @media (min-width: 600px) and (max-width: 1023px) { .hide:not(.show-gt-sm):not(.show-md):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-md):not(.show) { @@ -1965,208 +1385,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-md-0 { - max-width: 0%; } - .layout-column > .flex-md-0 { - max-height: 0%; } .flex-md-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-md-5 { - max-width: 5%; } - .layout-column > .flex-md-5 { - max-height: 5%; } .flex-md-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-md-10 { - max-width: 10%; } - .layout-column > .flex-md-10 { - max-height: 10%; } .flex-md-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-md-15 { - max-width: 15%; } - .layout-column > .flex-md-15 { - max-height: 15%; } .flex-md-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-md-20 { - max-width: 20%; } - .layout-column > .flex-md-20 { - max-height: 20%; } .flex-md-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-md-25 { - max-width: 25%; } - .layout-column > .flex-md-25 { - max-height: 25%; } .flex-md-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-md-30 { - max-width: 30%; } - .layout-column > .flex-md-30 { - max-height: 30%; } .flex-md-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-md-35 { - max-width: 35%; } - .layout-column > .flex-md-35 { - max-height: 35%; } .flex-md-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-md-40 { - max-width: 40%; } - .layout-column > .flex-md-40 { - max-height: 40%; } .flex-md-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-md-45 { - max-width: 45%; } - .layout-column > .flex-md-45 { - max-height: 45%; } .flex-md-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-md-50 { - max-width: 50%; } - .layout-column > .flex-md-50 { - max-height: 50%; } .flex-md-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-md-55 { - max-width: 55%; } - .layout-column > .flex-md-55 { - max-height: 55%; } .flex-md-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-md-60 { - max-width: 60%; } - .layout-column > .flex-md-60 { - max-height: 60%; } .flex-md-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-md-65 { - max-width: 65%; } - .layout-column > .flex-md-65 { - max-height: 65%; } .flex-md-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-md-70 { - max-width: 70%; } - .layout-column > .flex-md-70 { - max-height: 70%; } .flex-md-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-md-75 { - max-width: 75%; } - .layout-column > .flex-md-75 { - max-height: 75%; } .flex-md-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-md-80 { - max-width: 80%; } - .layout-column > .flex-md-80 { - max-height: 80%; } .flex-md-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-md-85 { - max-width: 85%; } - .layout-column > .flex-md-85 { - max-height: 85%; } .flex-md-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-md-90 { - max-width: 90%; } - .layout-column > .flex-md-90 { - max-height: 90%; } .flex-md-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-md-95 { - max-width: 95%; } - .layout-column > .flex-md-95 { - max-height: 95%; } .flex-md-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-md-100 { - max-width: 100%; } - .layout-column > .flex-md-100 { - max-height: 100%; } .flex-md-33, .flex-md-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-md-66, .flex-md-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-md-33, .layout-row > .flex-md-34 { - max-width: 33.33%; } - .layout-row > .flex-md-66, .layout-row > .flex-md-67 { - max-width: 66.66%; } - .layout-column > .flex-md-33, .layout-column > .flex-md-34 { - max-height: 33.33%; } - .layout-column > .flex-md-66, .layout-column > .flex-md-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } @media (min-width: 1024px) { .flex-order-gt-md-0 { @@ -2345,208 +1673,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-gt-md-0 { - max-width: 0%; } - .layout-column > .flex-gt-md-0 { - max-height: 0%; } .flex-gt-md-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-gt-md-5 { - max-width: 5%; } - .layout-column > .flex-gt-md-5 { - max-height: 5%; } .flex-gt-md-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-gt-md-10 { - max-width: 10%; } - .layout-column > .flex-gt-md-10 { - max-height: 10%; } .flex-gt-md-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-gt-md-15 { - max-width: 15%; } - .layout-column > .flex-gt-md-15 { - max-height: 15%; } .flex-gt-md-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-gt-md-20 { - max-width: 20%; } - .layout-column > .flex-gt-md-20 { - max-height: 20%; } .flex-gt-md-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-gt-md-25 { - max-width: 25%; } - .layout-column > .flex-gt-md-25 { - max-height: 25%; } .flex-gt-md-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-gt-md-30 { - max-width: 30%; } - .layout-column > .flex-gt-md-30 { - max-height: 30%; } .flex-gt-md-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-gt-md-35 { - max-width: 35%; } - .layout-column > .flex-gt-md-35 { - max-height: 35%; } .flex-gt-md-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-gt-md-40 { - max-width: 40%; } - .layout-column > .flex-gt-md-40 { - max-height: 40%; } .flex-gt-md-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-gt-md-45 { - max-width: 45%; } - .layout-column > .flex-gt-md-45 { - max-height: 45%; } .flex-gt-md-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-gt-md-50 { - max-width: 50%; } - .layout-column > .flex-gt-md-50 { - max-height: 50%; } .flex-gt-md-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-gt-md-55 { - max-width: 55%; } - .layout-column > .flex-gt-md-55 { - max-height: 55%; } .flex-gt-md-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-gt-md-60 { - max-width: 60%; } - .layout-column > .flex-gt-md-60 { - max-height: 60%; } .flex-gt-md-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-gt-md-65 { - max-width: 65%; } - .layout-column > .flex-gt-md-65 { - max-height: 65%; } .flex-gt-md-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-gt-md-70 { - max-width: 70%; } - .layout-column > .flex-gt-md-70 { - max-height: 70%; } .flex-gt-md-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-gt-md-75 { - max-width: 75%; } - .layout-column > .flex-gt-md-75 { - max-height: 75%; } .flex-gt-md-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-gt-md-80 { - max-width: 80%; } - .layout-column > .flex-gt-md-80 { - max-height: 80%; } .flex-gt-md-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-gt-md-85 { - max-width: 85%; } - .layout-column > .flex-gt-md-85 { - max-height: 85%; } .flex-gt-md-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-gt-md-90 { - max-width: 90%; } - .layout-column > .flex-gt-md-90 { - max-height: 90%; } .flex-gt-md-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-gt-md-95 { - max-width: 95%; } - .layout-column > .flex-gt-md-95 { - max-height: 95%; } .flex-gt-md-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-gt-md-100 { - max-width: 100%; } - .layout-column > .flex-gt-md-100 { - max-height: 100%; } .flex-gt-md-33, .flex-gt-md-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-gt-md-66, .flex-gt-md-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-md-33, .layout-row > .flex-gt-md-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-md-66, .layout-row > .flex-gt-md-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-md-33, .layout-column > .flex-gt-md-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-md-66, .layout-column > .flex-gt-md-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } @media (min-width: 1024px) and (max-width: 1279px) { .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show) { @@ -2729,208 +1965,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-lg-0 { - max-width: 0%; } - .layout-column > .flex-lg-0 { - max-height: 0%; } .flex-lg-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-lg-5 { - max-width: 5%; } - .layout-column > .flex-lg-5 { - max-height: 5%; } .flex-lg-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-lg-10 { - max-width: 10%; } - .layout-column > .flex-lg-10 { - max-height: 10%; } .flex-lg-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-lg-15 { - max-width: 15%; } - .layout-column > .flex-lg-15 { - max-height: 15%; } .flex-lg-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-lg-20 { - max-width: 20%; } - .layout-column > .flex-lg-20 { - max-height: 20%; } .flex-lg-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-lg-25 { - max-width: 25%; } - .layout-column > .flex-lg-25 { - max-height: 25%; } .flex-lg-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-lg-30 { - max-width: 30%; } - .layout-column > .flex-lg-30 { - max-height: 30%; } .flex-lg-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-lg-35 { - max-width: 35%; } - .layout-column > .flex-lg-35 { - max-height: 35%; } .flex-lg-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-lg-40 { - max-width: 40%; } - .layout-column > .flex-lg-40 { - max-height: 40%; } .flex-lg-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-lg-45 { - max-width: 45%; } - .layout-column > .flex-lg-45 { - max-height: 45%; } .flex-lg-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-lg-50 { - max-width: 50%; } - .layout-column > .flex-lg-50 { - max-height: 50%; } .flex-lg-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-lg-55 { - max-width: 55%; } - .layout-column > .flex-lg-55 { - max-height: 55%; } .flex-lg-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-lg-60 { - max-width: 60%; } - .layout-column > .flex-lg-60 { - max-height: 60%; } .flex-lg-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-lg-65 { - max-width: 65%; } - .layout-column > .flex-lg-65 { - max-height: 65%; } .flex-lg-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-lg-70 { - max-width: 70%; } - .layout-column > .flex-lg-70 { - max-height: 70%; } .flex-lg-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-lg-75 { - max-width: 75%; } - .layout-column > .flex-lg-75 { - max-height: 75%; } .flex-lg-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-lg-80 { - max-width: 80%; } - .layout-column > .flex-lg-80 { - max-height: 80%; } .flex-lg-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-lg-85 { - max-width: 85%; } - .layout-column > .flex-lg-85 { - max-height: 85%; } .flex-lg-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-lg-90 { - max-width: 90%; } - .layout-column > .flex-lg-90 { - max-height: 90%; } .flex-lg-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-lg-95 { - max-width: 95%; } - .layout-column > .flex-lg-95 { - max-height: 95%; } .flex-lg-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-lg-100 { - max-width: 100%; } - .layout-column > .flex-lg-100 { - max-height: 100%; } .flex-lg-33, .flex-lg-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-lg-66, .flex-lg-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-lg-33, .layout-row > .flex-lg-34 { - max-width: 33.33%; } - .layout-row > .flex-lg-66, .layout-row > .flex-lg-67 { - max-width: 66.66%; } - .layout-column > .flex-lg-33, .layout-column > .flex-lg-34 { - max-height: 33.33%; } - .layout-column > .flex-lg-66, .layout-column > .flex-lg-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } @media (min-width: 1280px) { .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-lg:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show) { @@ -3111,208 +2255,116 @@ html * { -webkit-flex: 0 0 0%; -ms-flex: 0 0 0%; flex: 0 0 0%; } - .layout-row > .flex-gt-lg-0 { - max-width: 0%; } - .layout-column > .flex-gt-lg-0 { - max-height: 0%; } .flex-gt-lg-5 { -webkit-box-flex: 0; -webkit-flex: 0 0 5%; -ms-flex: 0 0 5%; flex: 0 0 5%; } - .layout-row > .flex-gt-lg-5 { - max-width: 5%; } - .layout-column > .flex-gt-lg-5 { - max-height: 5%; } .flex-gt-lg-10 { -webkit-box-flex: 0; -webkit-flex: 0 0 10%; -ms-flex: 0 0 10%; flex: 0 0 10%; } - .layout-row > .flex-gt-lg-10 { - max-width: 10%; } - .layout-column > .flex-gt-lg-10 { - max-height: 10%; } .flex-gt-lg-15 { -webkit-box-flex: 0; -webkit-flex: 0 0 15%; -ms-flex: 0 0 15%; flex: 0 0 15%; } - .layout-row > .flex-gt-lg-15 { - max-width: 15%; } - .layout-column > .flex-gt-lg-15 { - max-height: 15%; } .flex-gt-lg-20 { -webkit-box-flex: 0; -webkit-flex: 0 0 20%; -ms-flex: 0 0 20%; flex: 0 0 20%; } - .layout-row > .flex-gt-lg-20 { - max-width: 20%; } - .layout-column > .flex-gt-lg-20 { - max-height: 20%; } .flex-gt-lg-25 { -webkit-box-flex: 0; -webkit-flex: 0 0 25%; -ms-flex: 0 0 25%; flex: 0 0 25%; } - .layout-row > .flex-gt-lg-25 { - max-width: 25%; } - .layout-column > .flex-gt-lg-25 { - max-height: 25%; } .flex-gt-lg-30 { -webkit-box-flex: 0; -webkit-flex: 0 0 30%; -ms-flex: 0 0 30%; flex: 0 0 30%; } - .layout-row > .flex-gt-lg-30 { - max-width: 30%; } - .layout-column > .flex-gt-lg-30 { - max-height: 30%; } .flex-gt-lg-35 { -webkit-box-flex: 0; -webkit-flex: 0 0 35%; -ms-flex: 0 0 35%; flex: 0 0 35%; } - .layout-row > .flex-gt-lg-35 { - max-width: 35%; } - .layout-column > .flex-gt-lg-35 { - max-height: 35%; } .flex-gt-lg-40 { -webkit-box-flex: 0; -webkit-flex: 0 0 40%; -ms-flex: 0 0 40%; flex: 0 0 40%; } - .layout-row > .flex-gt-lg-40 { - max-width: 40%; } - .layout-column > .flex-gt-lg-40 { - max-height: 40%; } .flex-gt-lg-45 { -webkit-box-flex: 0; -webkit-flex: 0 0 45%; -ms-flex: 0 0 45%; flex: 0 0 45%; } - .layout-row > .flex-gt-lg-45 { - max-width: 45%; } - .layout-column > .flex-gt-lg-45 { - max-height: 45%; } .flex-gt-lg-50 { -webkit-box-flex: 0; -webkit-flex: 0 0 50%; -ms-flex: 0 0 50%; flex: 0 0 50%; } - .layout-row > .flex-gt-lg-50 { - max-width: 50%; } - .layout-column > .flex-gt-lg-50 { - max-height: 50%; } .flex-gt-lg-55 { -webkit-box-flex: 0; -webkit-flex: 0 0 55%; -ms-flex: 0 0 55%; flex: 0 0 55%; } - .layout-row > .flex-gt-lg-55 { - max-width: 55%; } - .layout-column > .flex-gt-lg-55 { - max-height: 55%; } .flex-gt-lg-60 { -webkit-box-flex: 0; -webkit-flex: 0 0 60%; -ms-flex: 0 0 60%; flex: 0 0 60%; } - .layout-row > .flex-gt-lg-60 { - max-width: 60%; } - .layout-column > .flex-gt-lg-60 { - max-height: 60%; } .flex-gt-lg-65 { -webkit-box-flex: 0; -webkit-flex: 0 0 65%; -ms-flex: 0 0 65%; flex: 0 0 65%; } - .layout-row > .flex-gt-lg-65 { - max-width: 65%; } - .layout-column > .flex-gt-lg-65 { - max-height: 65%; } .flex-gt-lg-70 { -webkit-box-flex: 0; -webkit-flex: 0 0 70%; -ms-flex: 0 0 70%; flex: 0 0 70%; } - .layout-row > .flex-gt-lg-70 { - max-width: 70%; } - .layout-column > .flex-gt-lg-70 { - max-height: 70%; } .flex-gt-lg-75 { -webkit-box-flex: 0; -webkit-flex: 0 0 75%; -ms-flex: 0 0 75%; flex: 0 0 75%; } - .layout-row > .flex-gt-lg-75 { - max-width: 75%; } - .layout-column > .flex-gt-lg-75 { - max-height: 75%; } .flex-gt-lg-80 { -webkit-box-flex: 0; -webkit-flex: 0 0 80%; -ms-flex: 0 0 80%; flex: 0 0 80%; } - .layout-row > .flex-gt-lg-80 { - max-width: 80%; } - .layout-column > .flex-gt-lg-80 { - max-height: 80%; } .flex-gt-lg-85 { -webkit-box-flex: 0; -webkit-flex: 0 0 85%; -ms-flex: 0 0 85%; flex: 0 0 85%; } - .layout-row > .flex-gt-lg-85 { - max-width: 85%; } - .layout-column > .flex-gt-lg-85 { - max-height: 85%; } .flex-gt-lg-90 { -webkit-box-flex: 0; -webkit-flex: 0 0 90%; -ms-flex: 0 0 90%; flex: 0 0 90%; } - .layout-row > .flex-gt-lg-90 { - max-width: 90%; } - .layout-column > .flex-gt-lg-90 { - max-height: 90%; } .flex-gt-lg-95 { -webkit-box-flex: 0; -webkit-flex: 0 0 95%; -ms-flex: 0 0 95%; flex: 0 0 95%; } - .layout-row > .flex-gt-lg-95 { - max-width: 95%; } - .layout-column > .flex-gt-lg-95 { - max-height: 95%; } .flex-gt-lg-100 { -webkit-box-flex: 0; -webkit-flex: 0 0 100%; -ms-flex: 0 0 100%; flex: 0 0 100%; } - .layout-row > .flex-gt-lg-100 { - max-width: 100%; } - .layout-column > .flex-gt-lg-100 { - max-height: 100%; } .flex-gt-lg-33, .flex-gt-lg-34 { -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } + -webkit-flex: 0 0 34%; + -ms-flex: 0 0 34%; + flex: 0 0 34%; } .flex-gt-lg-66, .flex-gt-lg-67 { -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-lg-33, .layout-row > .flex-gt-lg-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-lg-66, .layout-row > .flex-gt-lg-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-lg-33, .layout-column > .flex-gt-lg-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-lg-66, .layout-column > .flex-gt-lg-67 { - max-height: 66.66%; } } + -webkit-flex: 0 0 66%; + -ms-flex: 0 0 66%; + flex: 0 0 66%; } } /** * Overrides angular-material sources @@ -3326,2050 +2378,6 @@ html * { 960 <= size < 1200 Tablet-Landscape 1200 <= size PC */ -@media (min-width: 1) and (max-width: 600px) { - .hide-sm:not(.show-sm):not(.show), .hide:not(.show-sm):not(.show) { - display: none !important; } - .flex-order-sm-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-sm-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-sm-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-sm-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-sm-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-sm-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-sm-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-sm-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-sm-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-sm-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-sm-center, .layout-align-sm-center-center, - .layout-align-sm-center-start, - .layout-align-sm-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-sm-end, .layout-align-sm-end-center, - .layout-align-sm-end-start, - .layout-align-sm-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-sm-space-around, .layout-align-sm-space-around-center, - .layout-align-sm-space-around-start, - .layout-align-sm-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-sm-space-between, .layout-align-sm-space-between-center, - .layout-align-sm-space-between-start, - .layout-align-sm-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-sm-center-center, - .layout-align-sm-start-center, - .layout-align-sm-end-center, - .layout-align-sm-space-between-center, - .layout-align-sm-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-sm-center-start, - .layout-align-sm-start-start, - .layout-align-sm-end-start, - .layout-align-sm-space-between-start, - .layout-align-sm-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-sm-center-end, - .layout-align-sm-start-end, - .layout-align-sm-end-end, - .layout-align-sm-space-between-end, - .layout-align-sm-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-sm { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-sm-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-sm-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-sm { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-sm-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-sm-0 { - max-width: 0%; } - .layout-column > .flex-sm-0 { - max-height: 0%; } - .flex-sm-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-sm-5 { - max-width: 5%; } - .layout-column > .flex-sm-5 { - max-height: 5%; } - .flex-sm-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-sm-10 { - max-width: 10%; } - .layout-column > .flex-sm-10 { - max-height: 10%; } - .flex-sm-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-sm-15 { - max-width: 15%; } - .layout-column > .flex-sm-15 { - max-height: 15%; } - .flex-sm-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-sm-20 { - max-width: 20%; } - .layout-column > .flex-sm-20 { - max-height: 20%; } - .flex-sm-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-sm-25 { - max-width: 25%; } - .layout-column > .flex-sm-25 { - max-height: 25%; } - .flex-sm-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-sm-30 { - max-width: 30%; } - .layout-column > .flex-sm-30 { - max-height: 30%; } - .flex-sm-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-sm-35 { - max-width: 35%; } - .layout-column > .flex-sm-35 { - max-height: 35%; } - .flex-sm-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-sm-40 { - max-width: 40%; } - .layout-column > .flex-sm-40 { - max-height: 40%; } - .flex-sm-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-sm-45 { - max-width: 45%; } - .layout-column > .flex-sm-45 { - max-height: 45%; } - .flex-sm-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-sm-50 { - max-width: 50%; } - .layout-column > .flex-sm-50 { - max-height: 50%; } - .flex-sm-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-sm-55 { - max-width: 55%; } - .layout-column > .flex-sm-55 { - max-height: 55%; } - .flex-sm-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-sm-60 { - max-width: 60%; } - .layout-column > .flex-sm-60 { - max-height: 60%; } - .flex-sm-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-sm-65 { - max-width: 65%; } - .layout-column > .flex-sm-65 { - max-height: 65%; } - .flex-sm-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-sm-70 { - max-width: 70%; } - .layout-column > .flex-sm-70 { - max-height: 70%; } - .flex-sm-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-sm-75 { - max-width: 75%; } - .layout-column > .flex-sm-75 { - max-height: 75%; } - .flex-sm-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-sm-80 { - max-width: 80%; } - .layout-column > .flex-sm-80 { - max-height: 80%; } - .flex-sm-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-sm-85 { - max-width: 85%; } - .layout-column > .flex-sm-85 { - max-height: 85%; } - .flex-sm-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-sm-90 { - max-width: 90%; } - .layout-column > .flex-sm-90 { - max-height: 90%; } - .flex-sm-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-sm-95 { - max-width: 95%; } - .layout-column > .flex-sm-95 { - max-height: 95%; } - .flex-sm-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-sm-100 { - max-width: 100%; } - .layout-column > .flex-sm-100 { - max-height: 100%; } - .flex-sm-33, .flex-sm-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-sm-66, .flex-sm-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-sm-33, .layout-row > .flex-sm-34 { - max-width: 33.33%; } - .layout-row > .flex-sm-66, .layout-row > .flex-sm-67 { - max-width: 66.66%; } - .layout-column > .flex-sm-33, .layout-column > .flex-sm-34 { - max-height: 33.33%; } - .layout-column > .flex-sm-66, .layout-column > .flex-sm-67 { - max-height: 66.66%; } } - -@media (min-width: 601px) { - .show-sm { - display: none !important; } } - -@media (min-width: 601px) { - .flex-order-gt-sm-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-gt-sm-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-gt-sm-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-gt-sm-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-gt-sm-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-gt-sm-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-gt-sm-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-gt-sm-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-gt-sm-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-gt-sm-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-gt-sm-center, .layout-align-gt-sm-center-center, - .layout-align-gt-sm-center-start, - .layout-align-gt-sm-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-gt-sm-end, .layout-align-gt-sm-end-center, - .layout-align-gt-sm-end-start, - .layout-align-gt-sm-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-gt-sm-space-around, .layout-align-gt-sm-space-around-center, - .layout-align-gt-sm-space-around-start, - .layout-align-gt-sm-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-gt-sm-space-between, .layout-align-gt-sm-space-between-center, - .layout-align-gt-sm-space-between-start, - .layout-align-gt-sm-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-gt-sm-center-center, - .layout-align-gt-sm-start-center, - .layout-align-gt-sm-end-center, - .layout-align-gt-sm-space-between-center, - .layout-align-gt-sm-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-gt-sm-center-start, - .layout-align-gt-sm-start-start, - .layout-align-gt-sm-end-start, - .layout-align-gt-sm-space-between-start, - .layout-align-gt-sm-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-gt-sm-center-end, - .layout-align-gt-sm-start-end, - .layout-align-gt-sm-end-end, - .layout-align-gt-sm-space-between-end, - .layout-align-gt-sm-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-gt-sm { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-gt-sm-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-gt-sm-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-gt-sm { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-gt-sm-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-gt-sm-0 { - max-width: 0%; } - .layout-column > .flex-gt-sm-0 { - max-height: 0%; } - .flex-gt-sm-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-gt-sm-5 { - max-width: 5%; } - .layout-column > .flex-gt-sm-5 { - max-height: 5%; } - .flex-gt-sm-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-gt-sm-10 { - max-width: 10%; } - .layout-column > .flex-gt-sm-10 { - max-height: 10%; } - .flex-gt-sm-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-gt-sm-15 { - max-width: 15%; } - .layout-column > .flex-gt-sm-15 { - max-height: 15%; } - .flex-gt-sm-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-gt-sm-20 { - max-width: 20%; } - .layout-column > .flex-gt-sm-20 { - max-height: 20%; } - .flex-gt-sm-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-gt-sm-25 { - max-width: 25%; } - .layout-column > .flex-gt-sm-25 { - max-height: 25%; } - .flex-gt-sm-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-gt-sm-30 { - max-width: 30%; } - .layout-column > .flex-gt-sm-30 { - max-height: 30%; } - .flex-gt-sm-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-gt-sm-35 { - max-width: 35%; } - .layout-column > .flex-gt-sm-35 { - max-height: 35%; } - .flex-gt-sm-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-gt-sm-40 { - max-width: 40%; } - .layout-column > .flex-gt-sm-40 { - max-height: 40%; } - .flex-gt-sm-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-gt-sm-45 { - max-width: 45%; } - .layout-column > .flex-gt-sm-45 { - max-height: 45%; } - .flex-gt-sm-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-gt-sm-50 { - max-width: 50%; } - .layout-column > .flex-gt-sm-50 { - max-height: 50%; } - .flex-gt-sm-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-gt-sm-55 { - max-width: 55%; } - .layout-column > .flex-gt-sm-55 { - max-height: 55%; } - .flex-gt-sm-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-gt-sm-60 { - max-width: 60%; } - .layout-column > .flex-gt-sm-60 { - max-height: 60%; } - .flex-gt-sm-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-gt-sm-65 { - max-width: 65%; } - .layout-column > .flex-gt-sm-65 { - max-height: 65%; } - .flex-gt-sm-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-gt-sm-70 { - max-width: 70%; } - .layout-column > .flex-gt-sm-70 { - max-height: 70%; } - .flex-gt-sm-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-gt-sm-75 { - max-width: 75%; } - .layout-column > .flex-gt-sm-75 { - max-height: 75%; } - .flex-gt-sm-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-gt-sm-80 { - max-width: 80%; } - .layout-column > .flex-gt-sm-80 { - max-height: 80%; } - .flex-gt-sm-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-gt-sm-85 { - max-width: 85%; } - .layout-column > .flex-gt-sm-85 { - max-height: 85%; } - .flex-gt-sm-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-gt-sm-90 { - max-width: 90%; } - .layout-column > .flex-gt-sm-90 { - max-height: 90%; } - .flex-gt-sm-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-gt-sm-95 { - max-width: 95%; } - .layout-column > .flex-gt-sm-95 { - max-height: 95%; } - .flex-gt-sm-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-gt-sm-100 { - max-width: 100%; } - .layout-column > .flex-gt-sm-100 { - max-height: 100%; } - .flex-gt-sm-33, .flex-gt-sm-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-gt-sm-66, .flex-gt-sm-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-sm-33, .layout-row > .flex-gt-sm-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-sm-66, .layout-row > .flex-gt-sm-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-sm-33, .layout-column > .flex-gt-sm-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-sm-66, .layout-column > .flex-gt-sm-67 { - max-height: 66.66%; } } - -@media (min-width: 601px) and (max-width: 1024px) { - .hide:not(.show-gt-sm):not(.show-md):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-md):not(.show) { - display: none; } - .hide-md:not(.show-md):not(.show) { - display: none; } - .flex-order-md-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-md-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-md-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-md-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-md-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-md-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-md-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-md-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-md-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-md-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-md-center, .layout-align-md-center-center, - .layout-align-md-center-start, - .layout-align-md-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-md-end, .layout-align-md-end-center, - .layout-align-md-end-start, - .layout-align-md-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-md-space-around, .layout-align-md-space-around-center, - .layout-align-md-space-around-start, - .layout-align-md-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-md-space-between, .layout-align-md-space-between-center, - .layout-align-md-space-between-start, - .layout-align-md-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-md-center-center, - .layout-align-md-start-center, - .layout-align-md-end-center, - .layout-align-md-space-between-center, - .layout-align-md-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-md-center-start, - .layout-align-md-start-start, - .layout-align-md-end-start, - .layout-align-md-space-between-start, - .layout-align-md-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-md-center-end, - .layout-align-md-start-end, - .layout-align-md-end-end, - .layout-align-md-space-between-end, - .layout-align-md-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-md { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-md-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-md-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-md { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-md-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-md-0 { - max-width: 0%; } - .layout-column > .flex-md-0 { - max-height: 0%; } - .flex-md-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-md-5 { - max-width: 5%; } - .layout-column > .flex-md-5 { - max-height: 5%; } - .flex-md-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-md-10 { - max-width: 10%; } - .layout-column > .flex-md-10 { - max-height: 10%; } - .flex-md-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-md-15 { - max-width: 15%; } - .layout-column > .flex-md-15 { - max-height: 15%; } - .flex-md-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-md-20 { - max-width: 20%; } - .layout-column > .flex-md-20 { - max-height: 20%; } - .flex-md-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-md-25 { - max-width: 25%; } - .layout-column > .flex-md-25 { - max-height: 25%; } - .flex-md-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-md-30 { - max-width: 30%; } - .layout-column > .flex-md-30 { - max-height: 30%; } - .flex-md-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-md-35 { - max-width: 35%; } - .layout-column > .flex-md-35 { - max-height: 35%; } - .flex-md-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-md-40 { - max-width: 40%; } - .layout-column > .flex-md-40 { - max-height: 40%; } - .flex-md-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-md-45 { - max-width: 45%; } - .layout-column > .flex-md-45 { - max-height: 45%; } - .flex-md-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-md-50 { - max-width: 50%; } - .layout-column > .flex-md-50 { - max-height: 50%; } - .flex-md-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-md-55 { - max-width: 55%; } - .layout-column > .flex-md-55 { - max-height: 55%; } - .flex-md-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-md-60 { - max-width: 60%; } - .layout-column > .flex-md-60 { - max-height: 60%; } - .flex-md-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-md-65 { - max-width: 65%; } - .layout-column > .flex-md-65 { - max-height: 65%; } - .flex-md-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-md-70 { - max-width: 70%; } - .layout-column > .flex-md-70 { - max-height: 70%; } - .flex-md-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-md-75 { - max-width: 75%; } - .layout-column > .flex-md-75 { - max-height: 75%; } - .flex-md-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-md-80 { - max-width: 80%; } - .layout-column > .flex-md-80 { - max-height: 80%; } - .flex-md-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-md-85 { - max-width: 85%; } - .layout-column > .flex-md-85 { - max-height: 85%; } - .flex-md-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-md-90 { - max-width: 90%; } - .layout-column > .flex-md-90 { - max-height: 90%; } - .flex-md-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-md-95 { - max-width: 95%; } - .layout-column > .flex-md-95 { - max-height: 95%; } - .flex-md-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-md-100 { - max-width: 100%; } - .layout-column > .flex-md-100 { - max-height: 100%; } - .flex-md-33, .flex-md-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-md-66, .flex-md-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-md-33, .layout-row > .flex-md-34 { - max-width: 33.33%; } - .layout-row > .flex-md-66, .layout-row > .flex-md-67 { - max-width: 66.66%; } - .layout-column > .flex-md-33, .layout-column > .flex-md-34 { - max-height: 33.33%; } - .layout-column > .flex-md-66, .layout-column > .flex-md-67 { - max-height: 66.66%; } } - -@media (min-width: 1025px) { - .flex-order-gt-md-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-gt-md-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-gt-md-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-gt-md-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-gt-md-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-gt-md-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-gt-md-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-gt-md-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-gt-md-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-gt-md-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-gt-md-center, .layout-align-gt-md-center-center, - .layout-align-gt-md-center-start, - .layout-align-gt-md-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-gt-md-end, .layout-align-gt-md-end-center, - .layout-align-gt-md-end-start, - .layout-align-gt-md-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-gt-md-space-around, .layout-align-gt-md-space-around-center, - .layout-align-gt-md-space-around-start, - .layout-align-gt-md-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-gt-md-space-between, .layout-align-gt-md-space-between-center, - .layout-align-gt-md-space-between-start, - .layout-align-gt-md-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-gt-md-center-center, - .layout-align-gt-md-start-center, - .layout-align-gt-md-end-center, - .layout-align-gt-md-space-between-center, - .layout-align-gt-md-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-gt-md-center-start, - .layout-align-gt-md-start-start, - .layout-align-gt-md-end-start, - .layout-align-gt-md-space-between-start, - .layout-align-gt-md-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-gt-md-center-end, - .layout-align-gt-md-start-end, - .layout-align-gt-md-end-end, - .layout-align-gt-md-space-between-end, - .layout-align-gt-md-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-gt-md { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-gt-md-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-gt-md-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-gt-md { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-gt-md-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-gt-md-0 { - max-width: 0%; } - .layout-column > .flex-gt-md-0 { - max-height: 0%; } - .flex-gt-md-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-gt-md-5 { - max-width: 5%; } - .layout-column > .flex-gt-md-5 { - max-height: 5%; } - .flex-gt-md-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-gt-md-10 { - max-width: 10%; } - .layout-column > .flex-gt-md-10 { - max-height: 10%; } - .flex-gt-md-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-gt-md-15 { - max-width: 15%; } - .layout-column > .flex-gt-md-15 { - max-height: 15%; } - .flex-gt-md-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-gt-md-20 { - max-width: 20%; } - .layout-column > .flex-gt-md-20 { - max-height: 20%; } - .flex-gt-md-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-gt-md-25 { - max-width: 25%; } - .layout-column > .flex-gt-md-25 { - max-height: 25%; } - .flex-gt-md-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-gt-md-30 { - max-width: 30%; } - .layout-column > .flex-gt-md-30 { - max-height: 30%; } - .flex-gt-md-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-gt-md-35 { - max-width: 35%; } - .layout-column > .flex-gt-md-35 { - max-height: 35%; } - .flex-gt-md-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-gt-md-40 { - max-width: 40%; } - .layout-column > .flex-gt-md-40 { - max-height: 40%; } - .flex-gt-md-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-gt-md-45 { - max-width: 45%; } - .layout-column > .flex-gt-md-45 { - max-height: 45%; } - .flex-gt-md-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-gt-md-50 { - max-width: 50%; } - .layout-column > .flex-gt-md-50 { - max-height: 50%; } - .flex-gt-md-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-gt-md-55 { - max-width: 55%; } - .layout-column > .flex-gt-md-55 { - max-height: 55%; } - .flex-gt-md-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-gt-md-60 { - max-width: 60%; } - .layout-column > .flex-gt-md-60 { - max-height: 60%; } - .flex-gt-md-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-gt-md-65 { - max-width: 65%; } - .layout-column > .flex-gt-md-65 { - max-height: 65%; } - .flex-gt-md-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-gt-md-70 { - max-width: 70%; } - .layout-column > .flex-gt-md-70 { - max-height: 70%; } - .flex-gt-md-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-gt-md-75 { - max-width: 75%; } - .layout-column > .flex-gt-md-75 { - max-height: 75%; } - .flex-gt-md-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-gt-md-80 { - max-width: 80%; } - .layout-column > .flex-gt-md-80 { - max-height: 80%; } - .flex-gt-md-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-gt-md-85 { - max-width: 85%; } - .layout-column > .flex-gt-md-85 { - max-height: 85%; } - .flex-gt-md-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-gt-md-90 { - max-width: 90%; } - .layout-column > .flex-gt-md-90 { - max-height: 90%; } - .flex-gt-md-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-gt-md-95 { - max-width: 95%; } - .layout-column > .flex-gt-md-95 { - max-height: 95%; } - .flex-gt-md-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-gt-md-100 { - max-width: 100%; } - .layout-column > .flex-gt-md-100 { - max-height: 100%; } - .flex-gt-md-33, .flex-gt-md-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-gt-md-66, .flex-gt-md-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-md-33, .layout-row > .flex-gt-md-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-md-66, .layout-row > .flex-gt-md-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-md-33, .layout-column > .flex-gt-md-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-md-66, .layout-column > .flex-gt-md-67 { - max-height: 66.66%; } - .flex-order-lg-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-lg-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-lg-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-lg-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-lg-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-lg-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-lg-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-lg-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-lg-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-lg-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-lg-center, .layout-align-lg-center-center, - .layout-align-lg-center-start, - .layout-align-lg-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-lg-end, .layout-align-lg-end-center, - .layout-align-lg-end-start, - .layout-align-lg-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-lg-space-around, .layout-align-lg-space-around-center, - .layout-align-lg-space-around-start, - .layout-align-lg-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-lg-space-between, .layout-align-lg-space-between-center, - .layout-align-lg-space-between-start, - .layout-align-lg-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-lg-center-center, - .layout-align-lg-start-center, - .layout-align-lg-end-center, - .layout-align-lg-space-between-center, - .layout-align-lg-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-lg-center-start, - .layout-align-lg-start-start, - .layout-align-lg-end-start, - .layout-align-lg-space-between-start, - .layout-align-lg-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-lg-center-end, - .layout-align-lg-start-end, - .layout-align-lg-end-end, - .layout-align-lg-space-between-end, - .layout-align-lg-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-lg { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-lg-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-lg-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-lg { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-lg-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-lg-0 { - max-width: 0%; } - .layout-column > .flex-lg-0 { - max-height: 0%; } - .flex-lg-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-lg-5 { - max-width: 5%; } - .layout-column > .flex-lg-5 { - max-height: 5%; } - .flex-lg-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-lg-10 { - max-width: 10%; } - .layout-column > .flex-lg-10 { - max-height: 10%; } - .flex-lg-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-lg-15 { - max-width: 15%; } - .layout-column > .flex-lg-15 { - max-height: 15%; } - .flex-lg-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-lg-20 { - max-width: 20%; } - .layout-column > .flex-lg-20 { - max-height: 20%; } - .flex-lg-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-lg-25 { - max-width: 25%; } - .layout-column > .flex-lg-25 { - max-height: 25%; } - .flex-lg-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-lg-30 { - max-width: 30%; } - .layout-column > .flex-lg-30 { - max-height: 30%; } - .flex-lg-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-lg-35 { - max-width: 35%; } - .layout-column > .flex-lg-35 { - max-height: 35%; } - .flex-lg-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-lg-40 { - max-width: 40%; } - .layout-column > .flex-lg-40 { - max-height: 40%; } - .flex-lg-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-lg-45 { - max-width: 45%; } - .layout-column > .flex-lg-45 { - max-height: 45%; } - .flex-lg-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-lg-50 { - max-width: 50%; } - .layout-column > .flex-lg-50 { - max-height: 50%; } - .flex-lg-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-lg-55 { - max-width: 55%; } - .layout-column > .flex-lg-55 { - max-height: 55%; } - .flex-lg-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-lg-60 { - max-width: 60%; } - .layout-column > .flex-lg-60 { - max-height: 60%; } - .flex-lg-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-lg-65 { - max-width: 65%; } - .layout-column > .flex-lg-65 { - max-height: 65%; } - .flex-lg-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-lg-70 { - max-width: 70%; } - .layout-column > .flex-lg-70 { - max-height: 70%; } - .flex-lg-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-lg-75 { - max-width: 75%; } - .layout-column > .flex-lg-75 { - max-height: 75%; } - .flex-lg-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-lg-80 { - max-width: 80%; } - .layout-column > .flex-lg-80 { - max-height: 80%; } - .flex-lg-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-lg-85 { - max-width: 85%; } - .layout-column > .flex-lg-85 { - max-height: 85%; } - .flex-lg-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-lg-90 { - max-width: 90%; } - .layout-column > .flex-lg-90 { - max-height: 90%; } - .flex-lg-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-lg-95 { - max-width: 95%; } - .layout-column > .flex-lg-95 { - max-height: 95%; } - .flex-lg-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-lg-100 { - max-width: 100%; } - .layout-column > .flex-lg-100 { - max-height: 100%; } - .flex-lg-33, .flex-lg-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-lg-66, .flex-lg-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-lg-33, .layout-row > .flex-lg-34 { - max-width: 33.33%; } - .layout-row > .flex-lg-66, .layout-row > .flex-lg-67 { - max-width: 66.66%; } - .layout-column > .flex-lg-33, .layout-column > .flex-lg-34 { - max-height: 33.33%; } - .layout-column > .flex-lg-66, .layout-column > .flex-lg-67 { - max-height: 66.66%; } } - -@media (min-width: 1025px) { - .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show) { - display: none; } - .hide-lg:not(.show-lg):not(.show) { - display: none; } } - -@media (min-width: 1281px) { - .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-lg:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show) { - display: none; } - .flex-order-gt-lg-0 { - -webkit-box-ordinal-group: 1; - -webkit-order: 0; - -ms-flex-order: 0; - order: 0; } - .flex-order-gt-lg-1 { - -webkit-box-ordinal-group: 2; - -webkit-order: 1; - -ms-flex-order: 1; - order: 1; } - .flex-order-gt-lg-2 { - -webkit-box-ordinal-group: 3; - -webkit-order: 2; - -ms-flex-order: 2; - order: 2; } - .flex-order-gt-lg-3 { - -webkit-box-ordinal-group: 4; - -webkit-order: 3; - -ms-flex-order: 3; - order: 3; } - .flex-order-gt-lg-4 { - -webkit-box-ordinal-group: 5; - -webkit-order: 4; - -ms-flex-order: 4; - order: 4; } - .flex-order-gt-lg-5 { - -webkit-box-ordinal-group: 6; - -webkit-order: 5; - -ms-flex-order: 5; - order: 5; } - .flex-order-gt-lg-6 { - -webkit-box-ordinal-group: 7; - -webkit-order: 6; - -ms-flex-order: 6; - order: 6; } - .flex-order-gt-lg-7 { - -webkit-box-ordinal-group: 8; - -webkit-order: 7; - -ms-flex-order: 7; - order: 7; } - .flex-order-gt-lg-8 { - -webkit-box-ordinal-group: 9; - -webkit-order: 8; - -ms-flex-order: 8; - order: 8; } - .flex-order-gt-lg-9 { - -webkit-box-ordinal-group: 10; - -webkit-order: 9; - -ms-flex-order: 9; - order: 9; } - .layout-align-gt-lg-center, .layout-align-gt-lg-center-center, - .layout-align-gt-lg-center-start, - .layout-align-gt-lg-center-end { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; } - .layout-align-gt-lg-end, .layout-align-gt-lg-end-center, - .layout-align-gt-lg-end-start, - .layout-align-gt-lg-end-end { - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; } - .layout-align-gt-lg-space-around, .layout-align-gt-lg-space-around-center, - .layout-align-gt-lg-space-around-start, - .layout-align-gt-lg-space-around-end { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; } - .layout-align-gt-lg-space-between, .layout-align-gt-lg-space-between-center, - .layout-align-gt-lg-space-between-start, - .layout-align-gt-lg-space-between-end { - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - .layout-align-gt-lg-center-center, - .layout-align-gt-lg-start-center, - .layout-align-gt-lg-end-center, - .layout-align-gt-lg-space-between-center, - .layout-align-gt-lg-space-around-center { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - .layout-align-gt-lg-center-start, - .layout-align-gt-lg-start-start, - .layout-align-gt-lg-end-start, - .layout-align-gt-lg-space-between-start, - .layout-align-gt-lg-space-around-start { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } - .layout-align-gt-lg-center-end, - .layout-align-gt-lg-start-end, - .layout-align-gt-lg-end-end, - .layout-align-gt-lg-space-between-end, - .layout-align-gt-lg-space-around-end { - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; } - .layout-gt-lg { - box-sizing: border-box; - display: -webkit-box; - display: -webkit-flex; - display: -moz-flex; - display: -ms-flexbox; - display: flex; } - .layout-gt-lg-column { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; } - .layout-gt-lg-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; } - .flex-gt-lg { - box-sizing: border-box; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; } - .flex-gt-lg-0 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 0%; - -ms-flex: 0 0 0%; - flex: 0 0 0%; } - .layout-row > .flex-gt-lg-0 { - max-width: 0%; } - .layout-column > .flex-gt-lg-0 { - max-height: 0%; } - .flex-gt-lg-5 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 5%; - -ms-flex: 0 0 5%; - flex: 0 0 5%; } - .layout-row > .flex-gt-lg-5 { - max-width: 5%; } - .layout-column > .flex-gt-lg-5 { - max-height: 5%; } - .flex-gt-lg-10 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 10%; - -ms-flex: 0 0 10%; - flex: 0 0 10%; } - .layout-row > .flex-gt-lg-10 { - max-width: 10%; } - .layout-column > .flex-gt-lg-10 { - max-height: 10%; } - .flex-gt-lg-15 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 15%; - -ms-flex: 0 0 15%; - flex: 0 0 15%; } - .layout-row > .flex-gt-lg-15 { - max-width: 15%; } - .layout-column > .flex-gt-lg-15 { - max-height: 15%; } - .flex-gt-lg-20 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 20%; - -ms-flex: 0 0 20%; - flex: 0 0 20%; } - .layout-row > .flex-gt-lg-20 { - max-width: 20%; } - .layout-column > .flex-gt-lg-20 { - max-height: 20%; } - .flex-gt-lg-25 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 25%; - -ms-flex: 0 0 25%; - flex: 0 0 25%; } - .layout-row > .flex-gt-lg-25 { - max-width: 25%; } - .layout-column > .flex-gt-lg-25 { - max-height: 25%; } - .flex-gt-lg-30 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 30%; - -ms-flex: 0 0 30%; - flex: 0 0 30%; } - .layout-row > .flex-gt-lg-30 { - max-width: 30%; } - .layout-column > .flex-gt-lg-30 { - max-height: 30%; } - .flex-gt-lg-35 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 35%; - -ms-flex: 0 0 35%; - flex: 0 0 35%; } - .layout-row > .flex-gt-lg-35 { - max-width: 35%; } - .layout-column > .flex-gt-lg-35 { - max-height: 35%; } - .flex-gt-lg-40 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 40%; - -ms-flex: 0 0 40%; - flex: 0 0 40%; } - .layout-row > .flex-gt-lg-40 { - max-width: 40%; } - .layout-column > .flex-gt-lg-40 { - max-height: 40%; } - .flex-gt-lg-45 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 45%; - -ms-flex: 0 0 45%; - flex: 0 0 45%; } - .layout-row > .flex-gt-lg-45 { - max-width: 45%; } - .layout-column > .flex-gt-lg-45 { - max-height: 45%; } - .flex-gt-lg-50 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 50%; - -ms-flex: 0 0 50%; - flex: 0 0 50%; } - .layout-row > .flex-gt-lg-50 { - max-width: 50%; } - .layout-column > .flex-gt-lg-50 { - max-height: 50%; } - .flex-gt-lg-55 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 55%; - -ms-flex: 0 0 55%; - flex: 0 0 55%; } - .layout-row > .flex-gt-lg-55 { - max-width: 55%; } - .layout-column > .flex-gt-lg-55 { - max-height: 55%; } - .flex-gt-lg-60 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 60%; - -ms-flex: 0 0 60%; - flex: 0 0 60%; } - .layout-row > .flex-gt-lg-60 { - max-width: 60%; } - .layout-column > .flex-gt-lg-60 { - max-height: 60%; } - .flex-gt-lg-65 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 65%; - -ms-flex: 0 0 65%; - flex: 0 0 65%; } - .layout-row > .flex-gt-lg-65 { - max-width: 65%; } - .layout-column > .flex-gt-lg-65 { - max-height: 65%; } - .flex-gt-lg-70 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 70%; - -ms-flex: 0 0 70%; - flex: 0 0 70%; } - .layout-row > .flex-gt-lg-70 { - max-width: 70%; } - .layout-column > .flex-gt-lg-70 { - max-height: 70%; } - .flex-gt-lg-75 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 75%; - -ms-flex: 0 0 75%; - flex: 0 0 75%; } - .layout-row > .flex-gt-lg-75 { - max-width: 75%; } - .layout-column > .flex-gt-lg-75 { - max-height: 75%; } - .flex-gt-lg-80 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 80%; - -ms-flex: 0 0 80%; - flex: 0 0 80%; } - .layout-row > .flex-gt-lg-80 { - max-width: 80%; } - .layout-column > .flex-gt-lg-80 { - max-height: 80%; } - .flex-gt-lg-85 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 85%; - -ms-flex: 0 0 85%; - flex: 0 0 85%; } - .layout-row > .flex-gt-lg-85 { - max-width: 85%; } - .layout-column > .flex-gt-lg-85 { - max-height: 85%; } - .flex-gt-lg-90 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 90%; - -ms-flex: 0 0 90%; - flex: 0 0 90%; } - .layout-row > .flex-gt-lg-90 { - max-width: 90%; } - .layout-column > .flex-gt-lg-90 { - max-height: 90%; } - .flex-gt-lg-95 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 95%; - -ms-flex: 0 0 95%; - flex: 0 0 95%; } - .layout-row > .flex-gt-lg-95 { - max-width: 95%; } - .layout-column > .flex-gt-lg-95 { - max-height: 95%; } - .flex-gt-lg-100 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 100%; - -ms-flex: 0 0 100%; - flex: 0 0 100%; } - .layout-row > .flex-gt-lg-100 { - max-width: 100%; } - .layout-column > .flex-gt-lg-100 { - max-height: 100%; } - .flex-gt-lg-33, .flex-gt-lg-34 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 33.33%; - -ms-flex: 0 0 33.33%; - flex: 0 0 33.33%; } - .flex-gt-lg-66, .flex-gt-lg-67 { - -webkit-box-flex: 0; - -webkit-flex: 0 0 66.66%; - -ms-flex: 0 0 66.66%; - flex: 0 0 66.66%; } - .layout-row > .flex-gt-lg-33, .layout-row > .flex-gt-lg-34 { - max-width: 33.33%; } - .layout-row > .flex-gt-lg-66, .layout-row > .flex-gt-lg-67 { - max-width: 66.66%; } - .layout-column > .flex-gt-lg-33, .layout-column > .flex-gt-lg-34 { - max-height: 33.33%; } - .layout-column > .flex-gt-lg-66, .layout-column > .flex-gt-lg-67 { - max-height: 66.66%; } } - .md-flex { -webkit-box-flex: 1; -webkit-flex: 1 1 auto; @@ -5382,218 +2390,6 @@ html * { -ms-flex: 1 1 0; flex: 1 1 0; } -@media (min-width: 601px) and (max-width: 1024px) { - .cols-1 { - max-width: 6.25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 6.25vw; - -ms-flex: 1 1 6.25vw; - flex: 1 1 6.25vw; } - .cols-2 { - max-width: 12.5vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 12.5vw; - -ms-flex: 1 1 12.5vw; - flex: 1 1 12.5vw; } - .cols-3 { - max-width: 18.75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 18.75vw; - -ms-flex: 1 1 18.75vw; - flex: 1 1 18.75vw; } - .cols-4 { - max-width: 25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 25vw; - -ms-flex: 1 1 25vw; - flex: 1 1 25vw; } - .cols-5 { - max-width: 31.25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 31.25vw; - -ms-flex: 1 1 31.25vw; - flex: 1 1 31.25vw; } - .cols-6 { - max-width: 37.5vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 37.5vw; - -ms-flex: 1 1 37.5vw; - flex: 1 1 37.5vw; } - .cols-7 { - max-width: 43.75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 43.75vw; - -ms-flex: 1 1 43.75vw; - flex: 1 1 43.75vw; } - .cols-8 { - max-width: 50vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 50vw; - -ms-flex: 1 1 50vw; - flex: 1 1 50vw; } - .cols-9 { - max-width: 56.25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 56.25vw; - -ms-flex: 1 1 56.25vw; - flex: 1 1 56.25vw; } - .cols-10 { - max-width: 62.5vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 62.5vw; - -ms-flex: 1 1 62.5vw; - flex: 1 1 62.5vw; } - .cols-11 { - max-width: 68.75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 68.75vw; - -ms-flex: 1 1 68.75vw; - flex: 1 1 68.75vw; } - .cols-12 { - max-width: 75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 75vw; - -ms-flex: 1 1 75vw; - flex: 1 1 75vw; } - .cols-13 { - max-width: 81.25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 81.25vw; - -ms-flex: 1 1 81.25vw; - flex: 1 1 81.25vw; } - .cols-14 { - max-width: 87.5vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 87.5vw; - -ms-flex: 1 1 87.5vw; - flex: 1 1 87.5vw; } - .cols-15 { - max-width: 93.75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 93.75vw; - -ms-flex: 1 1 93.75vw; - flex: 1 1 93.75vw; } } - -@media (min-width: 1025px) { - .cols-1 { - max-width: 5vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 5vw; - -ms-flex: 1 1 5vw; - flex: 1 1 5vw; } - .cols-2 { - max-width: 10vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 10vw; - -ms-flex: 1 1 10vw; - flex: 1 1 10vw; } - .cols-3 { - max-width: 15vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 15vw; - -ms-flex: 1 1 15vw; - flex: 1 1 15vw; } - .cols-4 { - max-width: 20vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 20vw; - -ms-flex: 1 1 20vw; - flex: 1 1 20vw; } - .cols-5 { - max-width: 25vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 25vw; - -ms-flex: 1 1 25vw; - flex: 1 1 25vw; } - .cols-6 { - max-width: 30vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 30vw; - -ms-flex: 1 1 30vw; - flex: 1 1 30vw; } - .cols-7 { - max-width: 35vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 35vw; - -ms-flex: 1 1 35vw; - flex: 1 1 35vw; } - .cols-8 { - max-width: 40vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 40vw; - -ms-flex: 1 1 40vw; - flex: 1 1 40vw; } - .cols-9 { - max-width: 45vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 45vw; - -ms-flex: 1 1 45vw; - flex: 1 1 45vw; } - .cols-10 { - max-width: 50vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 50vw; - -ms-flex: 1 1 50vw; - flex: 1 1 50vw; } - .cols-11 { - max-width: 55vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 55vw; - -ms-flex: 1 1 55vw; - flex: 1 1 55vw; } - .cols-12 { - max-width: 60vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 60vw; - -ms-flex: 1 1 60vw; - flex: 1 1 60vw; } - .cols-13 { - max-width: 65vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 65vw; - -ms-flex: 1 1 65vw; - flex: 1 1 65vw; } - .cols-14 { - max-width: 70vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 70vw; - -ms-flex: 1 1 70vw; - flex: 1 1 70vw; } - .cols-15 { - max-width: 75vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 75vw; - -ms-flex: 1 1 75vw; - flex: 1 1 75vw; } - .cols-16 { - max-width: 80vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 80vw; - -ms-flex: 1 1 80vw; - flex: 1 1 80vw; } - .cols-17 { - max-width: 85vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 85vw; - -ms-flex: 1 1 85vw; - flex: 1 1 85vw; } - .cols-18 { - max-width: 90vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 90vw; - -ms-flex: 1 1 90vw; - flex: 1 1 90vw; } - .cols-19 { - max-width: 95vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 95vw; - -ms-flex: 1 1 95vw; - flex: 1 1 95vw; } } - -[layout="row"].md-layout-margin { - margin-right: 0; - margin-left: 0; } - @media (max-width: 600px) { .sg-app-content { width: 100%; @@ -5887,6 +2683,16 @@ html p { font-weight: 200; white-space: normal; } +.sg-label-outline { + border-width: 1px; + border-style: solid; + border-radius: 3px; + margin: 0; + padding: 0 5px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; } + .sg-date-group { font-size: 14px; line-height: 1; @@ -5982,28 +2788,27 @@ md-autocomplete { height: 40px; } md-autocomplete md-autocomplete-wrap.md-menu-showing { z-index: 51; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate { position: absolute; - bottom: 0; + top: 20px; left: 0; width: 100%; height: 3px; -webkit-transition: none; transition: none; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] .md-container { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate .md-container { -webkit-transition: none; transition: none; - top: auto; height: 3px; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate.ng-enter { -webkit-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter.ng-enter-active { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate.ng-enter.ng-enter-active { opacity: 1; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate.ng-leave { -webkit-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } - md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave.ng-leave-active { + md-autocomplete md-autocomplete-wrap md-progress-linear .md-mode-indeterminate.ng-leave.ng-leave-active { opacity: 0; } md-autocomplete input:not(.md-input) { font-size: 14px; @@ -6386,10 +3191,6 @@ md-backdrop { .md-button.md-fab-overlap-bottom.md-fab-bottom-left { bottom: -36px; } -md-sidenav md-list .md-button, -.view-list md-list .md-button { - background-color: transparent !important; } - .view-list md-list .md-button { padding: 0; } @@ -6404,16 +3205,6 @@ md-list md-list-item button.md-button.sg-icon-button { min-width: 36px; -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } - a.md-button.sg-icon-button:hover, - a.md-button.sg-icon-button:active, - .md-button.sg-icon-button:hover, - .md-button.sg-icon-button:active, - md-list md-list-item button.md-button.sg-icon-button:hover, - md-list md-list-item button.md-button.sg-icon-button:active { - background-color: transparent; - -webkit-transform: scale(1.25); - -ms-transform: scale(1.25); - transform: scale(1.25); } a.md-button.sg-icon-button .md-ripple-container, .md-button.sg-icon-button .md-ripple-container, md-list md-list-item button.md-button.sg-icon-button .md-ripple-container { @@ -6433,7 +3224,6 @@ md-list md-list-item button.md-button.sg-icon-button { -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 0 -16px 0 16px; font-size: 16px; -webkit-box-align: center; -webkit-align-items: center; @@ -6460,6 +3250,16 @@ md-list md-list-item button.md-button.sg-icon-button { padding: 0; font-size: 24px; } +.sg-outline-button { + border-width: 1px; + border-style: solid; + border-radius: 3px; + margin: 5px; + padding: 5px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; } + /*! card/_extends.scss - */ md-card { box-sizing: border-box; @@ -6498,9 +3298,6 @@ md-card md-card-content { -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); } -md-card.md-default-theme { - background-color: #fcfbf8; } - md-card.sg-collapsed, md-card.sg-expanded { -webkit-transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); @@ -6880,6 +3677,10 @@ md-chips.sg-readonly .md-chips { .sg-chips-autocomplete { width: 360px; } +.md-contact-chips .md-chips .md-chip .md-contact-avatar md-icon { + height: 24px; + margin: 4px; } + .md-contact-suggestion .md-contact-name { width: auto; } @@ -6938,9 +3739,10 @@ md-calendar { width: 100%; } .md-calendar-scroll-container { + box-shadow: inset -3px 3px 6px rgba(0, 0, 0, 0.2); display: inline-block; height: 308px; - width: 340px; } + width: 346px; } .md-calendar-date { height: 44px; @@ -7008,7 +3810,7 @@ md-datepicker { box-sizing: border-box; background: none; } -.md-datepicker-input { +.md-datepicker-input, .sg-timepicker-input { font-size: 14px; box-sizing: border-box; border: none; @@ -7017,10 +3819,10 @@ md-datepicker { background: transparent; min-width: 120px; max-width: 328px; } - .md-datepicker-input::-ms-clear { + .md-datepicker-input::-ms-clear, .sg-timepicker-input::-ms-clear { display: none; } -.md-datepicker-input-container { +.md-datepicker-input-container, .sg-timepicker-input-container { position: relative; padding-bottom: 5px; border-bottom-width: 1px; @@ -7028,10 +3830,10 @@ md-datepicker { display: inline-block; width: auto; margin-left: 12px; } - .md-datepicker-input-container.md-datepicker-focused { + .md-datepicker-input-container.md-datepicker-focused, .md-datepicker-focused.sg-timepicker-input-container { border-bottom-width: 2px; } -.md-datepicker-calendar-pane { +.md-datepicker-calendar-pane, .sg-timepicker-time-pane { position: absolute; top: 0; left: 0; @@ -7047,7 +3849,7 @@ md-datepicker { transform-origin: 0 0; -webkit-transition: -webkit-transform 0.2s cubic-bezier(0.25, 0.8, 0.25, 1); transition: transform 0.2s cubic-bezier(0.25, 0.8, 0.25, 1); } - .md-datepicker-calendar-pane.md-pane-open { + .md-datepicker-calendar-pane.md-pane-open, .md-pane-open.sg-timepicker-time-pane { -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); } @@ -7060,7 +3862,7 @@ md-datepicker { pointer-events: none; cursor: text; } -.md-datepicker-input-mask-opaque { +.md-datepicker-input-mask-opaque, .sg-timepicker-input-mask-opaque { position: absolute; right: 0; left: 120px; @@ -7076,7 +3878,7 @@ md-datepicker { .md-datepicker-calendar md-calendar:focus { outline: none; } -.md-datepicker-expand-triangle { +.md-datepicker-expand-triangle, .sg-timepicker-expand-triangle { position: absolute; top: 50%; left: 50%; @@ -7089,7 +3891,7 @@ md-datepicker { border-right: 5px solid transparent; border-top: 5px solid rgba(0, 0, 0, 0.2); } -.md-datepicker-triangle-button { +.md-datepicker-triangle-button, .sg-timepicker-triangle-button { position: absolute; right: 0; top: 0; @@ -7097,30 +3899,51 @@ md-datepicker { -ms-transform: translateY(-25%) translateX(45%); transform: translateY(-25%) translateX(45%); } -.md-datepicker-triangle-button.md-button.md-icon-button { +.md-datepicker-triangle-button.md-button.md-icon-button, .md-button.md-icon-button.sg-timepicker-triangle-button { height: 100%; width: 36px; position: absolute; } -md-datepicker[disabled] .md-datepicker-input-container { +md-datepicker[disabled] .md-datepicker-input-container, md-datepicker[disabled] .sg-timepicker-input-container { border-bottom-color: transparent; } -md-datepicker[disabled] .md-datepicker-triangle-button { +md-datepicker[disabled] .md-datepicker-triangle-button, md-datepicker[disabled] .sg-timepicker-triangle-button { display: none; } -.md-datepicker-open .md-datepicker-input-container { +.md-datepicker-open .md-datepicker-input-container, .md-datepicker-open .sg-timepicker-input-container { margin-left: -12px; border: none; } -.md-datepicker-open .md-datepicker-input { +.md-datepicker-open .md-datepicker-input, .md-datepicker-open .sg-timepicker-input { margin-left: 24px; height: 40px; } -.md-datepicker-open .md-datepicker-triangle-button { +.md-datepicker-open .md-datepicker-triangle-button, .md-datepicker-open .sg-timepicker-triangle-button { display: none; } -md-datepicker { - background: transparent; } +.md-datepicker-pos-adjusted .md-datepicker-input-mask { + display: none; } + +.md-datepicker-calendar-pane .md-calendar, .sg-timepicker-time-pane .md-calendar { + -webkit-transform: translateY(150px); + -ms-transform: translateY(150px); + transform: translateY(150px); + -webkit-transition: -webkit-transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; } + +.md-datepicker-calendar-pane.md-pane-open .md-calendar, .md-pane-open.sg-timepicker-time-pane .md-calendar { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); } + +.md-calendar-scroll-container, +.md-datepicker-input-mask { + width: auto; } + +.md-datepicker-input-container, .sg-timepicker-input-container { + margin-left: 0; } /*! dialog/_extends.scss - */ .md-dialog-is-showing { @@ -7251,14 +4074,34 @@ md-dialog { md-dialog { border: 1px solid #fff; } } +body.popup md-dialog[flex-sm="100"], +body.popup md-dialog.flex-sm-100 { + max-width: 100%; + max-height: 100%; + width: 100%; + height: 100%; + border-radius: 0; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; } + body.popup md-dialog[flex-sm="100"] md-dialog-content, + body.popup md-dialog.flex-sm-100 md-dialog-content { + padding: 16px; } + @media (max-width: 600px) { - [flex-sm="100"], - .flex-sm-100 { + md-dialog[flex-sm="100"], + md-dialog.flex-sm-100 { max-width: 100%; max-height: 100%; width: 100%; height: 100%; - border-radius: 0; } } + border-radius: 0; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; } + md-dialog[flex-sm="100"] md-dialog-content, + md-dialog.flex-sm-100 md-dialog-content { + padding: 16px; } } /*! divider/_extends.scss - */ md-divider { @@ -7620,16 +4463,19 @@ md-icon { md-icon.icon-declined:before, md-icon.icon-remove-circle:before { content: "\e15c"; } + md-icon.icon-search:before { + content: "\e8b6"; } + md-icon.icon-star:before { + content: "\e838"; } + md-icon.icon-star-border:before { + content: "\e83a"; } + md-icon.icon-stop:before { + content: "\e047"; } md-icon.icon-visibility-off:before { content: "\e8f5"; } md-icon.icon-vpn-key:before { content: "\e0da"; } -.sg-msg-flag md-icon { - color: #eaf5e9 !important; } - .sg-msg-flag md-icon.flagged { - color: #8ebfbb !important; } - /*! input/_extends.scss - */ md-input-container { display: -webkit-box; @@ -7995,7 +4841,7 @@ md-list-item, md-list-item .md-list-item-inner { -webkit-align-items: center; -ms-flex-align: center; align-items: center; - min-height: 64px; } + min-height: 48px; } md-list-item > div.md-primary > md-icon, md-list-item > div.md-secondary > md-icon, md-list-item > md-icon:first-child, @@ -8180,46 +5026,29 @@ md-list-item .sg-inline-list-icon-label { padding-right: 0px; } .md-tile-left, -.md-tile-left-card:before, -.sg-avatar:before, .md-tile-left-list:before, -.sg-list-avatar:before, .md-tile-left-selected:before, -.sg-selected-avatar:before, .md-tile-left-accepted:before, -.sg-accepted:before, .md-tile-left-declined:before, -.sg-declined:before, .md-tile-left-delegated:before, -.sg-delegated:before, .md-tile-left-needs-action:before, -.sg-needs-action:before, .md-tile-left-tentative:before, -.sg-tentative:before, .md-tile-right { +.md-tile-left-list, +.sg-list-avatar, .md-tile-left-selected, +.sg-selected-avatar, .md-tile-right { + display: block; border-radius: 100%; padding: 16px; width: 72px; height: 72px; - line-height: 72px; background-clip: content-box; } + .md-tile-left md-icon, + .md-tile-left-list md-icon, + .sg-list-avatar md-icon, .md-tile-left-selected md-icon, + .sg-selected-avatar md-icon, .md-tile-right md-icon { + font-size: 40px; } .md-tile-right { margin-right: -16px; } -div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-tile-left-list:before, div.sg-list-avatar:before, div.md-tile-left-selected:before, div.sg-selected-avatar:before, div.md-tile-left-accepted:before, div.sg-accepted:before, div.md-tile-left-declined:before, div.sg-declined:before, div.md-tile-left-delegated:before, div.sg-delegated:before, div.md-tile-left-needs-action:before, div.sg-needs-action:before, div.md-tile-left-tentative:before, div.sg-tentative:before { +div.md-tile-left, div.md-tile-left-list, div.sg-list-avatar, div.md-tile-left-selected, div.sg-selected-avatar { 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-section-list md-list-item .md-list-item-inner .md-secondary { + right: 0px; } .sg-tile-content { -webkit-box-align: baseline; @@ -8291,47 +5120,20 @@ div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-til border-radius: 100%; margin-right: 8px; } -.md-tile-left:before, .md-tile-left-card:before, .sg-avatar:before, .md-tile-left-list:before, .sg-list-avatar:before, .md-tile-left-selected:before, .sg-selected-avatar:before, .md-tile-left-accepted:before, .sg-accepted:before, .md-tile-left-declined:before, .sg-declined:before, .md-tile-left-delegated:before, .sg-delegated:before, .md-tile-left-needs-action:before, .sg-needs-action:before, .md-tile-left-tentative:before, .sg-tentative:before { +.md-tile-left:before, +.md-tile-left-list:before, +.sg-list-avatar:before, .md-tile-left-selected:before, +.sg-selected-avatar:before, .md-tile-left md-icon, .md-tile-left-list md-icon, .sg-list-avatar md-icon, .md-tile-left-selected md-icon, .sg-selected-avatar md-icon { font-family: 'Material Icons'; font-size: 40px; color: rgba(0, 0, 0, 0.26); } -.md-tile-left-card:before, .sg-avatar:before { - content: "\e7fd"; } - .md-tile-left-list:before, .sg-list-avatar:before { content: "\e7ef"; } .md-tile-left-selected:before, .sg-selected-avatar:before { content: "\e5ca"; } -.md-tile-left-accepted:before, .sg-accepted:before { - background-color: rgba(0, 255, 0, 0.3) !important; - content: "\e5ca"; - color: rgba(0, 0, 0, 0.5); } - -.md-tile-left-declined:before, .sg-declined:before { - background-color: rgba(255, 0, 0, 0.3) !important; - content: "\e15b"; - color: rgba(0, 0, 0, 0.5); } - -.md-tile-left-delegated:before, .sg-delegated:before { - background-color: rgba(192, 192, 192, 0.3) !important; - content: "\e5c8"; - color: rgba(0, 0, 0, 0.5); } - -.md-tile-left-needs-action:before, .sg-needs-action:before { - background-color: rgba(255, 255, 0, 0.3) !important; - content: "?"; } - -.md-tile-left-tentative:before, .sg-tentative:before { - background-color: rgba(255, 255, 0, 0.3) !important; - content: "\e7fd"; } - -.sg-avatar { - margin-right: 0; - margin-left: 0; } - .sg-list-avatar { margin-right: 0; margin-left: 0; } @@ -8340,26 +5142,6 @@ div.md-tile-left, div.md-tile-left-card:before, div.sg-avatar:before, div.md-til 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; @@ -8468,6 +5250,8 @@ md-menu-item { md-menu-item > .md-button span { margin-top: auto; margin-bottom: auto; } + md-menu-item > .md-button .md-ripple-container { + border-radius: inherit; } .md-menu { padding: 8px 0; } @@ -8505,10 +5289,108 @@ md-toolbar .md-menu { min-width: 448px; } } /*! progressCircular/_extends.scss - */ +md-progress-circular { + display: block; + position: relative; + width: 100px; + height: 100px; + padding-top: 0 !important; + margin-bottom: 0 !important; + -webkit-transform: scale(0.5); + -ms-transform: scale(0.5); + transform: scale(0.5); } + md-progress-circular .md-spinner-wrapper { + display: block; + position: relative; + overflow: hidden; } + md-progress-circular .md-spinner-wrapper .md-inner { + width: 100px; + height: 100px; + position: relative; } + md-progress-circular .md-spinner-wrapper .md-inner .md-gap { + position: absolute; + left: 49px; + right: 49px; + top: 0; + bottom: 0; + border-top-width: 10px; + border-top-style: solid; + box-sizing: border-box; } + md-progress-circular .md-spinner-wrapper .md-inner .md-left, md-progress-circular .md-spinner-wrapper .md-inner .md-right { + position: absolute; + top: 0; + height: 100px; + width: 50px; + overflow: hidden; } + md-progress-circular .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular .md-spinner-wrapper .md-inner .md-right .md-half-circle { + position: absolute; + top: 0; + width: 100px; + height: 100px; + box-sizing: border-box; + border-width: 10px; + border-style: solid; + border-bottom-color: transparent; + border-radius: 50%; } + md-progress-circular .md-spinner-wrapper .md-inner .md-left { + left: 0; } + md-progress-circular .md-spinner-wrapper .md-inner .md-left .md-half-circle { + left: 0; + border-right-color: transparent; } + md-progress-circular .md-spinner-wrapper .md-inner .md-right { + right: 0; } + md-progress-circular .md-spinner-wrapper .md-inner .md-right .md-half-circle { + right: 0; + border-left-color: transparent; } + md-progress-circular .md-spinner-wrapper.md-mode-indeterminate { + -webkit-animation: outer-rotate 2.9166666667s linear infinite; + animation: outer-rotate 2.9166666667s linear infinite; } + md-progress-circular .md-spinner-wrapper.md-mode-indeterminate .md-inner { + -webkit-animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; + animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; } + md-progress-circular .md-spinner-wrapper.md-mode-indeterminate .md-inner .md-left .md-half-circle, md-progress-circular .md-spinner-wrapper.md-mode-indeterminate .md-inner .md-right .md-half-circle { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-duration: 1.3125s; + animation-duration: 1.3125s; + -webkit-animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); + animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); } + md-progress-circular .md-spinner-wrapper.md-mode-indeterminate .md-inner .md-left .md-half-circle { + -webkit-animation-name: left-wobble; + animation-name: left-wobble; } + md-progress-circular .md-spinner-wrapper.md-mode-indeterminate .md-inner .md-right .md-half-circle { + -webkit-animation-name: right-wobble; + animation-name: right-wobble; } + md-progress-circular md-progress-circular.ng-hide .md-spinner-wrapper { + -webkit-animation: none; + animation: none; } + md-progress-circular md-progress-circular.ng-hide .md-spinner-wrapper .md-inner { + -webkit-animation: none; + animation: none; } + md-progress-circular md-progress-circular.ng-hide .md-spinner-wrapper .md-inner .md-left .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } + md-progress-circular md-progress-circular.ng-hide .md-spinner-wrapper .md-inner .md-right .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } + md-progress-circular .md-spinner-wrapper.ng-hide { + -webkit-animation: none; + animation: none; } + md-progress-circular .md-spinner-wrapper.ng-hide .md-inner { + -webkit-animation: none; + animation: none; } + md-progress-circular .md-spinner-wrapper.ng-hide .md-inner .md-left .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } + md-progress-circular .md-spinner-wrapper.ng-hide .md-inner .md-right .md-half-circle { + -webkit-animation-name: none; + animation-name: none; } + @-webkit-keyframes outer-rotate { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } + @keyframes outer-rotate { 100% { -webkit-transform: rotate(360deg); @@ -8598,1576 +5480,6 @@ md-toolbar .md-menu { -webkit-transform: rotate(1080deg); transform: rotate(1080deg); } } -md-progress-circular { - width: 100px; - height: 100px; - display: block; - position: relative; - padding-top: 0 !important; - margin-bottom: 0 !important; - overflow: hidden; - -webkit-transform: scale(0.5); - -ms-transform: scale(0.5); - transform: scale(0.5); } - md-progress-circular .md-inner { - width: 100px; - height: 100px; - position: relative; } - md-progress-circular .md-inner .md-gap { - position: absolute; - left: 49px; - right: 49px; - top: 0; - bottom: 0; - border-top-width: 10px; - border-top-style: solid; - box-sizing: border-box; } - md-progress-circular .md-inner .md-left, md-progress-circular .md-inner .md-right { - position: absolute; - top: 0; - height: 100px; - width: 50px; - overflow: hidden; } - md-progress-circular .md-inner .md-left .md-half-circle, md-progress-circular .md-inner .md-right .md-half-circle { - position: absolute; - top: 0; - width: 100px; - height: 100px; - box-sizing: border-box; - border-width: 10px; - border-style: solid; - border-bottom-color: transparent; - border-radius: 50%; } - md-progress-circular .md-inner .md-left { - left: 0; } - md-progress-circular .md-inner .md-left .md-half-circle { - left: 0; - border-right-color: transparent; } - md-progress-circular .md-inner .md-right { - right: 0; } - md-progress-circular .md-inner .md-right .md-half-circle { - right: 0; - border-left-color: transparent; } - md-progress-circular[value="0"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="0"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-135deg); - -ms-transform: rotate(-135deg); - transform: rotate(-135deg); } - md-progress-circular[value="0"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="1"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="1"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-131.4deg); - -ms-transform: rotate(-131.4deg); - transform: rotate(-131.4deg); } - md-progress-circular[value="1"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="2"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="2"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-127.8deg); - -ms-transform: rotate(-127.8deg); - transform: rotate(-127.8deg); } - md-progress-circular[value="2"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="3"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="3"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-124.2deg); - -ms-transform: rotate(-124.2deg); - transform: rotate(-124.2deg); } - md-progress-circular[value="3"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="4"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="4"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-120.6deg); - -ms-transform: rotate(-120.6deg); - transform: rotate(-120.6deg); } - md-progress-circular[value="4"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="5"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="5"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-117deg); - -ms-transform: rotate(-117deg); - transform: rotate(-117deg); } - md-progress-circular[value="5"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="6"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="6"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-113.4deg); - -ms-transform: rotate(-113.4deg); - transform: rotate(-113.4deg); } - md-progress-circular[value="6"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="7"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="7"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-109.8deg); - -ms-transform: rotate(-109.8deg); - transform: rotate(-109.8deg); } - md-progress-circular[value="7"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="8"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="8"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-106.2deg); - -ms-transform: rotate(-106.2deg); - transform: rotate(-106.2deg); } - md-progress-circular[value="8"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="9"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="9"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-102.6deg); - -ms-transform: rotate(-102.6deg); - transform: rotate(-102.6deg); } - md-progress-circular[value="9"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="10"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="10"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-99deg); - -ms-transform: rotate(-99deg); - transform: rotate(-99deg); } - md-progress-circular[value="10"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="11"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="11"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-95.4deg); - -ms-transform: rotate(-95.4deg); - transform: rotate(-95.4deg); } - md-progress-circular[value="11"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="12"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="12"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-91.8deg); - -ms-transform: rotate(-91.8deg); - transform: rotate(-91.8deg); } - md-progress-circular[value="12"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="13"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="13"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-88.2deg); - -ms-transform: rotate(-88.2deg); - transform: rotate(-88.2deg); } - md-progress-circular[value="13"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="14"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="14"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-84.6deg); - -ms-transform: rotate(-84.6deg); - transform: rotate(-84.6deg); } - md-progress-circular[value="14"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="15"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="15"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-81deg); - -ms-transform: rotate(-81deg); - transform: rotate(-81deg); } - md-progress-circular[value="15"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="16"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="16"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-77.4deg); - -ms-transform: rotate(-77.4deg); - transform: rotate(-77.4deg); } - md-progress-circular[value="16"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="17"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="17"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-73.8deg); - -ms-transform: rotate(-73.8deg); - transform: rotate(-73.8deg); } - md-progress-circular[value="17"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="18"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="18"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-70.2deg); - -ms-transform: rotate(-70.2deg); - transform: rotate(-70.2deg); } - md-progress-circular[value="18"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="19"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="19"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-66.6deg); - -ms-transform: rotate(-66.6deg); - transform: rotate(-66.6deg); } - md-progress-circular[value="19"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="20"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="20"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-63deg); - -ms-transform: rotate(-63deg); - transform: rotate(-63deg); } - md-progress-circular[value="20"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="21"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="21"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-59.4deg); - -ms-transform: rotate(-59.4deg); - transform: rotate(-59.4deg); } - md-progress-circular[value="21"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="22"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="22"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-55.8deg); - -ms-transform: rotate(-55.8deg); - transform: rotate(-55.8deg); } - md-progress-circular[value="22"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="23"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="23"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-52.2deg); - -ms-transform: rotate(-52.2deg); - transform: rotate(-52.2deg); } - md-progress-circular[value="23"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="24"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="24"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-48.6deg); - -ms-transform: rotate(-48.6deg); - transform: rotate(-48.6deg); } - md-progress-circular[value="24"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="25"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="25"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - transform: rotate(-45deg); } - md-progress-circular[value="25"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="26"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="26"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-41.4deg); - -ms-transform: rotate(-41.4deg); - transform: rotate(-41.4deg); } - md-progress-circular[value="26"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="27"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="27"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-37.8deg); - -ms-transform: rotate(-37.8deg); - transform: rotate(-37.8deg); } - md-progress-circular[value="27"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="28"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="28"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-34.2deg); - -ms-transform: rotate(-34.2deg); - transform: rotate(-34.2deg); } - md-progress-circular[value="28"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="29"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="29"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-30.6deg); - -ms-transform: rotate(-30.6deg); - transform: rotate(-30.6deg); } - md-progress-circular[value="29"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="30"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="30"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-27deg); - -ms-transform: rotate(-27deg); - transform: rotate(-27deg); } - md-progress-circular[value="30"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="31"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="31"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-23.4deg); - -ms-transform: rotate(-23.4deg); - transform: rotate(-23.4deg); } - md-progress-circular[value="31"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="32"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="32"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-19.8deg); - -ms-transform: rotate(-19.8deg); - transform: rotate(-19.8deg); } - md-progress-circular[value="32"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="33"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="33"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-16.2deg); - -ms-transform: rotate(-16.2deg); - transform: rotate(-16.2deg); } - md-progress-circular[value="33"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="34"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="34"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-12.6deg); - -ms-transform: rotate(-12.6deg); - transform: rotate(-12.6deg); } - md-progress-circular[value="34"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="35"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="35"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-9deg); - -ms-transform: rotate(-9deg); - transform: rotate(-9deg); } - md-progress-circular[value="35"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="36"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="36"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-5.4deg); - -ms-transform: rotate(-5.4deg); - transform: rotate(-5.4deg); } - md-progress-circular[value="36"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="37"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="37"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(-1.8deg); - -ms-transform: rotate(-1.8deg); - transform: rotate(-1.8deg); } - md-progress-circular[value="37"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="38"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="38"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(1.8deg); - -ms-transform: rotate(1.8deg); - transform: rotate(1.8deg); } - md-progress-circular[value="38"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="39"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="39"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(5.4deg); - -ms-transform: rotate(5.4deg); - transform: rotate(5.4deg); } - md-progress-circular[value="39"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="40"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="40"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(9deg); - -ms-transform: rotate(9deg); - transform: rotate(9deg); } - md-progress-circular[value="40"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="41"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="41"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(12.6deg); - -ms-transform: rotate(12.6deg); - transform: rotate(12.6deg); } - md-progress-circular[value="41"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="42"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="42"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(16.2deg); - -ms-transform: rotate(16.2deg); - transform: rotate(16.2deg); } - md-progress-circular[value="42"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="43"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="43"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(19.8deg); - -ms-transform: rotate(19.8deg); - transform: rotate(19.8deg); } - md-progress-circular[value="43"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="44"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="44"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(23.4deg); - -ms-transform: rotate(23.4deg); - transform: rotate(23.4deg); } - md-progress-circular[value="44"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="45"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="45"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(27deg); - -ms-transform: rotate(27deg); - transform: rotate(27deg); } - md-progress-circular[value="45"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="46"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="46"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(30.6deg); - -ms-transform: rotate(30.6deg); - transform: rotate(30.6deg); } - md-progress-circular[value="46"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="47"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="47"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(34.2deg); - -ms-transform: rotate(34.2deg); - transform: rotate(34.2deg); } - md-progress-circular[value="47"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="48"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="48"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(37.8deg); - -ms-transform: rotate(37.8deg); - transform: rotate(37.8deg); } - md-progress-circular[value="48"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="49"] .md-inner .md-left .md-half-circle { - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="49"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(41.4deg); - -ms-transform: rotate(41.4deg); - transform: rotate(41.4deg); } - md-progress-circular[value="49"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="50"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(135deg); - -ms-transform: rotate(135deg); - transform: rotate(135deg); } - md-progress-circular[value="50"] .md-inner .md-right .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="50"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - border-bottom-color: transparent !important; } - md-progress-circular[value="51"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(138.6deg); - -ms-transform: rotate(138.6deg); - transform: rotate(138.6deg); } - md-progress-circular[value="51"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="51"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="52"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(142.2deg); - -ms-transform: rotate(142.2deg); - transform: rotate(142.2deg); } - md-progress-circular[value="52"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="52"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="53"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(145.8deg); - -ms-transform: rotate(145.8deg); - transform: rotate(145.8deg); } - md-progress-circular[value="53"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="53"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="54"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(149.4deg); - -ms-transform: rotate(149.4deg); - transform: rotate(149.4deg); } - md-progress-circular[value="54"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="54"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="55"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(153deg); - -ms-transform: rotate(153deg); - transform: rotate(153deg); } - md-progress-circular[value="55"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="55"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="56"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(156.6deg); - -ms-transform: rotate(156.6deg); - transform: rotate(156.6deg); } - md-progress-circular[value="56"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="56"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="57"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(160.2deg); - -ms-transform: rotate(160.2deg); - transform: rotate(160.2deg); } - md-progress-circular[value="57"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="57"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="58"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(163.8deg); - -ms-transform: rotate(163.8deg); - transform: rotate(163.8deg); } - md-progress-circular[value="58"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="58"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="59"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(167.4deg); - -ms-transform: rotate(167.4deg); - transform: rotate(167.4deg); } - md-progress-circular[value="59"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="59"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="60"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(171deg); - -ms-transform: rotate(171deg); - transform: rotate(171deg); } - md-progress-circular[value="60"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="60"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="61"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(174.6deg); - -ms-transform: rotate(174.6deg); - transform: rotate(174.6deg); } - md-progress-circular[value="61"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="61"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="62"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(178.2deg); - -ms-transform: rotate(178.2deg); - transform: rotate(178.2deg); } - md-progress-circular[value="62"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="62"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="63"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(181.8deg); - -ms-transform: rotate(181.8deg); - transform: rotate(181.8deg); } - md-progress-circular[value="63"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="63"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="64"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(185.4deg); - -ms-transform: rotate(185.4deg); - transform: rotate(185.4deg); } - md-progress-circular[value="64"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="64"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="65"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(189deg); - -ms-transform: rotate(189deg); - transform: rotate(189deg); } - md-progress-circular[value="65"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="65"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="66"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(192.6deg); - -ms-transform: rotate(192.6deg); - transform: rotate(192.6deg); } - md-progress-circular[value="66"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="66"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="67"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(196.2deg); - -ms-transform: rotate(196.2deg); - transform: rotate(196.2deg); } - md-progress-circular[value="67"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="67"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="68"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(199.8deg); - -ms-transform: rotate(199.8deg); - transform: rotate(199.8deg); } - md-progress-circular[value="68"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="68"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="69"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(203.4deg); - -ms-transform: rotate(203.4deg); - transform: rotate(203.4deg); } - md-progress-circular[value="69"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="69"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="70"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(207deg); - -ms-transform: rotate(207deg); - transform: rotate(207deg); } - md-progress-circular[value="70"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="70"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="71"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(210.6deg); - -ms-transform: rotate(210.6deg); - transform: rotate(210.6deg); } - md-progress-circular[value="71"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="71"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="72"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(214.2deg); - -ms-transform: rotate(214.2deg); - transform: rotate(214.2deg); } - md-progress-circular[value="72"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="72"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="73"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(217.8deg); - -ms-transform: rotate(217.8deg); - transform: rotate(217.8deg); } - md-progress-circular[value="73"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="73"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="74"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(221.4deg); - -ms-transform: rotate(221.4deg); - transform: rotate(221.4deg); } - md-progress-circular[value="74"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="74"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="75"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(225deg); - -ms-transform: rotate(225deg); - transform: rotate(225deg); } - md-progress-circular[value="75"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="75"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="76"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(228.6deg); - -ms-transform: rotate(228.6deg); - transform: rotate(228.6deg); } - md-progress-circular[value="76"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="76"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="77"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(232.2deg); - -ms-transform: rotate(232.2deg); - transform: rotate(232.2deg); } - md-progress-circular[value="77"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="77"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="78"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(235.8deg); - -ms-transform: rotate(235.8deg); - transform: rotate(235.8deg); } - md-progress-circular[value="78"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="78"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="79"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(239.4deg); - -ms-transform: rotate(239.4deg); - transform: rotate(239.4deg); } - md-progress-circular[value="79"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="79"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="80"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(243deg); - -ms-transform: rotate(243deg); - transform: rotate(243deg); } - md-progress-circular[value="80"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="80"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="81"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(246.6deg); - -ms-transform: rotate(246.6deg); - transform: rotate(246.6deg); } - md-progress-circular[value="81"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="81"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="82"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(250.2deg); - -ms-transform: rotate(250.2deg); - transform: rotate(250.2deg); } - md-progress-circular[value="82"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="82"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="83"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(253.8deg); - -ms-transform: rotate(253.8deg); - transform: rotate(253.8deg); } - md-progress-circular[value="83"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="83"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="84"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(257.4deg); - -ms-transform: rotate(257.4deg); - transform: rotate(257.4deg); } - md-progress-circular[value="84"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="84"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="85"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(261deg); - -ms-transform: rotate(261deg); - transform: rotate(261deg); } - md-progress-circular[value="85"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="85"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="86"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(264.6deg); - -ms-transform: rotate(264.6deg); - transform: rotate(264.6deg); } - md-progress-circular[value="86"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="86"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="87"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(268.2deg); - -ms-transform: rotate(268.2deg); - transform: rotate(268.2deg); } - md-progress-circular[value="87"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="87"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="88"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(271.8deg); - -ms-transform: rotate(271.8deg); - transform: rotate(271.8deg); } - md-progress-circular[value="88"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="88"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="89"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(275.4deg); - -ms-transform: rotate(275.4deg); - transform: rotate(275.4deg); } - md-progress-circular[value="89"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="89"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="90"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(279deg); - -ms-transform: rotate(279deg); - transform: rotate(279deg); } - md-progress-circular[value="90"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="90"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="91"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(282.6deg); - -ms-transform: rotate(282.6deg); - transform: rotate(282.6deg); } - md-progress-circular[value="91"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="91"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="92"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(286.2deg); - -ms-transform: rotate(286.2deg); - transform: rotate(286.2deg); } - md-progress-circular[value="92"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="92"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="93"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(289.8deg); - -ms-transform: rotate(289.8deg); - transform: rotate(289.8deg); } - md-progress-circular[value="93"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="93"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="94"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(293.4deg); - -ms-transform: rotate(293.4deg); - transform: rotate(293.4deg); } - md-progress-circular[value="94"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="94"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="95"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(297deg); - -ms-transform: rotate(297deg); - transform: rotate(297deg); } - md-progress-circular[value="95"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="95"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="96"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(300.6deg); - -ms-transform: rotate(300.6deg); - transform: rotate(300.6deg); } - md-progress-circular[value="96"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="96"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="97"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(304.2deg); - -ms-transform: rotate(304.2deg); - transform: rotate(304.2deg); } - md-progress-circular[value="97"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="97"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="98"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(307.8deg); - -ms-transform: rotate(307.8deg); - transform: rotate(307.8deg); } - md-progress-circular[value="98"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="98"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="99"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(311.4deg); - -ms-transform: rotate(311.4deg); - transform: rotate(311.4deg); } - md-progress-circular[value="99"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="99"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[value="100"] .md-inner .md-left .md-half-circle { - -webkit-transition: -webkit-transform 0.1s linear; - transition: transform 0.1s linear; - -webkit-transform: rotate(315deg); - -ms-transform: rotate(315deg); - transform: rotate(315deg); } - md-progress-circular[value="100"] .md-inner .md-right .md-half-circle { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); } - md-progress-circular[value="100"] .md-inner .md-gap { - border-bottom-width: 10px; - border-bottom-style: solid; - -webkit-transition: border-bottom-color 0.1s linear; - transition: border-bottom-color 0.1s linear; } - md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper { - -webkit-animation: outer-rotate 2.9166666667s linear infinite; - animation: outer-rotate 2.9166666667s linear infinite; } - md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner { - -webkit-animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; - animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; } - md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-right .md-half-circle { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-duration: 1.3125s; - animation-duration: 1.3125s; - -webkit-animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); - animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); } - md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-left .md-half-circle { - -webkit-animation-name: left-wobble; - animation-name: left-wobble; } - md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-right .md-half-circle { - -webkit-animation-name: right-wobble; - animation-name: right-wobble; } - -.ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper, -.ng-hide md-progress-circular .md-mode-indeterminate .md-spinner-wrapper, -md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper, md-progress-circular.ng-hide .md-mode-indeterminate .md-spinner-wrapper { - -webkit-animation: none; - animation: none; } - .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner, - .ng-hide md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner, - md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner, md-progress-circular.ng-hide .md-mode-indeterminate .md-spinner-wrapper .md-inner { - -webkit-animation: none; - animation: none; } - .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, - .ng-hide md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-left .md-half-circle, - md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular.ng-hide .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-left .md-half-circle { - -webkit-animation-name: none; - animation-name: none; } - .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, - .ng-hide md-progress-circular .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-right .md-half-circle, - md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, md-progress-circular.ng-hide .md-mode-indeterminate .md-spinner-wrapper .md-inner .md-right .md-half-circle { - -webkit-animation-name: none; - animation-name: none; } - -.md-spinner-wrapper.ng-hide { - -webkit-animation: none; - animation: none; } - .md-spinner-wrapper.ng-hide .md-inner { - -webkit-animation: none; - animation: none; } - .md-spinner-wrapper.ng-hide .md-inner .md-left .md-half-circle { - -webkit-animation-name: none; - animation-name: none; } - .md-spinner-wrapper.ng-hide .md-inner .md-right .md-half-circle { - -webkit-animation-name: none; - animation-name: none; } - .sg-progress-circular-floating { -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28); transition: transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28); @@ -10180,7 +5492,6 @@ md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper, md-prog bottom: auto; background-color: white; border-radius: 50%; - padding: 4px; box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.14), 0px 6px 10px 0px rgba(0, 0, 0, 0.098), 0px 1px 18px 0px rgba(0, 0, 0, 0.084); } .sg-progress-circular-floating.ng-hide { -webkit-transform: translate(-50%, 0) scale(0); @@ -10676,36 +5987,13 @@ md-sidenav { .md-sidenav-right { border-left: 1px solid #fff; } } -md-sidenav { - background-color: #e2d2a3; } - @media (min-width: 1025px) { - md-sidenav.md-locked-open { - max-width: 20vw; - -webkit-box-flex: 1; - -webkit-flex: 1 1 20vw; - -ms-flex: 1 1 20vw; - flex: 1 1 20vw; } } - -.md-sidenav-left.md-whiteframe-z2, md-card.md-sidenav-left.sg-expanded, md-sidenav.md-whiteframe-z2 { - box-shadow: 8px 0px 17px 0 rgba(0, 0, 0, 0.2); } - -.md-sidenav-left md-content, -md-sidenav md-content, -.md-sidenav-left md-toolbar, md-sidenav md-toolbar { - background-color: inherit; - background-image: url("../img/cardboard-transp.png"); - background-blend-mode: multiply; } - -.md-sidenav-left md-toolbar, md-sidenav md-toolbar { - box-shadow: none; } - -.md-sidenav-right { - width: 512px; - max-width: 512px; } - .md-sidenav-right md-content, - .md-sidenav-right md-toolbar { - background-color: inherit; - background-image: none; } +@media (min-width: 1025px) { + md-sidenav.md-locked-open { + max-width: 20vw; + -webkit-box-flex: 1; + -webkit-flex: 1 0 20vw; + -ms-flex: 1 0 20vw; + flex: 1 0 20vw; } } .sg-child-level-1 { padding-left: 16px; } @@ -10740,21 +6028,9 @@ md-sidenav md-content, .sg-child-level-11 { padding-left: 176px; } -.md-sidenav-left.md-whiteframe-z1, md-sidenav.md-whiteframe-z1 { - box-shadow: 2px 0px 5px 0 rgba(0, 0, 0, 0.26); } - -.md-sidenav-left md-list-item, md-sidenav md-list-item { - -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; - transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), color 0.12s linear; } - .md-sidenav-left md-list-item:hover, md-sidenav md-list-item:hover { - background-color: #a1ccc8; } - .md-sidenav-left md-list-item.sg-active, md-sidenav md-list-item.sg-active { - background-color: #b2d6d3; } - .md-sidenav-left md-list-item.sg-loading, md-sidenav md-list-item.sg-loading { - color: #ceebe8; } - -.md-sidenav-left md-bottom-sheet md-list-item:hover, md-sidenav md-bottom-sheet md-list-item:hover { - background-color: transparent; } +.md-sidenav-left md-list-item .md-button, md-sidenav md-list-item .md-button { + -webkit-transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); } /*! slider/_extends.scss - */ @-webkit-keyframes sliderFocusThumb { @@ -11064,7 +6340,8 @@ md-slider { position: relative; } .md-subheader { - margin-right: 0; } + margin-right: 0; + line-height: 36px; } .md-subheader .md-subheader-inner { padding: 0 0 0 16px; } @@ -11083,14 +6360,6 @@ md-slider { font-size: 14px; font-weight: 600; } -md-list .md-subheader.sg-md-subheader { - font-weight: 600; - font-size: 14px; } - -.sg-md-subheader > * { - font-weight: inherit; - font-size: inherit; } - /*! switch/_extends.scss - */ md-switch { display: -webkit-box; @@ -11680,8 +6949,8 @@ md-toolbar { -ms-flex-direction: row; flex-direction: row; width: 100%; - height: 100%; - max-height: 100%; + height: 64px; + max-height: 64px; padding: 0 16px; margin: 0; } .md-toolbar-tools h1, .md-toolbar-tools h2, .md-toolbar-tools h3 { @@ -11731,20 +7000,28 @@ 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); } - -.md-toolbar-tools { - padding: 0; font-size: 1em !important; } -.md-toolbar-tools[layout-align="start start"] { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; } +.md-toolbar-tools { + font-size: 1em !important; } + +md-toolbar.sg-toolbar-secondary > .md-toolbar-tools > .sg-icon-button:first-child, +md-toolbar.sg-toolbar-secondary > .sg-icon-button:first-child, +.md-toolbar-tools.sg-toolbar-secondary > .md-toolbar-tools > .sg-icon-button:first-child, +.md-toolbar-tools.sg-toolbar-secondary > .sg-icon-button:first-child { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + -webkit-transform: translateX(0px); + -ms-transform: translateX(0px); + transform: translateX(0px); } + +md-toolbar.sg-toolbar-secondary.ng-hide > .md-toolbar-tools > .sg-icon-button:first-child, +md-toolbar.sg-toolbar-secondary.ng-hide > .sg-icon-button:first-child, +.md-toolbar-tools.sg-toolbar-secondary.ng-hide > .md-toolbar-tools > .sg-icon-button:first-child, +.md-toolbar-tools.sg-toolbar-secondary.ng-hide > .sg-icon-button:first-child { + -webkit-transform: translateX(-36px); + -ms-transform: translateX(-36px); + transform: translateX(-36px); } .md-toolbar-tools.md-toolbar-tools-top { -webkit-box-align: start; @@ -11782,18 +7059,10 @@ hgroup { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; } + align-items: center; } hgrouph3 { margin-bottom: 0; } -.toolbar-main .md-button { - color: inherit; - font-size: 24px; } - .sg-toolbar-group { display: -webkit-box; display: -webkit-flex; @@ -11830,12 +7099,17 @@ hgroup { -ms-flex-order: 3; order: 3; } +.sg-folder-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .sg-toolbar-search { - background-color: #f7f1dc; - color: rgba(0, 0, 0, 0.54); padding: 16px 0; } - .sg-toolbar-search md-icon { - color: rgba(0, 0, 0, 0.54); } /*! tooltip/_extends.scss - */ md-tooltip { @@ -11994,6 +7268,11 @@ sg-time-pane { .toggle-pane { border-top: solid 1px #e0e0e0; } +.hours-pane, +.min1, +.min5 { + padding: 0 16px; } + .md-button.md-fab.hourBtn, .md-button.md-fab.minuteBtn, .md-button.md-fab.toggleBtn, @@ -12005,35 +7284,40 @@ sg-time-pane { .md-button.md-fab.toggleBtn.md-focus { min-width: 10px; min-height: 10px; - background-color: transparent; border-color: transparent; - font-family: Roboto, 'Helvetica Neue', sans-serif; - font-size: 16px; font-weight: normal; color: rgba(0, 0, 0, 0.5); height: 40px; width: 40px; line-height: 40px; box-shadow: none; - margin: 2px; } + margin: 0; } + .md-button.md-fab.hourBtn:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.minuteBtn:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.toggleBtn:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.hourBtn.md-focused:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.minuteBtn.md-focused:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.toggleBtn.md-focused:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.hourBtn.md-focus:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.minuteBtn.md-focus:not(.md-bg):not(.toggleBtn), + .md-button.md-fab.toggleBtn.md-focus:not(.md-bg):not(.toggleBtn) { + background-color: transparent; } + .md-button.md-fab.hourBtn:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.minuteBtn:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.toggleBtn:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.hourBtn.md-focused:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.minuteBtn.md-focused:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.toggleBtn.md-focused:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.hourBtn.md-focus:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.minuteBtn.md-focus:not(.md-bg):not(.toggleBtn):hover, + .md-button.md-fab.toggleBtn.md-focus:not(.md-bg):not(.toggleBtn):hover { + background-color: lightgrey; + color: #666666; } .md-button.md-fab.toggleBtn { - background-color: #3f51b5; color: white; margin: 5px; } -.md-button.md-fab.hourBtn:hover, .md-button.md-fab.minuteBtn:hover { - background-color: lightgrey; - color: #666666; } - -.md-button.md-fab.hourBtn.md-primary, .md-button.md-fab.minuteBtn.md-primary, -.md-button.md-fab.hourBtn.md-primary:hover, .md-button.md-fab.minuteBtn.md-primary:hover, -.md-button.md-fab.hourBtn.md-primary.md-focus, .md-button.md-fab.minuteBtn.md-primary.md-focus, -.md-button.md-fab.hourBtn.md-primary.md-focused, .md-button.md-fab.minuteBtn.md-primary.md-focused { - background-color: lightgrey; - color: #3f51b5; } - -/** Styles for sgTimepicker. */ sg-timepicker { white-space: nowrap; } @@ -12042,60 +7326,22 @@ sg-timepicker { box-sizing: border-box; background: none; } -.sg-timepicker-input { - min-width: 120px; - max-width: 328px; - background: inherit; - border: none; } - .sg-timepicker-input-container { - position: relative; - padding-bottom: 5px; - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: #e0e0e0; - display: inline-block; - width: auto; - margin-left: 12px; } + border-bottom-color: #e0e0e0; } .sg-timepicker-input-container.sg-timepicker-focused { border-bottom-width: 2px; } .sg-timepicker-time-pane { - position: absolute; - top: 0; - left: 0; - z-index: 99; - border-width: 1px; - border-style: solid; - background: inherit; - border-color: #e0e0e0; - box-shadow: rgba(0, 0, 0, 0.137255) 0 3px 1px -2px, rgba(0, 0, 0, 0.0980392) 0 2px 2px 0, rgba(0, 0, 0, 0.0823529) 0 1px 5px 0; - -webkit-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; } - .sg-timepicker-time-pane.md-pane-open { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } + max-width: 512px; + border-color: #e0e0e0; } .sg-timepicker-input-mask { height: 40px; - width: 340px; position: relative; background: transparent; pointer-events: none; cursor: text; } -.sg-timepicker-input-mask-opaque { - position: absolute; - right: 0; - left: 120px; - background: white; - height: 100%; } - .sg-timepicker-time { opacity: 0; -webkit-transition: opacity 0.2s cubic-bezier(0.5, 0, 0.25, 1); @@ -12105,31 +7351,8 @@ sg-timepicker { .sg-timepicker-time sg-time:focus { outline: none; } -.sg-timepicker-expand-triangle { - position: absolute; - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid rgba(0, 0, 0, 0.2); } - -.sg-timepicker-triangle-button { - position: absolute; - right: 0; - top: 0; - -webkit-transform: translateY(-25%) translateX(45%); - -ms-transform: translateY(-25%) translateX(45%); - transform: translateY(-25%) translateX(45%); } - -.sg-timepicker-triangle-button.md-button.md-icon-button { - height: 100%; - width: 36px; - position: absolute; } +.sg-timepicker-triangle-button:hover .sg-timepicker-expand-triangle { + border-top-color: rgba(0, 0, 0, 0.54); } sg-timepicker[disabled] .sg-timepicker-input-container { border-bottom-color: transparent; } @@ -12174,12 +7397,6 @@ sg-timepicker[disabled] .sg-timepicker-triangle-button { .button-label { margin-top: 0; } -.md-input-focused label.pseudo-input-label, -.md-input-has-value label.pseudo-input-label { - -webkit-transform: translate3d(0, 4px, 0) scale(1); - transform: translate3d(0, 4px, 0) scale(1); - margin-top: 16px; } - .pseudo-input-field, .pseudo-input-field--underline { display: block; } @@ -12325,31 +7542,41 @@ md-input-container .bgroup { .PseudoField input:focus { outline: none; } -[ui-view="login"] > md-content { +@media (max-width: 600px) { + [ui-view="login"] md-content [id=logo] { + text-align: center; } + [ui-view="login"] md-content [id=logo] img { + max-width: 75%; } } + +@media (min-width: 601px) { + [ui-view="login"] md-content.ng-hide [id=logo] { + opacity: 0; + -webkit-transform: translateX(50%); + -ms-transform: translateX(50%); + transform: translateX(50%); } + [ui-view="login"] md-content.ng-hide .sg-login { + opacity: 0; + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } + [ui-view="login"] md-content [id=logo], [ui-view="login"] md-content .sg-login { + opacity: 1; + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%); } + [ui-view="login"] md-content [id=logo] { + -webkit-transition: -webkit-transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 600ms, opacity 400ms linear; + transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 600ms, opacity 400ms linear; } + [ui-view="login"] md-content .sg-login { + -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 600ms; + transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 600ms; } } + +[ui-view="login"] > md-content > div { width: 320px; } [id=logo] img { max-width: 100%; } -.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%); -ms-transform: translateY(-100%); @@ -12393,8 +7620,8 @@ md-input-container .bgroup { padding-top: 16px; } .msg-date { - text-align: right; - margin-bottom: 10px; } + font-size: 14px; + text-align: right; } @media (min-width: 600px) { .msg-attachment-image { @@ -13049,6 +8276,16 @@ textarea.plain-text { .view.layout-row { max-height: 100%; } +body.popup .viewer { + width: 100%; } + +body.popup .view-detail { + max-width: 100%; } + +@media (min-width: 601px) { + body.popup [class|="view"] { + position: static; } } + [class|="view"] { position: relative; } @@ -13057,11 +8294,11 @@ textarea.plain-text { min-width: 256px; } @media (min-width: 601px) and (max-width: 1024px) { .view-list { - max-width: 43.75vw; + max-width: 37.5vw; -webkit-box-flex: 1; - -webkit-flex: 1 1 43.75vw; - -ms-flex: 1 1 43.75vw; - flex: 1 1 43.75vw; + -webkit-flex: 1 1 37.5vw; + -ms-flex: 1 1 37.5vw; + flex: 1 1 37.5vw; min-width: 192px; } } @media (min-width: 1025px) { .view-list { @@ -13077,14 +8314,14 @@ textarea.plain-text { .view-detail { z-index: 9; - overflow-x: hidden; } + overflow: hidden; } @media (min-width: 601px) and (max-width: 1024px) { .view-detail { - max-width: 56.25vw; + max-width: 62.5vw; -webkit-box-flex: 1; - -webkit-flex: 1 1 56.25vw; - -ms-flex: 1 1 56.25vw; - flex: 1 1 56.25vw; + -webkit-flex: 1 1 62.5vw; + -ms-flex: 1 1 62.5vw; + flex: 1 1 62.5vw; margin: 0; } } @media (min-width: 1025px) { .view-detail { @@ -13095,21 +8332,26 @@ textarea.plain-text { flex: 2 1 50vw; margin: 0; } } @media (min-width: 601px) { + .view-detail .md-static { + position: static; } .view-detail .viewer { position: absolute; - top: 0; + top: 64px; left: 0; right: 0; - max-width: 100%; } } + bottom: 0; + max-width: 100%; + overflow-y: auto; } } @media (max-width: 600px) { .view-detail { display: block; background-color: transparent !important; position: absolute; - top: 128px; + top: 0; bottom: 0; left: 0; right: 0; + z-index: 11; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); @@ -13136,10 +8378,8 @@ textarea.plain-text { top: 0; bottom: 0; left: 0; - right: 0; } } - -main { - background-color: #ede5ca; } + right: 0; + overflow-x: hidden; } } .sg-padded { padding-left: 16px; diff --git a/UI/WebServerResources/css/styles.css.map b/UI/WebServerResources/css/styles.css.map index 1c3b02352..6fcf5517b 100644 --- a/UI/WebServerResources/css/styles.css.map +++ b/UI/WebServerResources/css/styles.css.map @@ -1 +1 @@ -{"version":3,"sources":["../scss/components/_palette.scss","../scss/core/reset.scss","styles.css","../scss/core/angular.scss","../scss/styles.scss","../angular-material/src/core/style/structure.scss","../angular-material/src/core/style/mixins.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/services/layout/layout.scss","../scss/core/layout.scss","../bower_components/breakpoint-sass/stylesheets/_breakpoint.scss","../angular-material/src/core/style/typography.scss","../scss/core/typography.scss","../scss/core/_functions.scss","../angular-material/src/components/autocomplete/autocomplete.scss","../scss/components/autocomplete/autocomplete.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.scss","../scss/components/button/_extends.scss","../angular-material/src/components/button/button.scss","../scss/components/button/button.scss","../scss/components/card/_extends.scss","../angular-material/src/components/card/card.scss","../scss/components/card/card.scss","../scss/components/checkbox/_extends.scss","../angular-material/src/components/checkbox/checkbox.scss","../scss/components/checkbox/checkbox.scss","../scss/components/chips/_extends.scss","../angular-material/src/components/chips/chips.scss","../scss/components/chips/chips.scss","../scss/components/content/_extends.scss","../angular-material/src/components/content/content.scss","../scss/components/content/content.scss","../scss/components/datepicker/_extends-calendar.scss","../angular-material/src/components/datepicker/calendar.scss","../scss/components/datepicker/_extends-datePicker.scss","../angular-material/src/components/datepicker/datePicker.scss","../scss/components/datepicker/datePicker.scss","../scss/components/dialog/_extends.scss","../angular-material/src/components/dialog/dialog.scss","../scss/components/dialog/dialog.scss","../scss/components/divider/_extends.scss","../angular-material/src/components/divider/divider.scss","../scss/components/fabSpeedDial/_extends.scss","../angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","../angular-material/src/components/gridList/grid-list.scss","../scss/components/gridList/grid-list.scss","../scss/components/icon/_extends.scss","../angular-material/src/components/icon/icon.scss","../scss/components/icon/icon.scss","../scss/components/input/_extends.scss","../angular-material/src/components/input/input.scss","../scss/components/input/input.scss","../scss/components/list/_extends.scss","../angular-material/src/components/list/list.scss","../scss/components/list/list.scss","../scss/components/menu/_extends.scss","../angular-material/src/components/menu/menu.scss","../scss/components/progressCircular/_extends.scss","../angular-material/src/components/progressCircular/progress-circular.scss","../scss/components/progressCircular/progress-circular.scss","../scss/components/radioButton/_extends.scss","../angular-material/src/components/radioButton/radio-button.scss","../scss/components/select/_extends.scss","../angular-material/src/components/select/select.scss","../scss/components/select/select.scss","../scss/components/sidenav/_extends.scss","../angular-material/src/components/sidenav/sidenav.scss","../scss/components/sidenav/sidenav.scss","../scss/components/slider/_extends.scss","../angular-material/src/components/slider/slider.scss","../scss/components/sticky/_extends.scss","../angular-material/src/components/sticky/sticky.scss","../scss/components/subheader/_extends.scss","../angular-material/src/components/subheader/subheader.scss","../scss/components/subheader/subheader.scss","../scss/components/switch/_extends.scss","../angular-material/src/components/switch/switch.scss","../scss/components/tabs/_extends.scss","../angular-material/src/components/tabs/tabs.scss","../scss/components/toast/_extends.scss","../angular-material/src/components/toast/toast.scss","../scss/components/toolbar/_extends.scss","../angular-material/src/components/toolbar/toolbar.scss","../scss/components/toolbar/toolbar.scss","../scss/components/tooltip/_extends.scss","../angular-material/src/components/tooltip/tooltip.scss","../scss/components/virtualRepeat/_extends.scss","../angular-material/src/components/virtualRepeat/virtual-repeater.scss","../scss/components/virtualRepeat/virtual-repeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/timepicker/timepicker.scss","../scss/components/pseudo-input/pseudo-input.scss","../scss/views/LoginUI.scss","../scss/views/MailerUI.scss","../scss/views/ContactsUI.scss","../scss/views/MessageEditorUI.scss","../scss/views/SchedulerUI.scss","../scss/views/_view.scss","../scss/core/base_styles/_base_style.scss"],"names":[],"mappings":"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AkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MA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","file":"styles.css"} \ No newline at end of file +{"version":3,"sources":["../scss/components/_palette.scss","../scss/core/reset.scss","styles.css","../scss/core/angular.scss","../scss/styles.scss","../angular-material/src/core/style/structure.scss","../angular-material/src/core/style/mixins.scss","../scss/core/variables.scss","../scss/core/structure.scss","../angular-material/src/core/services/layout/layout.scss","../scss/core/layout.scss","../bower_components/breakpoint-sass/stylesheets/_breakpoint.scss","../angular-material/src/core/style/typography.scss","../scss/core/typography.scss","../scss/core/_functions.scss","../angular-material/src/components/autocomplete/autocomplete.scss","../scss/components/autocomplete/autocomplete.scss","../scss/components/backdrop/_extends.scss","../angular-material/src/components/backdrop/backdrop.scss","../scss/components/backdrop/backdrop.scss","../scss/components/button/_extends.scss","../angular-material/src/components/button/button.scss","../scss/components/button/button.scss","../scss/components/card/_extends.scss","../angular-material/src/components/card/card.scss","../scss/components/card/card.scss","../scss/components/checkbox/_extends.scss","../angular-material/src/components/checkbox/checkbox.scss","../scss/components/checkbox/checkbox.scss","../scss/components/chips/_extends.scss","../angular-material/src/components/chips/chips.scss","../scss/components/chips/chips.scss","../scss/components/content/_extends.scss","../angular-material/src/components/content/content.scss","../scss/components/content/content.scss","../scss/components/datepicker/_extends-calendar.scss","../angular-material/src/components/datepicker/calendar.scss","../scss/components/datepicker/_extends-datePicker.scss","../angular-material/src/components/datepicker/datePicker.scss","../scss/components/datepicker/datePicker.scss","../scss/components/dialog/_extends.scss","../angular-material/src/components/dialog/dialog.scss","../scss/components/dialog/dialog.scss","../scss/components/divider/_extends.scss","../angular-material/src/components/divider/divider.scss","../scss/components/fabSpeedDial/_extends.scss","../angular-material/src/components/fabSpeedDial/fabSpeedDial.scss","../angular-material/src/components/gridList/grid-list.scss","../scss/components/gridList/grid-list.scss","../scss/components/icon/_extends.scss","../angular-material/src/components/icon/icon.scss","../scss/components/icon/icon.scss","../scss/components/input/_extends.scss","../angular-material/src/components/input/input.scss","../scss/components/input/input.scss","../scss/components/list/_extends.scss","../angular-material/src/components/list/list.scss","../scss/components/list/list.scss","../scss/components/menu/_extends.scss","../angular-material/src/components/menu/menu.scss","../scss/components/progressCircular/_extends.scss","../angular-material/src/components/progressCircular/progress-circular.scss","../scss/components/progressCircular/progress-circular.scss","../scss/components/radioButton/_extends.scss","../angular-material/src/components/radioButton/radio-button.scss","../scss/components/select/_extends.scss","../angular-material/src/components/select/select.scss","../scss/components/select/select.scss","../scss/components/sidenav/_extends.scss","../angular-material/src/components/sidenav/sidenav.scss","../scss/components/sidenav/sidenav.scss","../scss/components/slider/_extends.scss","../angular-material/src/components/slider/slider.scss","../scss/components/sticky/_extends.scss","../angular-material/src/components/sticky/sticky.scss","../scss/components/subheader/_extends.scss","../angular-material/src/components/subheader/subheader.scss","../scss/components/subheader/subheader.scss","../scss/components/switch/_extends.scss","../angular-material/src/components/switch/switch.scss","../scss/components/tabs/_extends.scss","../angular-material/src/components/tabs/tabs.scss","../scss/components/toast/_extends.scss","../angular-material/src/components/toast/toast.scss","../scss/components/toolbar/_extends.scss","../angular-material/src/components/toolbar/toolbar.scss","../scss/components/toolbar/toolbar.scss","../scss/components/tooltip/_extends.scss","../angular-material/src/components/tooltip/tooltip.scss","../scss/components/virtualRepeat/_extends.scss","../angular-material/src/components/virtualRepeat/virtual-repeater.scss","../scss/components/virtualRepeat/virtual-repeat.scss","../scss/components/whiteframe/_extends.scss","../angular-material/src/components/whiteframe/whiteframe.scss","../scss/components/timepicker/timepicker.scss","../scss/components/pseudo-input/pseudo-input.scss","../scss/views/LoginUI.scss","../scss/views/MailerUI.scss","../scss/views/ContactsUI.scss","../scss/views/MessageEditorUI.scss","../scss/views/SchedulerUI.scss","../scss/views/_view.scss","../scss/core/base_styles/_base_style.scss"],"names":[],"mappings":"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EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;IADY;MAAI,WAAS,EAAV;IAAkB;MAChC,cAAY,EAAb;I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","file":"styles.css"} \ No newline at end of file diff --git a/UI/WebServerResources/js/Administration.js b/UI/WebServerResources/js/Administration.js new file mode 100644 index 000000000..9bc1ba079 --- /dev/null +++ b/UI/WebServerResources/js/Administration.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("administration",{"abstract":!0,views:{administration:{templateUrl:"administration.html",controller:"AdministrationController",controllerAs:"app"}},resolve:{stateAdministration:stateAdministration}}).state("administration.rights",{url:"/rights",views:{module:{templateUrl:"rights.html"}}}),$urlRouterProvider.otherwise("/rights")}function stateAdministration(Administration){return Administration}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.AdministrationUI",["ngSanitize","ui.router","SOGo.Common","SOGo.ContactsUI","SOGo.Authentication"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAdministration.$inject=["Administration"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AdministrationController($state,$mdDialog,$mdToast,Dialog,User,stateAdministration,Authentication){function go(module){$state.go("administration."+module)}var vm=this;vm.administration=stateAdministration,vm.go=go}AdministrationController.$inject=["$state","$mdDialog","$mdToast","Dialog","User","stateAdministration","Authentication"],angular.module("SOGo.AdministrationUI").controller("AdministrationController",AdministrationController)}(); +//# sourceMappingURL=Administration.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Administration.js.map b/UI/WebServerResources/js/Administration.js.map new file mode 100644 index 000000000..dc80b831c --- /dev/null +++ b/UI/WebServerResources/js/Administration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Administration.js","sources":["Administration/Administration.app.js","Administration/AdministrationController.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","abstract","views","administration","templateUrl","controller","controllerAs","resolve","stateAdministration","url","module","otherwise","Administration","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","angular","config","run","$inject","AdministrationController","$state","$mdDialog","$mdToast","Dialog","User","Authentication","go","vm","this"],"mappings":"CAGA,WACE,YAUA,SAASA,WAAUC,eAAgBC,oBACjCD,eACGE,MAAM,kBACLC,YAAU,EACVC,OACEC,gBACEC,YAAa,sBACbC,WAAY,2BACZC,aAAc,QAGlBC,SACEC,oBAAqBA,uBAGxBR,MAAM,yBACLS,IAAK,UACLP,OACEQ,QACEN,YAAa,kBAMrBL,mBAAmBY,UAAU,WAO/B,QAASH,qBAAoBI,gBAC3B,MAAOA,gBAOT,QAASC,UAASC,YAChBA,WAAWC,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,WACrEC,QAAQC,MAAML,MAAOC,QAASC,SAAUC,aAlD5CG,QAAQZ,OAAO,yBAA0B,aAAc,YAAa,cAAe,kBAAmB,wBACnGa,OAAO1B,WACP2B,IAAIX,UAKPhB,UAAU4B,SAAW,iBAAkB,sBAgCvCjB,oBAAoBiB,SAAW,kBAQ/BZ,SAASY,SAAW,iBClDtB,WACE,YAMA,SAASC,0BAAyBC,OAAQC,UAAWC,SAAUC,OAAQC,KAAMvB,oBAAqBwB,gBAOhG,QAASC,IAAGvB,QACViB,OAAOM,GAAG,kBAAoBvB,QAPhC,GAAIwB,IAAKC,IAETD,IAAG/B,eAAiBK,oBAEpB0B,GAAGD,GAAKA,GANVP,yBAAyBD,SAAW,SAAU,YAAa,WAAY,SAAU,OAAQ,sBAAuB,kBAchHH,QACGZ,OAAO,yBACPL,WAAW,2BAA4BqB","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.AdministrationUI', ['ngSanitize', 'ui.router', 'SOGo.Common', 'SOGo.ContactsUI', 'SOGo.Authentication'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('administration', {\n abstract: true,\n views: {\n administration: {\n templateUrl: 'administration.html',\n controller: 'AdministrationController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAdministration: stateAdministration\n }\n })\n .state('administration.rights', {\n url: '/rights',\n views: {\n module: {\n templateUrl: 'rights.html'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/rights');\n }\n\n /**\n * @ngInject\n */\n stateAdministration.$inject = ['Administration'];\n function stateAdministration(Administration) {\n return Administration;\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n AdministrationController.$inject = ['$state', '$mdDialog', '$mdToast', 'Dialog', 'User', 'stateAdministration', 'Authentication'];\n function AdministrationController($state, $mdDialog, $mdToast, Dialog, User, stateAdministration, Authentication) {\n var vm = this;\n\n vm.administration = stateAdministration;\n\n vm.go = go;\n \n function go(module) {\n $state.go('administration.' + module);\n }\n\n }\n\n angular\n .module('SOGo.AdministrationUI')\n .controller('AdministrationController', AdministrationController);\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Administration.services.js b/UI/WebServerResources/js/Administration.services.js new file mode 100644 index 000000000..b33cc4ec7 --- /dev/null +++ b/UI/WebServerResources/js/Administration.services.js @@ -0,0 +1,2 @@ +!function(){"use strict";function Administration(){}Administration.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function($q,$timeout,$log,Settings,Resource,User){return angular.extend(Administration,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),activeUser:Settings.activeUser(),$User:User}),new Administration}];try{angular.module("SOGo.AdministrationUI")}catch(e){angular.module("SOGo.AdministrationUI",["SOGo.Common"])}angular.module("SOGo.AdministrationUI").factory("Administration",Administration.$factory)}(); +//# sourceMappingURL=Administration.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Administration.services.js.map b/UI/WebServerResources/js/Administration.services.js.map new file mode 100644 index 000000000..a7276d414 --- /dev/null +++ b/UI/WebServerResources/js/Administration.services.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Administration.services.js","sources":["Administration/Administration.service.js"],"names":["Administration","$factory","$q","$timeout","$log","Settings","Resource","User","angular","extend","$$resource","activeUser","$User","module","e","factory"],"mappings":"CAEA,WACE,YAMA,SAASA,mBASTA,eAAeC,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,OAAQ,SAASC,GAAIC,SAAUC,KAAMC,SAAUC,SAAUC,MAUtI,MATAC,SAAQC,OAAOT,gBACbE,GAAIA,GACJC,SAAUA,SACVC,KAAMA,KACNM,WAAY,GAAIJ,UAASD,SAASM,WAAW,aAAcN,SAASM,cACpEA,WAAYN,SAASM,aACrBC,MAAOL,OAGF,GAAIP,iBAIb,KACEQ,QAAQK,OAAO,yBAEjB,MAAMC,GACJN,QAAQK,OAAO,yBAA0B,gBAI3CL,QAAQK,OAAO,yBACZE,QAAQ,iBAAkBf,eAAeC","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Administration\n * @constructor\n */\n function Administration() {\n\n }\n\n /**\n * @memberof Administration\n * @desc The factory we'll use to register with Angular\n * @returns the Administration constructor\n */\n Administration.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'User', function($q, $timeout, $log, Settings, Resource, User) {\n angular.extend(Administration, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n activeUser: Settings.activeUser(),\n $User: User\n });\n\n return new Administration(); // return unique instance\n }];\n\n /* Initialize module if necessary */\n try {\n angular.module('SOGo.AdministrationUI');\n }\n catch(e) {\n angular.module('SOGo.AdministrationUI', ['SOGo.Common']);\n }\n\n /* Factory registration in Angular module */\n angular.module('SOGo.AdministrationUI')\n .factory('Administration', Administration.$factory);\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Common.js b/UI/WebServerResources/js/Common.js index d1b78e5e1..05adb1033 100644 --- a/UI/WebServerResources/js/Common.js +++ b/UI/WebServerResources/js/Common.js @@ -1,3 +1,3 @@ -function l(){var key=arguments[0],value=key;labels[key]?value=labels[key]:clabels[key]&&(value=clabels[key]);for(var i=1,j=0;i-1?deferred.resolve():Acl.$$resource.fetch(this.folderId,"addUserInAcls",param).then(function(){user.wasSubscribed=!1,user.userClass=user.isGroup?"group-user":"normal-user",user.$rights=angular.bind(user,user.$acl,_this.folderId),_this.users.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);i>=0&&_this.users.splice(i,1)})},Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})},Acl.prototype.$saveUsersRights=function(){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];return angular.forEach(this.users,function(user){user.$rightsAreDirty()&&users.push(user.$omit())}),users.length?Acl.$$resource.save(this.folderId,users,param).then(function(){angular.forEach(_this.users,function(user){user.$rightsAreDirty()&&(user.$shadowRights=angular.copy(user.rights))}),deferredSave.resolve()},deferredSave.reject):deferredSave.resolve(),users=[],angular.forEach(this.users,function(user){!user.wasSubscribed&&user.isSubscribed&&users.push(user.uid)}),users.length?(param={uids:users.join(",")},Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed}),deferredSubscribe.resolve()},deferredSubscribe.reject)):deferredSubscribe.resolve(),Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}}(),function(){"use strict";function Alarm(){this.currentAlarm=null}function AlarmService($timeout,Settings,Resource,$mdToast){return angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast}),Alarm}Alarm.getAlarms=function(){var _this=this,now=new Date,browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function(a,b){var x=parseInt(a[2]),y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop(),now=new Date,utc=Math.floor(now.getTime()/1e3),url=next[0]+"/"+next[1],alarmTime=parseInt(next[2]),delay=alarmTime;alarmTime>0&&(delay-=utc);var f=(new Date(1e3*alarmTime),angular.bind(_this,Alarm.showAlarm,url));_this.currentAlarm&&_this.$timeout.cancel(_this.currentAlarm),_this.currentAlarm=_this.$timeout(f,1e3*delay)}})},Alarm.showAlarm=function(url){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){function AlarmController(scope,$mdToast,url){scope.reminder="10",scope.cancel=function(){$mdToast.hide()},scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder),$mdToast.hide()}}_this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ",""].join(""),locals:{url:url},controller:AlarmController}),AlarmController.$inject=["scope","$mdToast","url"]})},AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"],angular.module("SOGo.Common").factory("Alarm",AlarmService)}(),function(){"use strict";function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;for(foundCookie=null,prefix=name+"=",pairs=document.cookie.split(";"),i=0;!foundCookie&&i0&&(currentPair=currentPair.substr(start)),0===currentPair.indexOf(prefix)&&(foundCookie=currentPair.substr(prefix.length))}return foundCookie}function readLoginCookie(){var value,loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo");return cookie&&cookie.length>8&&(value=decodeURIComponent(cookie.substr(8)),loginValues=value.base64decode().split(":")),loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;return userName=username,domain&&(userName+="@"+domain.value),address=""+window.location.href,baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName),"/"==baseAddress[0]&&(parts=address.split("/"),hostpart=parts[2],protocol=parts[0],baseAddress=protocol+"//"+hostpart+baseAddress),parts=baseAddress.split("/"),parts.splice(0,3),altBaseAddress=parts.join("/"),newAddress=!address.startsWith(baseAddress)&&!address.startsWith(altBaseAddress)||address.endsWith("/logoff")?baseAddress:address}function getService($q,$http,passwordPolicyConfig){var service,_this=this;return service={login:function(data){var language,d=$q.defer(),username=data.username,password=data.password,domain=data.domain,rememberLogin=data.rememberLogin?1:0;return data.loginSuffix&&!username.endsWith(data.loginSuffix)&&(username+=loginSuffix,domain=!1),data.language&&"WONoSelectionString"!=data.language&&(language=data.language),$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();loginCookie?"undefined"!=typeof data.expire&&"undefined"!=typeof data.grace?data.expire<0&&data.grace>0?d.reject({grace:data.grace}):data.expire>0&&-1==data.grace?d.reject({expire:data.expire}):d.resolve(redirectUrl(username,domain)):d.resolve(redirectUrl(username,domain)):d.reject(l("cookiesNotEnabled"))}).error(function(data,status){var msg,perr;data&&data.LDAPPasswordPolicyError?(perr=data.LDAPPasswordPolicyError,msg=perr==passwordPolicyConfig.PolicyNoError?l("Wrong username or password."):perr==passwordPolicyConfig.PolicyAccountLocked?l("Your account was locked due to too many failed attempts."):l("Login failed due to unhandled error case: ")+perr):msg=l("Unhandled error response"),d.reject({error:msg})}),d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();return $http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;perr?perr==passwordPolicyConfig.PolicyNoError?error=l("Password change failed"):perr==passwordPolicyConfig.PolicyPasswordModNotAllowed?error=l("Password change failed - Permission denied"):perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality?error=l("Password change failed - Insufficient password quality"):perr==passwordPolicyConfig.PolicyPasswordTooShort?error=l("Password change failed - Password is too short"):perr==passwordPolicyConfig.PolicyPasswordTooYoung?error=l("Password change failed - Password is too young"):perr==passwordPolicyConfig.PolicyPasswordInHistory?error=l("Password change failed - Password is in history"):(error=l("Unhandled policy error: %{0}").formatted(perr),perr=passwordPolicyConfig.PolicyPasswordUnknown):(perr=passwordPolicyConfig.PolicyPasswordSystemUnknown,error=_("Unhandled error response")),d.reject(error)}),d.promise}}}this.$get=getService,getService.$inject=["$q","$http","passwordPolicyConfig"]}angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication)}(),function(){"use strict";function Dialog(){}function DialogService($q,$mdDialog){return angular.extend(Dialog,{$q:$q,$modal:$mdDialog}),Dialog}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).content(content).ok(l("OK"));this.$modal.show(alert)},Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).content(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)},Dialog.prompt=function(title,label,options){function PromptDialogController(scope,$mdDialog){scope.title=title,scope.name="",scope.cancel=function(){d.reject(),$mdDialog.hide()},scope.ok=function(){d.resolve(scope.name),$mdDialog.hide()}}var o=options||{},d=this.$q.defer();return this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','

'," "," ",' '," ","
",'
',' '," "+l("Cancel")," ",' '," "+l("OK")," ","
","
"].join(""),controller:PromptDialogController}),PromptDialogController.$inject=["scope","$mdDialog"],d.promise},DialogService.$inject=["$q","$mdDialog"],angular.module("SOGo.Common").factory("Dialog",DialogService)}(),function(){"use strict";function Gravatar(){return function(email,size){var x,y,hash,s=size;return email?(x=email.indexOf("<"),x>=0&&(y=email.indexOf(">",x),y>x&&(email=email.substring(x+1,y))),size||(s=48),hash=email.md5(),"https://www.gravatar.com/avatar/"+hash+"?s="+s+"&d=wavatar"):""}}angular.module("SOGo.Common").factory("Gravatar",Gravatar)}(),function(){"use strict";function Resource($http,$q,path,activeUser,options){angular.extend(this,{_http:$http,_q:$q,_path:path,_activeUser:activeUser}),angular.extend(this,options),this._path=this._path.replace(/\/$/,"")}Resource.$factory=["$http","$q",function($http,$q){return function(path,activeUser,options){return new Resource($http,$q,path,activeUser,options)}}],angular.module("SOGo.Common").factory("Resource",Resource.$factory),Resource.prototype.userResource=function(uid){var path=_.compact(this._activeUser.folderURL.split("/"));return path.splice(path.length-1,1,escape(uid)),new Resource(this._http,this._q,"/"+path.join("/"),this._activeUser)},Resource.prototype.fetch=function(folderId,action,params){var deferred=this._q.defer(),path=[this._path];return folderId&&path.push(folderId.split("/")),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http({method:"GET",url:path,params:params}).success(deferred.resolve).error(function(data,status){return 404==status?deferred.reject():void 0}),deferred.promise},Resource.prototype.newguid=function(folderId){var deferred=this._q.defer(),path=this._path+"/"+folderId+"/newguid";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.create=function(action,name){var deferred=this._q.defer(),path=this._path+"/"+action;return this._http.post(path,{name:name}).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.post=function(id,action,data){var deferred=this._q.defer(),path=[this._path];return id&&path.push(id),action&&path.push(action),path=_.compact(_.flatten(path)).join("/"),this._http.post(path,data).success(deferred.resolve).error(deferred.reject),deferred.promise},Resource.prototype.save=function(id,newValue,options){var action=(this._q.defer(),options&&options.action?options.action:"save");return this.post(id,action,newValue)},Resource.prototype.remove=function(uid){var deferred=this._q.defer(),path=this._path+"/"+uid+"/delete";return this._http.get(path).success(deferred.resolve).error(deferred.reject),deferred.promise}}(),function(){"use strict";function User(userData){userData&&this.init(userData)}User.factory=["$q","$log","sgSettings","Resource","Gravatar",function($q,$log,Settings,Resource,Gravatar){return angular.extend(User,{$q:$q,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$gravatar:Gravatar,$query:"",$users:[]}),User}],angular.module("SOGo.Common").factory("User",User.factory),User.$filter=function(search,excludedUsers){var param={search:search},_this=this;return search?User.$query==search?User.$q.when(User.$users):(User.$query=search,User.$$resource.fetch(null,"usersSearch",param).then(function(response){var results,index,user,compareUids=function(data){return _this.uid==data.uid};for(results=excludedUsers?_.filter(response.users,function(data){return!_.find(excludedUsers,compareUids,user)}):response.users,index=User.$users.length-1;index>=0;index--)user=User.$users[index],_.find(results,compareUids,user)||User.$users.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(User.$users,compareUids,data))){var user=new User(data);User.$users.splice(index,0,user)}}),User.$log.debug(User.$users),User.$users})):(User.$users=[],User.$q.when(User.$users))},User.prototype.init=function(data){angular.extend(this,data),this.$$shortFormat||(this.$$shortFormat=this.$shortFormat()),this.$$image||(this.$$image=this.image||User.$gravatar(this.c_email)),this.empty=" "},User.prototype.$shortFormat=function(options){var fullname=this.cn||this.c_email,email=this.c_email,no_email=options&&options.email===!1;return!no_email&&email&&fullname!=email&&(fullname+=" <"+email+">"),fullname},User.prototype.$acl=function(folderId){var _this=this,deferred=User.$q.defer(),param={uid:this.uid};return this.$shadowRights?deferred.resolve(this.rights):User.$$resource.fetch(folderId,"userRights",param).then(function(data){return _this.rights=data,_this.$shadowRights=angular.copy(data),deferred.resolve(data),data}),deferred.promise},User.prototype.$isAnonymous=function(){return"anonymous"==this.uid},User.prototype.$isSpecial=function(){return this.userClass&&"public-user"==this.userClass},User.prototype.$confirmRights=function(){var confirmation=!1;return this.$confirmation?!1:(_.some(_.values(this.rights))&&("anonymous"==this.uid?confirmation=l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?"):""==this.uid&&(confirmation=l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?"))),this.$confirmation=confirmation,confirmation)},User.prototype.$rightsAreDirty=function(){return this.rights&&!_.isEqual(this.rights,this.$shadowRights)},User.prototype.$resetRights=function(zero){var _this=this;zero?_.map(_.keys(this.rights),function(key){angular.isString(_this.rights[key])?_this.rights[key]="None":_this.rights[key]=0}):this.rights=angular.copy(this.$shadowRights)},User.prototype.$folders=function(type){var _this=this,deferred=User.$q.defer(),param={type:type};return this.$$folders?deferred.resolve(this.$$folders):User.$$resource.userResource(this.uid).fetch(null,"foldersSearch",param).then(function(response){_this.$$folders=response.folders,deferred.resolve(response.folders)}),deferred.promise},User.prototype.$omit=function(){var user={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(user[key]=value)}),user},User.prototype.toString=function(){return"[User "+this.c_email+"]"}}(),function(){"use strict";function sgFocus($rootScope,$timeout){return function(name){$timeout(function(){$rootScope.$broadcast("sgFocusOn",name)})}}sgFocus.$inject=["$rootScope","$timeout"],angular.module("SOGo.Common").factory("sgFocus",sgFocus)}(),function(){"use strict";function sgAvatarImage(){return{restrict:"AE",replace:!0,scope:{size:"@",email:"=sgEmail",src:"=sgSrc"},template:'',bindToController:!0,controller:"sgAvatarImageController",controllerAs:"vm"}}function sgAvatarImageController($scope,$element,Gravatar){var vm=this;$scope.$watch("vm.email",function(email){email&&!vm.url&&(vm.url=Gravatar(email,vm.size))}),"sg-src"in $element[0].attributes&&$scope.$watch("vm.src",function(src){src&&(vm.url=src)})}sgAvatarImageController.$inject=["$scope","$element","Gravatar"],angular.module("SOGo.Common").directive("sgAvatarImage",sgAvatarImage).controller("sgAvatarImageController",sgAvatarImageController)}(),function(){"use strict";function sgColorPicker($parse){function link(scope,iElement,iAttr,controller){controller.doSelect=$parse(iElement.attr("sg-on-select"))}return{restrict:"E",template:["",' '," color_lens"," ",' ',' ',' '," "," ",""].join(""),replace:!0,bindToController:!0,controller:sgColorPickerController,controllerAs:"$sgColorPickerController",link:link}}function sgColorPickerController($scope,sgColors){var vm=this;vm.colors=sgColors.selection,vm.select=function(color){vm.doSelect($scope,{color:color})}}sgColorPicker.$inject=["$parse"],sgColorPickerController.$inject=["$scope","sgColors"],angular.module("SOGo.Common").directive("sgColorPicker",sgColorPicker)}(),function(){"use strict";function sgCompile($compile){function sgCompileLink(scope,element,attrs){var ensureCompileRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgCompile)},function(value){element.html(value),$compile(element.contents())(scope),ensureCompileRunsOnce()})}return{restrict:"A",link:sgCompileLink}}sgCompile.$inject=["$compile"],angular.module("SOGo.Common").directive("sgCompile",sgCompile)}(),function(){"use strict";function sgEnter(){var ENTER_KEY=13;return function(scope,element,attrs){element.bind("keydown keypress",function(event){event.which===ENTER_KEY&&(scope.$apply(function(){scope.$eval(attrs.sgEnter)}),event.preventDefault())})}}angular.module("SOGo.Common").directive("sgEnter",sgEnter)}(),function(){"use strict";function sgEscape(){var ESCAPE_KEY=27;return function(scope,elem,attrs){elem.bind("keydown",function(event){event.keyCode===ESCAPE_KEY&&scope.$apply(attrs.sgEscape)})}}angular.module("SOGo.Common").directive("sgEscape",sgEscape)}(),function(){"use strict";function sgFocusOn(){return function(scope,elem,attr){scope.$on("sgFocusOn",function(e,name){name===attr.sgFocusOn&&(elem[0].focus(),elem[0].select())})}}angular.module("SOGo.Common").directive("sgFocusOn",sgFocusOn)}(),function(){"use strict";function sgFolderStylesheet(){return{restrict:"A",require:"ngModel",scope:{ngModel:"="},template:['"].join("")}}angular.module("SOGo.Common").directive("sgFolderStylesheet",sgFolderStylesheet)}(),function(){"use strict";function sgSearchPreTransclude($parse){function compile(tElement,tAttr){var inputEl=(tElement.find("md-input-container"),tElement.find("input")),selectEl=tElement.find("md-select"),buttonEl=tElement.find("md-button");return inputEl.attr("ng-model","$sgSearchController.searchText"),inputEl.attr("ng-model-options","$sgSearchController.searchTextOptions"),inputEl.attr("ng-change","$sgSearchController.onChange()"),selectEl&&(selectEl.attr("ng-model","$sgSearchController.searchField"),selectEl.attr("ng-change","$sgSearchController.onChange()")),buttonEl&&buttonEl.attr("sg-search-cancel")?(buttonEl.attr("ng-click",buttonEl.attr("sg-search-cancel")),buttonEl.removeAttr("sg-search-cancel")):buttonEl=null,function(scope,iElement,iAttr,controller){var compiledButtonEl=iElement.find("button");controller.doSearch=$parse(iElement.attr("sg-search")),buttonEl&&compiledButtonEl&&compiledButtonEl.on("click",controller.cancelSearch)}}return{restrict:"A",controller:"sgSearchController",controllerAs:"$sgSearchController",priority:1001,compile:compile}}function sgSearch(){function compile(tElement,tAttr){return function(scope,iElement,iAttr,controller,transclude){transclude(function(clone){iElement.append(clone)})}}return{restrict:"A",priority:1e3,transclude:!0,compile:compile}}function sgSearchController($scope,$element){var vm=this;vm.previous={searchText:"",searchField:""},vm.searchText=null,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){null!==vm.searchText&&(vm.searchText!=vm.previous.searchText||vm.searchField!=vm.previous.searchField)&&((vm.searchText.length>2||0===vm.searchText.length)&&vm.doSearch($scope,{searchText:vm.searchText,searchField:vm.searchField}),vm.previous={searchText:vm.searchText,searchField:vm.searchField})},vm.cancelSearch=function(){vm.searchText=""}}sgSearchPreTransclude.$inject=["$parse"],sgSearchController.$inject=["$scope","$element"],angular.module("SOGo.Common").controller("sgSearchController",sgSearchController).directive("sgSearch",sgSearchPreTransclude).directive("sgSearch",sgSearch)}(),function(){"use strict";function sgSubscribe(User){return{restrict:"A",scope:{folderType:"@sgSubscribe",onFolderSelect:"&sgSubscribeOnSelect"},replace:!1,bindToController:!0,controller:sgSubscribeDialogController,controllerAs:"$sgSubscribeDialogController",link:link}}function link(scope,element,attrs,controller){element.find("input");element.on("click",controller.showDialog)}function sgSubscribeDialogController($mdDialog){var vm=this;vm.showDialog=function(){$mdDialog.show({templateUrl:"../Contacts/UIxContactsUserFolders",clickOutsideToClose:!0,locals:{folderType:vm.folderType,onFolderSelect:vm.onFolderSelect},controller:sgSubscribeController,controllerAs:"subscribe"})}}function sgSubscribeController(folderType,onFolderSelect,User){var vm=this;vm.selectedUser=null,vm.users=User.$users,vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}},vm.onChange=function(){User.$filter(vm.searchText).then(function(){vm.selectedUser&&_.isUndefined(_.find(User.$users,function(user){return user.uid==vm.selectedUser.uid}))&&(vm.selectedUser=null)})},vm.selectUser=function(i){vm.selectedUser==vm.users[i]?vm.selectedUser=null:vm.users[i].$folders(folderType).then(function(){vm.selectedUser=vm.users[i]})},vm.selectFolder=function(folder){onFolderSelect({folderData:folder})}}sgSubscribe.$inject=["User"],sgSubscribeDialogController.$inject=["$mdDialog"],sgSubscribeController.$inject=["folderType","onFolderSelect","User"],angular.module("SOGo.Common").directive("sgSubscribe",sgSubscribe)}(),function(){"use strict";function sgTarget(){function sgTargetLink(scope,element,attrs){console.log("sgTargetLink...");var ensureTargetRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgTarget)},function(value){element.html(value),ensureTargetRunsOnce()})}return{priority:1,restrict:"A",link:sgTargetLink}}angular.module("SOGo.Common").directive("sgTarget",sgTarget)}(),function(){"use strict";function timePaneDirective(){ -return{template:'
{{hour.displayName}}
{{minute.displayName}}
{{minute.displayName}}
',scope:{},require:["ngModel","sgTimePane"],controller:TimePaneCtrl,controllerAs:"ctrl",bindToController:!0,link:function(scope,element,attrs,controllers){var ngModelCtrl=controllers[0],sgTimePaneCtrl=controllers[1];console.log(element);var timePaneElement=element;sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl,timePaneElement)}}}function TimePaneCtrl($element,$attrs,$scope,$animate,$q,$mdConstant,$mdTheming,$$mdDateUtil,$mdDateLocale,$mdInkRipple,$mdUtil){var m;this.$scope=$scope,this.$element=$element,this.timePaneElement=$element[0].querySelector(".sg-time-pane"),this.$animate=$animate,this.$q=$q,this.$mdInkRipple=$mdInkRipple,this.$mdUtil=$mdUtil,this.keyCode=$mdConstant.KEY_CODE,this.dateUtil=$$mdDateUtil,this.id=nextTimePaneUniqueId++,this.ngModelCtrl=null,this.selectedTime=null,this.displayTime=null,this.isInitialized=!1,$scope.hours=[],$scope.hours[0]=[],$scope.hours[0][0]=[],$scope.hours[0][1]=[],$scope.hours[1]=[],$scope.hours[1][0]=[],$scope.hours[1][1]=[];for(var i=0;6>i;i++)$scope.hours[0][0][i]={id:"tp-"+this.id+"-hour-"+i,displayName:10>i?"0"+i:""+i,selected:!1},$scope.hours[0][1][i]={id:"tp-"+this.id+"-hour-"+(i+6),displayName:10>i+6?"0"+(i+6):""+(i+6),selected:!1},$scope.hours[1][0][i]={id:"tp-"+this.id+"-hour-"+(i+12),displayName:""+(i+12),selected:!1},$scope.hours[1][1][i]={id:"tp-"+this.id+"-hour-"+(i+18),displayName:""+(i+18),selected:!1};for($scope.min5=[],$scope.min5[0]=[],$scope.min5[1]=[],i=0;6>i;i++)m=5*i,$scope.min5[0][i]={id:"tp-"+this.id+"-minute5-"+m,displayName:10>m?":0"+m:":"+m,selected:!0},$scope.min5[1][i]={id:"tp-"+this.id+"-minute5-"+(m+30),displayName:":"+(m+30),selected:!1};for($scope.min1=[],i=0;12>i;i++){$scope.min1[i]=[];for(var ii=0;5>ii;ii++)m=5*i+ii,$scope.min1[i][ii]={id:"tp-"+this.id+"-minute-"+m,displayName:10>m?":0"+m:":"+m,selected:!0}}$scope.show5min=!0,$scope.getToggleBtnLbl=function(){return $scope.is5min()?">>":"<<"},$scope.toggleManual5min=function(){$scope.manual5min=!$scope.is5min()},$scope.is5min=function(){return $scope.manual5min===!0||$scope.manual5min===!1?$scope.manual5min:$scope.show5min},$attrs.tabindex||$element.attr("tabindex","-1");var self=this;this.hourClickHandler=function(displayVal){var updated=new Date(self.displayTime).setHours(Number(displayVal));self.setNgModelValue(updated,"hours")},$scope.hourClickHandler=this.hourClickHandler,this.minuteClickHandler=function(displayVal){var val=displayVal.substr(1),updated=new Date(self.displayTime).setMinutes(Number(val));self.setNgModelValue(updated,"minutes")},$scope.minuteClickHandler=this.minuteClickHandler,this.attachTimePaneEventListeners()}angular.module("SOGo.Common").directive("sgTimePane",timePaneDirective);var SELECTED_TIME_CLASS2="md-primary",FOCUSED_TIME_CLASS="md-focus",nextTimePaneUniqueId=0;TimePaneCtrl.$inject=["$element","$attrs","$scope","$animate","$q","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil"],TimePaneCtrl.prototype.configureNgModel=function(ngModelCtrl,sgTimePaneCtrl,timePaneElement){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.changeSelectedTime(self.ngModelCtrl.$viewValue,sgTimePaneCtrl,timePaneElement)}},TimePaneCtrl.prototype.changeSelectedTime=function(date,sgTimePaneCtrl,timePaneElement){var previousSelectedTime=this.selectedTime;this.selectedTime=new Date(date),this.changeDisplayTime(date).then(function(){if(previousSelectedTime){var prevH=previousSelectedTime.getHours(),prevHCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+prevH);prevHCell&&(prevHCell.classList.remove(SELECTED_TIME_CLASS2),prevHCell.setAttribute("aria-selected","false"));var prevM=previousSelectedTime.getMinutes(),prevMCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+prevM);prevMCell&&(prevMCell.classList.remove(SELECTED_TIME_CLASS2),prevMCell.setAttribute("aria-selected","false"));var prevM5Cell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+prevM);prevM5Cell&&(prevM5Cell.classList.remove(SELECTED_TIME_CLASS2),prevM5Cell.setAttribute("aria-selected","false"))}if(date){var mCell,d=new Date(date),newH=d.getHours(),hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);hCell&&(hCell.classList.add(SELECTED_TIME_CLASS2),hCell.setAttribute("aria-selected","true"));var newM=d.getMinutes();newM%5===0?(sgTimePaneCtrl.$scope.show5min=!0,mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+newM),mCell&&(mCell.classList.add(SELECTED_TIME_CLASS2),mCell.setAttribute("aria-selected","true"))):sgTimePaneCtrl.$scope.show5min=!1,mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+newM),mCell&&(mCell.classList.add(SELECTED_TIME_CLASS2),mCell.setAttribute("aria-selected","true"))}})},TimePaneCtrl.prototype.changeDisplayTime=function(date){var d=new Date(date);return this.isInitialized?this.dateUtil.isValidDate(d)?(this.displayTime=d,this.$q.when()):this.$q.when():(this.buildInitialTimePaneDisplay(),this.$q.when())},TimePaneCtrl.prototype.buildInitialTimePaneDisplay=function(){this.displayTime=this.selectedTime||this.today,this.isInitialized=!0},TimePaneCtrl.prototype.attachTimePaneEventListeners=function(){this.$element.on("keydown",angular.bind(this,this.handleKeyEvent))},TimePaneCtrl.prototype.handleKeyEvent=function(event){var self=this;this.$scope.$apply(function(){return event.which==self.keyCode.ESCAPE||event.which==self.keyCode.TAB?(self.$scope.$emit("md-time-pane-close"),void(event.which==self.keyCode.TAB&&event.preventDefault())):event.which===self.keyCode.ENTER?(self.setNgModelValue(self.displayTime,"enter"),void event.preventDefault()):void 0})},TimePaneCtrl.prototype.setNgModelValue=function(date,mode){this.$scope.$emit("sg-time-pane-change",{date:date,changed:mode}),this.ngModelCtrl.$setViewValue(date),this.ngModelCtrl.$render()},TimePaneCtrl.prototype.focus=function(opt_date,sgTimePaneCtrl){var date=opt_date||this.selectedTime||this.today,previousFocus=this.timePaneElement.querySelector(".md-focus");if(previousFocus&&previousFocus.classList.remove(FOCUSED_TIME_CLASS),date){var newH=date.getHours(),hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);hCell&&(hCell.classList.add(FOCUSED_TIME_CLASS),hCell.focus())}}}(),function(){"use strict";function timePickerDirective(){return{template:'
',require:["ngModel","sgTimepicker"],scope:{placeholder:"@mdPlaceholder"},controller:TimePickerCtrl,controllerAs:"ctrl",bindToController:!0,link:function(scope,element,attr,controllers){var ngModelCtrl=controllers[0],mdTimePickerCtrl=controllers[1];mdTimePickerCtrl.configureNgModel(ngModelCtrl)}}}function TimePickerCtrl($scope,$element,$attrs,$compile,$timeout,$mdConstant,$mdTheming,$mdUtil,$mdDateLocale,$$mdDateUtil,$$rAF){this.$compile=$compile,this.$timeout=$timeout,this.dateLocale=$mdDateLocale,this.dateUtil=$$mdDateUtil,this.$mdConstant=$mdConstant,this.$mdUtil=$mdUtil,this.$$rAF=$$rAF,this.ngModelCtrl=null,this.inputElement=$element[0].querySelector("input"),this.inputContainer=$element[0].querySelector(".sg-timepicker-input-container"),this.timePane=$element[0].querySelector(".sg-timepicker-time-pane"),this.timeButton=$element[0].querySelector(".sg-timepicker-button"),this.inputMask=$element[0].querySelector(".sg-timepicker-input-mask-opaque"),this.$element=$element,this.$attrs=$attrs,this.$scope=$scope,this.date=null,this.isFocused=!1,this.isDisabled=!1,this.setDisabled($element[0].disabled||angular.isString($attrs.disabled)),this.isTimeOpen=!1,this.timePaneOpenedFrom=null,this.timePane.id="sg-time-pane"+$mdUtil.nextUid(),$mdTheming($element),this.bodyClickHandler=angular.bind(this,this.handleBodyClick),$attrs.tabindex||$element.attr("tabindex","-1"),this.installPropertyInterceptors(),this.attachChangeListeners(),this.attachInteractionListeners();var self=this;$scope.$on("$destroy",function(){self.detachTimePane()})}angular.module("SOGo.Common").directive("sgTimepicker",timePickerDirective);var EXTRA_INPUT_SIZE=3,INVALID_CLASS="sg-timepicker-invalid",DEFAULT_DEBOUNCE_INTERVAL=500;TimePickerCtrl.$inject=["$scope","$element","$attrs","$compile","$timeout","$mdConstant","$mdTheming","$mdUtil","$mdDateLocale","$$mdDateUtil","$$rAF"],TimePickerCtrl.prototype.configureNgModel=function(ngModelCtrl){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.time=self.ngModelCtrl.$viewValue,self.inputElement.value=self.formatTime(self.time),self.resizeInputElement()}},TimePickerCtrl.prototype.formatTime=function(time){var t=new Date(time);if(t){var h=t.getHours(),m=t.getMinutes();return(10>h?"0"+h:h)+":"+(10>m?"0"+m:m)}return""},TimePickerCtrl.prototype.attachChangeListeners=function(){var self=this;self.$scope.$on("sg-time-pane-change",function(event,data){var time=new Date(data.date);self.ngModelCtrl.$setViewValue(time),self.time=time,self.inputElement.value=self.formatTime(self.time),"minutes"==data.changed&&self.closeTimePane(),self.resizeInputElement(),self.inputContainer.classList.remove(INVALID_CLASS)});var ngElement=angular.element(self.inputElement);ngElement.on("input",angular.bind(self,self.resizeInputElement)),ngElement.on("input",self.$mdUtil.debounce(self.handleInputEvent,DEFAULT_DEBOUNCE_INTERVAL,self))},TimePickerCtrl.prototype.attachInteractionListeners=function(){var self=this,$scope=this.$scope,keyCodes=this.$mdConstant.KEY_CODE;angular.element(self.inputElement).on("keydown",function(event){event.altKey&&event.keyCode==keyCodes.DOWN_ARROW&&(self.openTimePane(event),$scope.$digest())}),$scope.$on("md-time-close",function(){self.closeTimePane()})},TimePickerCtrl.prototype.installPropertyInterceptors=function(){var self=this;this.$attrs.ngDisabled&&this.$element.scope().$watch(this.$attrs.ngDisabled,function(isDisabled){self.setDisabled(isDisabled)}),Object.defineProperty(this,"placeholder",{get:function(){return self.inputElement.placeholder},set:function(value){self.inputElement.placeholder=value||""}})},TimePickerCtrl.prototype.setDisabled=function(isDisabled){this.isDisabled=isDisabled,this.inputElement.disabled=isDisabled,this.timeButton.disabled=isDisabled},TimePickerCtrl.prototype.resizeInputElement=function(){this.inputElement.size=this.inputElement.value.length+EXTRA_INPUT_SIZE},TimePickerCtrl.prototype.handleInputEvent=function(self){var inputString=this.inputElement.value,arr=inputString.split(":");if(!(arr.length<2)){var h=Number(arr[0]),m=Number(arr[1]),newVal=new Date(this.time);h&&h>=0&&23>=h&&m&&m>=0&&59>=m&&angular.isDate(newVal)?(newVal.setHours(h),newVal.setMinutes(m),this.ngModelCtrl.$setViewValue(newVal),this.time=newVal,this.inputContainer.classList.remove(INVALID_CLASS)):this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}},TimePickerCtrl.prototype.attachTimePane=function(){var timePane=this.timePane;this.$element.addClass("sg-timepicker-open");var elementRect=this.inputContainer.getBoundingClientRect(),bodyRect=document.body.getBoundingClientRect();timePane.style.left=elementRect.left-bodyRect.left+"px",timePane.style.top=elementRect.top-bodyRect.top+"px",document.body.appendChild(this.timePane),this.inputMask.style.left=elementRect.width+"px",this.$$rAF(function(){timePane.classList.add("md-pane-open")})},TimePickerCtrl.prototype.detachTimePane=function(){this.$element.removeClass("sg-timepicker-open"),this.timePane.classList.remove("md-pane-open"),this.timePane.parentNode&&this.timePane.parentNode.removeChild(this.timePane)},TimePickerCtrl.prototype.openTimePane=function(event){if(!this.isTimeOpen&&!this.isDisabled){this.isTimeOpen=!0,this.timePaneOpenedFrom=event.target,this.attachTimePane(),this.focusTime(),this.$mdUtil.disableScrollAround(this.timePane);var self=this;this.$mdUtil.nextTick(function(){document.body.addEventListener("click",self.bodyClickHandler)},!1)}},TimePickerCtrl.prototype.closeTimePane=function(){this.isTimeOpen=!1,this.detachTimePane(),this.timePaneOpenedFrom.focus(),this.timePaneOpenedFrom=null,this.$mdUtil.enableScrolling(),document.body.removeEventListener("click",this.bodyClickHandler)},TimePickerCtrl.prototype.getTimePaneCtrl=function(){return angular.element(this.timePane.querySelector("sg-time-pane")).controller("sgTimePane")},TimePickerCtrl.prototype.focusTime=function(){var self=this;this.$mdUtil.nextTick(function(){var ctrl=self.getTimePaneCtrl();self.getTimePaneCtrl().focus(null,ctrl)},!1)},TimePickerCtrl.prototype.setFocused=function(isFocused){this.isFocused=isFocused},TimePickerCtrl.prototype.handleBodyClick=function(event){if(this.isTimeOpen){var isInTime=this.$mdUtil.getClosest(event.target,"sg-time-pane");isInTime||this.closeTimePane(),this.$scope.$digest()}}}(),function(){"use strict";function sgToggleGrid($parse){function link(scope,iElement,attrs,ctrl){function toggle(day){var i=_.findIndex(modelDays,function(o){return modelAttr?o[modelAttr]==day:o==day});if(0>i)if(modelAttr){var o={};o[modelAttr]=day,modelDays.push(o)}else modelDays.push(day);else modelDays.splice(i,1)}var tile,i,modelDays,modelAttr,ensureInitRunsOnce,toggleClass,tiles=iElement.find("md-grid-tile");for(ensureInitRunsOnce=scope.$watch(function(){return $parse(attrs.sgToggleGrid)(scope)},function(days){if(angular.isDefined(days)){var flattenedDays=days;modelDays=days,attrs.sgToggleGridAttr&&(modelAttr=attrs.sgToggleGridAttr,flattenedDays=_.pluck(days,attrs.sgToggleGridAttr)),_.each(tiles,function(o){var tile=angular.element(o);_.contains(flattenedDays,tile.attr("value"))&&tile.addClass("sg-active")}),ensureInitRunsOnce()}}),toggleClass=function(){var tile=angular.element(this),day=tile.attr("value");tile.toggleClass("sg-active"),toggle(day)},i=0;i>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+this._base64_keyStr.charAt(enc1)+this._base64_keyStr.charAt(enc2)+this._base64_keyStr.charAt(enc3)+this._base64_keyStr.charAt(enc4);return output},String.prototype.base64decode=function(){for(var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0,input=""+this;i>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));return output},String.prototype.md5=function(){if(this.length){var md5=function(s){function L(k,d){return k<>>32-d}function K(G,k){var I,d,F,H,x;return F=2147483648&G,H=2147483648&k,I=1073741824&G,d=1073741824&k,x=(1073741823&G)+(1073741823&k),I&d?2147483648^x^F^H:I|d?1073741824&x?3221225472^x^F^H:1073741824^x^F^H:x^F^H}function r(d,F,k){return d&F|~d&k}function q(d,F,k){return d&k|F&~k}function p(d,F,k){return d^F^k}function n(d,F,k){return F^(d|~k)}function u(G,F,aa,Z,k,H,I){return G=K(G,K(K(r(F,aa,Z),k),I)),K(L(G,H),F)}function f(G,F,aa,Z,k,H,I){return G=K(G,K(K(q(F,aa,Z),k),I)),K(L(G,H),F)}function D(G,F,aa,Z,k,H,I){return G=K(G,K(K(p(F,aa,Z),k),I)),K(L(G,H),F)}function t(G,F,aa,Z,k,H,I){return G=K(G,K(K(n(F,aa,Z),k),I)),K(L(G,H),F)}function e(G){for(var Z,F=G.length,x=F+8,k=(x-x%64)/64,I=16*(k+1),aa=Array(I-1),d=0,H=0;F>H;)Z=(H-H%4)/4,d=H%4*8,aa[Z]=aa[Z]|G.charCodeAt(H)<>>29,aa}function B(x){var G,d,k="",F="";for(d=0;3>=d;d++)G=x>>>8*d&255,F="0"+G.toString(16),k+=F.substr(F.length-2,2);return k}function J(k){k=k.replace(/rn/g,"n");for(var d="",F=0;Fx?d+=String.fromCharCode(x):x>127&&2048>x?(d+=String.fromCharCode(x>>6|192),d+=String.fromCharCode(63&x|128)):(d+=String.fromCharCode(x>>12|224),d+=String.fromCharCode(x>>6&63|128),d+=String.fromCharCode(63&x|128))}return d}var P,h,E,v,g,Y,X,W,V,C=Array(),S=7,Q=12,N=17,M=22,A=5,z=9,y=14,w=20,o=4,m=11,l=16,j=23,U=6,T=10,R=15,O=21;for(s=J(s),C=e(s),Y=1732584193,X=4023233417,W=2562383102,V=271733878,P=0;P12&&(p="pm",i=hours%12),10>minutes&&(m="0"+minutes),newString=newString.replace("%H",10>hours?"0"+hours:hours),newString=newString.replace("%I",10>i?"0"+i:i),newString=newString.replace("%M",m),newString=newString.replace("%p",p)},Date.prototype.daysUpTo=function(otherDate){var days=[],day1=this.getTime(),day2=otherDate.getTime();if(day1>day2){var tmp=day1;day1=day2,day2=tmp}for(var nbrDays=Math.round((day2-day1)/864e5)+1,i=0;nbrDays>i;i++){var newDate=new Date;newDate.setTime(day1+864e5*i),days.push(newDate)}return days},String.prototype.isValidEmail=function(){var emailRE=/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i;return emailRE.test(this)},String.prototype.asCSSIdentifier=function(){for(var characters=["_","\\.","#","@","\\*",":",","," ","'","&","\\+"],escapeds=["_U_","_D_","_H_","_A_","_S_","_C_","_CO_","_SP_","_SQ_","_AM_","_P_"],newString=this,i=0;iyear&&(year=""+(year+1900)),1==month.length&&(month="0"+month),1==day.length&&(day="0"+day),"-"==separator?str=year+"-"+month+"-"+day:str=day+"/"+month+"/"+year,str},Date.prototype.addDays=function(nbrDays){var milliSeconds=this.getTime();milliSeconds+=864e5*nbrDays,this.setTime(milliSeconds)},Date.prototype.addHours=function(nbrHours){var milliSeconds=this.getTime();milliSeconds+=36e5*nbrHours,this.setTime(milliSeconds)},Date.prototype.addMinutes=function(nbrMinutes){var milliSeconds=this.getTime();milliSeconds+=6e4*nbrMinutes,this.setTime(milliSeconds)},Date.prototype.beginOfDay=function(){var beginOfDay=new Date(this.getTime());return beginOfDay.setHours(0),beginOfDay.setMinutes(0),beginOfDay.setSeconds(0),beginOfDay.setMilliseconds(0),beginOfDay},Date.prototype.beginOfWeek=function(){var offset=firstDayOfWeek-this.getDay();offset>0&&(offset-=7);var beginOfWeek=this.beginOfDay();return beginOfWeek.setHours(12),beginOfWeek.addDays(offset),beginOfWeek},Date.prototype.endOfWeek=function(){var endOfWeek=this.beginOfWeek();return endOfWeek.addDays(6),endOfWeek.setHours(23),endOfWeek.setMinutes(59),endOfWeek.setSeconds(59),endOfWeek.setMilliseconds(999),endOfWeek},Date.prototype.getDayString=function(){var newString=this.getYear();1e3>newString&&(newString+=1900);var month=""+(this.getMonth()+1);1==month.length&&(month="0"+month),newString+=month;var day=""+this.getDate();return 1==day.length&&(day="0"+day),newString+=day},Date.prototype.getHourString=function(){var newString=this.getHours()+"00";return 3==newString.length&&(newString="0"+newString),newString}; +function l(){var key=arguments[0],value=key;labels[key]?value=labels[key]:clabels[key]&&(value=clabels[key]);for(var i=1,j=0;i0;)customSheet.deleteRule(0);angular.forEach(_$mdThemingProvider._THEMES,function(theme,themeName){addRule(fgDefault,bgDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["default"]]),addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-2"]],"hue-2"),addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-3"]],"hue-3"),addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-1"]],"hue-1"),addBorderRule(bdrDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["default"]]),angular.forEach(theme.colors,function(color,paletteName){addRule(fgColor,bgColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["default"]]),addBorderRule(bdrColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["default"]]),addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-2"]],"hue-2"),addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-3"]],"hue-3"),addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-1"]],"hue-1")})})}var _$mdThemingProvider;angular.module("mdColors",["ngMaterial"]).config(configure).run(runBlock),configure.$inject=["$mdThemingProvider"],runBlock.$inject=["$interpolate","$document","$log"]}(),function(){"use strict";function decodeUri($window){return $window.decodeURIComponent}decodeUri.$inject=["$window"],angular.module("SOGo.Common").filter("decodeUri",decodeUri)}(),function(){"use strict";function encodeUri($window){return $window.encodeURIComponent}encodeUri.$inject=["$window"],angular.module("SOGo.Common").filter("encodeUri",encodeUri)}(),function(){"use strict";function ensureTarget(){return function(element){var tree=angular.element("
"+element+"
");return tree.find("a").attr("target","_blank"),angular.element("
").append(tree).html()}}angular.module("SOGo.Common").filter("ensureTarget",ensureTarget)}(),function(){"use strict";function loc(){return l}angular.module("SOGo.Common").filter("loc",loc)}(),function(){"use strict";function range(){return function(n){for(var res=[],i=0;i-1?deferred.resolve():Acl.$$resource.fetch(this.folderId,"addUserInAcls",param).then(function(){user.wasSubscribed=!1,user.userClass=user.isGroup?"group-user":"normal-user",user.$rights=angular.bind(user,user.$acl,_this.folderId),_this.users.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);i>=0&&_this.users.splice(i,1)})},Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})},Acl.prototype.$saveUsersRights=function(){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];return angular.forEach(this.users,function(user){user.$rightsAreDirty()&&users.push(user.$omit())}),users.length?Acl.$$resource.save(this.folderId,users,param).then(function(){angular.forEach(_this.users,function(user){user.$rightsAreDirty()&&(user.$shadowRights=angular.copy(user.rights))}),deferredSave.resolve()},deferredSave.reject):deferredSave.resolve(),users=[],angular.forEach(this.users,function(user){!user.wasSubscribed&&user.isSubscribed&&users.push(user.uid)}),users.length?(param={uids:users.join(",")},Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed}),deferredSubscribe.resolve()},deferredSubscribe.reject)):deferredSubscribe.resolve(),Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}}(),function(){"use strict";function Alarm(){this.currentAlarm=null}function AlarmService($timeout,Settings,Resource,$mdToast){return angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast}),Alarm}Alarm.getAlarms=function(){var _this=this,now=new Date,browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function(a,b){var x=parseInt(a[2]),y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop(),now=new Date,utc=Math.floor(now.getTime()/1e3),url=next[0]+"/"+next[1],alarmTime=parseInt(next[2]),delay=alarmTime;alarmTime>0&&(delay-=utc);var f=(new Date(1e3*alarmTime),angular.bind(_this,Alarm.showAlarm,url));_this.currentAlarm&&_this.$timeout.cancel(_this.currentAlarm),_this.currentAlarm=_this.$timeout(f,1e3*delay)}})},Alarm.showAlarm=function(url){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){function AlarmController(scope,$mdToast,url){scope.reminder="10",scope.cancel=function(){$mdToast.hide()},scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder),$mdToast.hide()}}_this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ",""].join(""),locals:{url:url},controller:AlarmController}),AlarmController.$inject=["scope","$mdToast","url"]})},AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"],angular.module("SOGo.Common").factory("Alarm",AlarmService)}(),function(){"use strict";function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;for(foundCookie=null,prefix=name+"=",pairs=document.cookie.split(";"),i=0;!foundCookie&&i0&&(currentPair=currentPair.substr(start)),0===currentPair.indexOf(prefix)&&(foundCookie=currentPair.substr(prefix.length))}return foundCookie}function readLoginCookie(){var value,loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo");return cookie&&cookie.length>8&&(value=decodeURIComponent(cookie.substr(8)),loginValues=value.base64decode().split(":")),loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;return userName=username,domain&&(userName+="@"+domain.value),address=""+window.location.href,baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName),"/"==baseAddress[0]&&(parts=address.split("/"),hostpart=parts[2],protocol=parts[0],baseAddress=protocol+"//"+hostpart+baseAddress),parts=baseAddress.split("/"),parts.splice(0,3),altBaseAddress=parts.join("/"),newAddress=!address.startsWith(baseAddress)&&!address.startsWith(altBaseAddress)||address.endsWith("/logoff")?baseAddress:address}function getService($q,$http,passwordPolicyConfig){var service,_this=this;return service={login:function(data){var language,d=$q.defer(),username=data.username,password=data.password,domain=data.domain,rememberLogin=data.rememberLogin?1:0;return data.loginSuffix&&!username.endsWith(data.loginSuffix)&&(username+=loginSuffix,domain=!1),data.language&&"WONoSelectionString"!=data.language&&(language=data.language),$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();loginCookie?"undefined"!=typeof data.expire&&"undefined"!=typeof data.grace?data.expire<0&&data.grace>0?d.reject({grace:data.grace}):data.expire>0&&-1==data.grace?d.reject({expire:data.expire}):d.resolve(redirectUrl(username,domain)):d.resolve(redirectUrl(username,domain)):d.reject(l("cookiesNotEnabled"))}).error(function(data,status){var msg,perr;data&&data.LDAPPasswordPolicyError?(perr=data.LDAPPasswordPolicyError,msg=perr==passwordPolicyConfig.PolicyNoError?l("Wrong username or password."):perr==passwordPolicyConfig.PolicyAccountLocked?l("Your account was locked due to too many failed attempts."):l("Login failed due to unhandled error case: ")+perr):msg=l("Unhandled error response"),d.reject({error:msg})}),d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();return $http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;perr?perr==passwordPolicyConfig.PolicyNoError?error=l("Password change failed"):perr==passwordPolicyConfig.PolicyPasswordModNotAllowed?error=l("Password change failed - Permission denied"):perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality?error=l("Password change failed - Insufficient password quality"):perr==passwordPolicyConfig.PolicyPasswordTooShort?error=l("Password change failed - Password is too short"):perr==passwordPolicyConfig.PolicyPasswordTooYoung?error=l("Password change failed - Password is too young"):perr==passwordPolicyConfig.PolicyPasswordInHistory?error=l("Password change failed - Password is in history"):(error=l("Unhandled policy error: %{0}").formatted(perr),perr=passwordPolicyConfig.PolicyPasswordUnknown):(perr=passwordPolicyConfig.PolicyPasswordSystemUnknown,error=_("Unhandled error response")),d.reject(error)}),d.promise}}}this.$get=getService,getService.$inject=["$q","$http","passwordPolicyConfig"]}angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication)}(),function(){"use strict";function Dialog(){}function DialogService($q,$mdDialog){return angular.extend(Dialog,{$q:$q,$modal:$mdDialog}),Dialog}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).content(content).ok(l("OK"));this.$modal.show(alert)},Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).content(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)},Dialog.prompt=function(title,label,options){function PromptDialogController(scope,$mdDialog){scope.title=title,scope.name="",scope.cancel=function(){d.reject(),$mdDialog.hide()},scope.ok=function(){d.resolve(scope.name),$mdDialog.hide()}}var o=options||{},d=this.$q.defer();return this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','

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

',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n '
',\n ' ',\n ' ' + l('Cancel'),\n ' ',\n ' ',\n ' ' + l('OK'),\n ' ',\n '
',\n '
'\n ].join(''),\n controller: PromptDialogController\n });\n\n /**\n * @ngInject\n */\n PromptDialogController.$inject = ['scope', '$mdDialog'];\n function PromptDialogController(scope, $mdDialog) {\n scope.title = title;\n scope.name = \"\";\n scope.cancel = function() {\n d.reject();\n $mdDialog.hide();\n };\n scope.ok = function() {\n d.resolve(scope.name);\n $mdDialog.hide();\n };\n }\n\n return d.promise;\n };\n\n /**\n * @memberof Dialog\n * @desc The factory we'll register as Dialog in the Angular module SOGo.Common\n * @ngInject\n */\n DialogService.$inject = ['$q', '$mdDialog'];\n function DialogService($q, $mdDialog) {\n angular.extend(Dialog, { $q: $q , $modal: $mdDialog });\n\n return Dialog; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Dialog', DialogService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Gravatar - A service to build the Gravatar URL for an email address\n * @memberof SOGo.Common\n * @param {string} email\n * @param {number} [size] - the size of the image\n * @ngInject\n */\n function Gravatar() {\n return function(email, size) {\n var x, y, hash, s = size;\n if (!email) {\n return '';\n }\n x = email.indexOf('<');\n if (x >= 0) {\n y = email.indexOf('>', x);\n if (y > x)\n email = email.substring(x+1,y);\n }\n if (!size) {\n s = 48; // default to 48 pixels\n }\n hash = email.md5();\n\n // return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=identicon';\n return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=wavatar';\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('Gravatar', Gravatar);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Resource\n * @constructor\n * @param {Object} $http - the Angular HTTP service\n * @param {Object} $q - the Angular promise/deferred service\n * @param {String} path - the base path of the external resource\n * @param {Object} options - extra attributes to be associated to the object\n */\n function Resource($http, $q, path, activeUser, options) {\n angular.extend(this, {\n _http: $http,\n _q: $q,\n _path: path,\n _activeUser: activeUser\n });\n angular.extend(this, options);\n // Trim trailing slash\n this._path = this._path.replace(/\\/$/, '');\n }\n\n /**\n * @memberof Resource\n * @desc The factory we'll use to register with Angular.\n * @return a new Resource object\n */\n Resource.$factory = ['$http', '$q', function($http, $q) {\n return function(path, activeUser, options) {\n return new Resource($http, $q, path, activeUser, options);\n };\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of Resource in Angular module.\n */\n angular.module('SOGo.Common').factory('Resource', Resource.$factory);\n\n /**\n * @function userResource\n * @memberof Resource.prototype\n * @desc Create a new Resource object associated to a username different than the active user.\n * @param {String} uid - the user UID\n * @return a new Resource object\n */\n Resource.prototype.userResource = function(uid) {\n var path = _.compact(this._activeUser.folderURL.split('/'));\n path.splice(path.length - 1, 1, escape(uid));\n\n return new Resource(this._http, this._q, '/' + path.join('/'), this._activeUser);\n };\n\n /**\n * @function fetch\n * @memberof Resource.prototype\n * @desc Fetch resource using a specific folder, action and/or parameters.\n * @param {string} folderId - the folder on which the action will be applied (ex: addressbook, calendar)\n * @param {string} action - the action to be used in the URL\n * @param {Object} params - Object parameters injected through the $http service\n * @return a promise\n */\n Resource.prototype.fetch = function(folderId, action, params) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (folderId) path.push(folderId.split('/'));\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http({\n method: 'GET',\n url: path,\n params: params\n })\n .success(deferred.resolve)\n .error(function(data, status) {\n if (status == 404)\n return deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function newguid\n * @memberof Resource.prototype\n * @desc Fetch a new GUID on the specified folder ID.\n * @return a promise of the new data structure\n */\n Resource.prototype.newguid = function(folderId) {\n var deferred = this._q.defer(),\n path = this._path + '/' + folderId + '/newguid';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function create\n * @memberof Resource.prototype\n * @desc Create a new resource using a specific action (post).\n * @param {string} action - the action to be used in the URL\n * @param {string} name - the new resource's name\n * @return a promise\n */\n Resource.prototype.create = function(action, name) {\n var deferred = this._q.defer(),\n path = this._path + '/' + action;\n\n this._http\n .post(path, { name: name })\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function post\n * @memberof Resource.prototype\n * @desc Post a resource attributes on the server.\n * @return a promise\n */\n Resource.prototype.post = function(id, action, data) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (id) path.push(id);\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http\n .post(path, data)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function save\n * @memberof Resource.prototype\n * @desc Save a resource attributes on the server (post /save).\n * @return a promise\n */\n Resource.prototype.save = function(id, newValue, options) {\n var deferred = this._q.defer(),\n action = (options && options.action)? options.action : 'save';\n\n return this.post(id, action, newValue);\n };\n\n /**\n * @function remove\n * @memberof Resource.prototype\n * @desc Delete a resource (get /delete).\n * @return a promise\n */\n Resource.prototype.remove = function(uid) {\n var deferred = this._q.defer(),\n path = this._path + '/' + uid + '/delete';\n\n this._http\n .get(path)\n .success(deferred.resolve)\n .error(deferred.reject);\n\n return deferred.promise;\n };\n\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name User\n * @constructor\n * @param {object} [userData] - some default values for the user\n */\n function User(userData) {\n if (userData) {\n this.init(userData);\n }\n }\n\n /**\n * @memberof User\n * @desc The factory we'll use to register with Angular.\n * @return the User constructor\n */\n User.factory = ['$q', '$log', 'sgSettings', 'Resource', 'Gravatar', function($q, $log, Settings, Resource, Gravatar) {\n angular.extend(User, {\n $q: $q,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $gravatar: Gravatar,\n $query: '',\n $users: []\n });\n\n return User;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('User', User.factory);\n\n /**\n * @memberof User\n * @desc Search for users that match a string.\n * @param {string} search - a string used to performed the search\n * @param {object[]} excludedUsers - a list of User objects that must be excluded from the results\n * @return a promise of an array of matching User objects\n */\n User.$filter = function(search, excludedUsers) {\n var param = {search: search};\n var _this = this;\n\n if (!search) {\n // No query specified\n User.$users = [];\n return User.$q.when(User.$users);\n }\n if (User.$query == search) {\n // Query hasn't changed\n return User.$q.when(User.$users);\n }\n User.$query = search;\n\n return User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {\n var results, index, user,\n compareUids = function(data) {\n return _this.uid == data.uid;\n };\n if (excludedUsers) {\n // Remove excluded users from response\n results = _.filter(response.users, function(data) {\n return !_.find(excludedUsers, compareUids, user);\n });\n }\n else {\n results = response.users;\n }\n // Remove users that no longer match the search query\n for (index = User.$users.length - 1; index >= 0; index--) {\n user = User.$users[index];\n if (!_.find(results, compareUids, user)) {\n User.$users.splice(index, 1);\n }\n }\n // Add new users matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(User.$users, compareUids, data))) {\n var user = new User(data);\n User.$users.splice(index, 0, user);\n }\n });\n User.$log.debug(User.$users);\n return User.$users;\n });\n };\n\n /**\n * @function init\n * @memberof User.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of user\n */\n User.prototype.init = function(data) {\n angular.extend(this, data);\n if (!this.$$shortFormat)\n this.$$shortFormat = this.$shortFormat();\n if (!this.$$image)\n this.$$image = this.image || User.$gravatar(this.c_email);\n\n // An empty attribute to trick md-autocomplete when adding users from the ACLs editor\n this.empty = ' ';\n };\n\n /**\n * @function $shortFormat\n * @memberof User.prototype\n * @return the fullname along with the email address\n */\n User.prototype.$shortFormat = function(options) {\n var fullname = this.cn || this.c_email;\n var email = this.c_email;\n var no_email = options && options.email === false;\n if (!no_email && email && fullname != email) {\n fullname += ' <' + email + '>';\n }\n return fullname;\n };\n\n /**\n * @function $acl\n * @memberof User.prototype\n * @desc Fetch the user rights associated to a specific folder and populate the 'rights' attribute.\n * @param {string} the folder ID\n * @return a promise\n */\n User.prototype.$acl = function(folderId) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {uid: this.uid};\n if (this.$shadowRights) {\n deferred.resolve(this.rights);\n }\n else {\n User.$$resource.fetch(folderId, 'userRights', param).then(function(data) {\n _this.rights = data;\n // Convert numbers (0|1) to boolean values\n //angular.forEach(_.keys(_this.rights), function(key) {\n // _this.rights[key] = _this.rights[key] ? true : false;\n //});\n // console.debug('rights ' + _this.uid + ' => ' + JSON.stringify(data, undefined, 2));\n // Keep a copy of the server's version\n _this.$shadowRights = angular.copy(data);\n deferred.resolve(data);\n return data;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $isAnonymous\n * @memberof User.prototype\n * @return true if it's the special anonymous user\n */\n User.prototype.$isAnonymous = function() {\n return this.uid == 'anonymous';\n };\n\n /**\n * @function $isSpecial\n * @memberof User.prototype\n * @desc Only accurate from the ACL editor.\n * @return true if the user is not a regular system user\n */\n User.prototype.$isSpecial = function() {\n return this.userClass && this.userClass == 'public-user';\n };\n\n /**\n * @function $confirmRights\n * @memberof User.prototype\n * @desc Check if a confirmation is required before giving some rights.\n * @return the confirmation message or false if no confirmation is required\n */\n User.prototype.$confirmRights = function() {\n var confirmation = false;\n\n if (this.$confirmation) {\n // Don't bother the user more than once\n return false;\n }\n\n if (_.some(_.values(this.rights))) {\n if (this.uid == 'anonymous') {\n confirmation = l('Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?');\n }\n else if (this.uid == '') {\n confirmation = l('Any user with an account on this system will be able to access your folder. Are you certain you trust them all?');\n }\n }\n\n this.$confirmation = confirmation;\n\n return confirmation;\n };\n\n /**\n * @function $rightsAreDirty\n * @memberof User.prototype\n * @return whether or not the rights have changed from their initial values\n */\n User.prototype.$rightsAreDirty = function() {\n return this.rights && !_.isEqual(this.rights, this.$shadowRights);\n };\n\n /**\n * @function $resetRights\n * @memberof User.prototype\n * @desc Restore initial rights or disable all rights\n * @param {boolean} [zero] - reset all rights to zero when true\n */\n User.prototype.$resetRights = function(zero) {\n var _this = this;\n if (zero) {\n // Disable all rights\n _.map(_.keys(this.rights), function(key) {\n if (angular.isString(_this.rights[key]))\n _this.rights[key] = 'None';\n else\n _this.rights[key] = 0;\n });\n }\n else {\n // Restore initial rights\n this.rights = angular.copy(this.$shadowRights);\n }\n };\n\n /**\n * @function $folders\n * @memberof User.prototype\n * @desc Retrieve the list of folders of a specific type\n * @param {string} type - either 'contact' or 'calendar'\n * @return a promise of the HTTP query result or the cached result\n */\n User.prototype.$folders = function(type) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {type: type};\n if (this.$$folders) {\n deferred.resolve(this.$$folders);\n }\n else {\n User.$$resource.userResource(this.uid).fetch(null, 'foldersSearch', param).then(function(response) {\n _this.$$folders = response.folders;\n deferred.resolve(response.folders);\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof User.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the User instance\n */\n User.prototype.$omit = function() {\n var user = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n user[key] = value;\n }\n });\n return user;\n };\n\n User.prototype.toString = function() {\n return '[User ' + this.c_email + ']';\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n \n /**\n * sgFocus - A service to set the focus on the element associated to a specific string\n * @memberof SOGo.Common\n * @param {string} name - the string identifier of the element\n * @see {@link SOGo.Common.sgFocusOn}\n * @ngInject\n */\n sgFocus.$inject = ['$rootScope', '$timeout'];\n function sgFocus($rootScope, $timeout) {\n return function(name) {\n $timeout(function() {\n $rootScope.$broadcast('sgFocusOn', name);\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('sgFocus', sgFocus);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true, newcap: false */\n 'use strict';\n\n /**\n * sgAvatarImage - An avatar directive that returns un img element with either a local URL (if sg-src is specified)\n * or a Gravatar URL built from the Gravatar factory.\n * Based on http://blog.lingohub.com/2014/08/better-ux-with-angularjs-directives/.\n * @memberof SOGo.Common\n * @example:\n \n */\n function sgAvatarImage() {\n return {\n restrict: 'AE',\n replace: true,\n scope: {\n size: '@',\n email: '=sgEmail',\n src: '=sgSrc'\n },\n template: '',\n bindToController: true,\n controller: 'sgAvatarImageController',\n controllerAs: 'vm'\n };\n }\n\n /**\n * @ngInject\n */\n sgAvatarImageController.$inject = ['$scope', '$element', 'Gravatar'];\n function sgAvatarImageController($scope, $element, Gravatar) {\n var vm = this;\n\n $scope.$watch('vm.email', function(email) {\n if (email && !vm.url) {\n vm.url = Gravatar(email, vm.size);\n }\n });\n\n // If sg-src is defined, watch the expression for the URL of a local image\n if ('sg-src' in $element[0].attributes) {\n $scope.$watch('vm.src', function(src) {\n if (src) {\n vm.url = src;\n }\n });\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgAvatarImage', sgAvatarImage)\n .controller('sgAvatarImageController', sgAvatarImageController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgColorPicker - Color picker widget\n * @restrict element\n * @param {function} sgOnSelect - the function to call when clicking on a color.\n * One variable is available: color.\n * @ngInject\n * @example:\n\n \n */\n sgColorPicker.$inject = ['$parse'];\n function sgColorPicker($parse) {\n return {\n restrict: 'E',\n template: [\n '',\n ' ',\n ' color_lens',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ' ',\n ''\n ].join(''),\n replace: true,\n bindToController: true,\n controller: sgColorPickerController,\n controllerAs: '$sgColorPickerController',\n link: link\n };\n\n function link(scope, iElement, iAttr, controller) {\n // Associate callback to controller\n controller.doSelect = $parse(iElement.attr('sg-on-select'));\n }\n }\n \n /**\n * @ngInject\n */\n sgColorPickerController.$inject = ['$scope', 'sgColors'];\n function sgColorPickerController($scope, sgColors) {\n var vm = this;\n\n vm.colors = sgColors.selection;\n vm.select = function(color) {\n vm.doSelect($scope, { color: color });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgColorPicker', sgColorPicker);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgCompile - Assign an expression to a DOM element and compile it.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgCompile - the expression to compile\n * @ngInject\n * @example:\n\n
\n */\n sgCompile.$inject = ['$compile'];\n function sgCompile($compile) {\n return {\n restrict: 'A',\n link: sgCompileLink\n };\n\n function sgCompileLink(scope, element, attrs) {\n var ensureCompileRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-compile expression for changes\n return scope.$eval(attrs.sgCompile);\n },\n function(value) {\n // When the sg-compile expression changes, assign it into the current DOM\n element.html(value);\n \n // Compile the new DOM and link it to the current scope.\n // NOTE: we only compile .childNodes so that we don't get into infinite loop compiling ourselves\n $compile(element.contents())(scope);\n \n // Use un-watch feature to ensure compilation happens only once.\n ensureCompileRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgCompile', sgCompile);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEnter - A directive evaluated when the enter key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEnter() {\n var ENTER_KEY = 13;\n return function(scope, element, attrs) {\n element.bind(\"keydown keypress\", function(event) {\n if (event.which === ENTER_KEY) {\n scope.$apply(function() {\n scope.$eval(attrs.sgEnter);\n });\n event.preventDefault();\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEnter', sgEnter);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgEscape - A directive evaluated when the escape key is pressed\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgEscape() {\n var ESCAPE_KEY = 27;\n return function(scope, elem, attrs) {\n elem.bind('keydown', function(event) {\n if (event.keyCode === ESCAPE_KEY) {\n scope.$apply(attrs.sgEscape);\n }\n });\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgEscape', sgEscape);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * sgFocusOn - A directive that sets the focus on its element when the specified string is broadcasted\n * @memberof SOGo.Common\n * @see {@link SOGo.Common.sgFocus}\n * @ngInject\n * @example:\n\n \n */\n function sgFocusOn() {\n return function(scope, elem, attr) {\n scope.$on('sgFocusOn', function(e, name) {\n if (name === attr.sgFocusOn) {\n elem[0].focus();\n elem[0].select();\n }\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFocusOn', sgFocusOn);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgFolderStylesheet - Add CSS stylesheet for folder (addressbook or calendar)\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} ngModel - the object literal describing the folder (an Addressbook or Calendar instance)\n * @example:\n\n
\n
\n */\n function sgFolderStylesheet() {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '='\n },\n template: [\n ''\n ].join('')\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgFolderStylesheet', sgFolderStylesheet);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSearch - Search within a list of items\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {function} sgSearch - the function to call when performing a search.\n * Two variables are available: searchField and searchText.\n * @example:\n\n
\n \n arrow_back\n \n \n \n \n \n Subject\n sender\n \n
\n */\n sgSearchPreTransclude.$inject = ['$parse'];\n function sgSearchPreTransclude($parse) {\n return {\n restrict: 'A',\n controller: 'sgSearchController',\n controllerAs: '$sgSearchController',\n priority: 1001,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n var mdInputEl = tElement.find('md-input-container'),\n inputEl = tElement.find('input'),\n selectEl = tElement.find('md-select'),\n buttonEl = tElement.find('md-button');\n\n inputEl.attr('ng-model', '$sgSearchController.searchText');\n inputEl.attr('ng-model-options', '$sgSearchController.searchTextOptions');\n inputEl.attr('ng-change', '$sgSearchController.onChange()');\n if (selectEl) {\n selectEl.attr('ng-model', '$sgSearchController.searchField');\n selectEl.attr('ng-change', '$sgSearchController.onChange()');\n }\n if (buttonEl && buttonEl.attr('sg-search-cancel')) {\n buttonEl.attr('ng-click', buttonEl.attr('sg-search-cancel'));\n buttonEl.removeAttr('sg-search-cancel');\n }\n else {\n buttonEl = null;\n }\n\n return function postLink(scope, iElement, iAttr, controller) {\n var compiledButtonEl = iElement.find('button');\n\n // Associate callback to controller\n controller.doSearch = $parse(iElement.attr('sg-search'));\n\n // Reset the input field when cancelling the search\n if (buttonEl && compiledButtonEl) {\n compiledButtonEl.on('click', controller.cancelSearch);\n }\n };\n }\n }\n\n function sgSearch() {\n return {\n restrict: 'A',\n priority: 1000,\n transclude: true,\n compile: compile\n };\n\n function compile(tElement, tAttr) {\n return function postLink(scope, iElement, iAttr, controller, transclude) {\n transclude(function(clone) {\n iElement.append(clone);\n });\n };\n }\n }\n\n /**\n * @ngInject\n */\n sgSearchController.$inject = ['$scope', '$element'];\n function sgSearchController($scope, $element) {\n var vm = this;\n\n // Controller variables\n vm.previous = { searchText: '', searchField: '' };\n vm.searchText = null;\n\n // Model options\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n // Method to call on data changes\n vm.onChange = function() {\n if (vm.searchText !== null) {\n if (vm.searchText != vm.previous.searchText || vm.searchField != vm.previous.searchField) {\n if (vm.searchText.length > 2 || vm.searchText.length === 0) {\n // doSearch is the compiled expression of the sg-search attribute\n vm.doSearch($scope, { searchText: vm.searchText, searchField: vm.searchField });\n }\n vm.previous = { searchText: vm.searchText, searchField: vm.searchField };\n }\n }\n };\n\n // Reset input field when cancelling the search\n vm.cancelSearch = function() {\n vm.searchText = \"\";\n };\n }\n\n angular\n .module('SOGo.Common')\n .controller('sgSearchController', sgSearchController)\n .directive('sgSearch', sgSearchPreTransclude)\n .directive('sgSearch', sgSearch);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /*\n * sgSubscribe - Common subscription widget\n * @restrict attribute\n * @param {string} sgSubscribe - the folder type\n * @param {function} sgSubscribeOnSelect - the function to call when subscribing to a folder.\n * One variable is available: folderData.\n * @ngInject\n * @example:\n\n Subscribe ..\n */\n sgSubscribe.$inject = ['User'];\n function sgSubscribe(User) {\n return {\n restrict: 'A',\n scope: {\n folderType: '@sgSubscribe',\n onFolderSelect: '&sgSubscribeOnSelect'\n },\n replace: false,\n bindToController: true,\n controller: sgSubscribeDialogController,\n controllerAs: '$sgSubscribeDialogController',\n link: link\n };\n }\n\n function link(scope, element, attrs, controller) {\n var inputEl = element.find('input');\n element.on('click', controller.showDialog);\n }\n\n /**\n * @ngInject\n */\n sgSubscribeDialogController.$inject = ['$mdDialog'];\n function sgSubscribeDialogController($mdDialog) {\n var vm = this;\n vm.showDialog = function() {\n $mdDialog.show({\n templateUrl: '../Contacts/UIxContactsUserFolders',\n clickOutsideToClose: true,\n locals: {\n folderType: vm.folderType,\n onFolderSelect: vm.onFolderSelect\n },\n controller: sgSubscribeController,\n controllerAs: 'subscribe'\n });\n };\n }\n\n /**\n * @ngInject\n */\n sgSubscribeController.$inject = ['folderType', 'onFolderSelect', 'User'];\n function sgSubscribeController(folderType, onFolderSelect, User) {\n var vm = this;\n\n vm.selectedUser = null;\n vm.users = User.$users;\n\n vm.searchTextOptions = {\n updateOn: 'default blur',\n debounce: {\n default: 300,\n blur: 0\n }\n };\n\n vm.onChange = function() {\n User.$filter(vm.searchText).then(function() {\n if (vm.selectedUser) {\n // If selected user is no longer part of the matching users, unselect it\n if (_.isUndefined(_.find(User.$users, function(user) {\n return user.uid == vm.selectedUser.uid;\n }))) {\n vm.selectedUser = null;\n }\n }\n });\n };\n\n vm.selectUser = function(i) {\n if (vm.selectedUser == vm.users[i]) {\n vm.selectedUser = null;\n }\n else {\n // Fetch folders of specific type for selected user\n vm.users[i].$folders(folderType).then(function() {\n vm.selectedUser = vm.users[i];\n });\n }\n };\n\n // Callback upon subscription to a folder\n vm.selectFolder = function(folder) {\n onFolderSelect({folderData: folder});\n };\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgSubscribe', sgSubscribe);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /*\n * sgTarget - Replace target for in DOM.\n * @memberof SOGo.Common\n * @restrict attribute\n * @param {object} sgTarget - the expression to process\n * @ngInject\n * @example:\n\n
\n */\n function sgTarget() {\n return {\n priority: 1,\n restrict: 'A',\n link: sgTargetLink\n };\n\n function sgTargetLink(scope, element, attrs) {\n console.log(\"sgTargetLink...\");\n\n var ensureTargetRunsOnce = scope.$watch(\n function(scope) {\n // Watch the sg-target expression for changes\n return scope.$eval(attrs.sgTarget);\n },\n function(value) {\n \n var onAnchorClick = function (event) {\n if (this.href)\n window.open(this.href);\n if (event) {\n if (event.preventDefault)\n event.preventDefault(); // W3C DOM\n else\n event.returnValue = false; // IE\n }\n };\n //var anchors = angular.element(value)[0].getElementsByTagName('a');\n //for (var i = 0; i < anchors.length; i++) {\n //var anchor = angular.element(anchors[i]);\n // if (!anchor.href && anchor.readAttribute(\"moz-do-not-send\")) {\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // anchor.removeClassName(\"moz-txt-link-abbreviated\");\n // anchor.href = \"mailto:\" + anchors[i].innerHTML;\n // }\n // if (anchor.href.substring(0,7) == \"mailto:\") {\n // anchor.observe(\"click\", onEmailTo);\n // if (typeof onEmailAddressClick == 'function')\n // anchor.observe(\"contextmenu\", onEmailAddressClick);\n // anchor.writeAttribute(\"moz-do-not-send\", false);\n // }\n // els\n //if (!anchor.id)\n // anchor.observe(\"click\", onAnchorClick);\n //}\n\n element.html(value);\n ensureTargetRunsOnce();\n }\n );\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgTarget', sgTarget);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('SOGo.Common')\n .directive('sgTimePane', timePaneDirective);\n \n function timePaneDirective() {\n return {\n template:\n '
' +\n '
' +\n '
' +\n '{{hour.displayName}}'+\n '
' +\n '
' +\n '
' +\n '{{minute.displayName}}'+\n '
' +\n '
' +\n '
' +\n '{{minute.displayName}}' +\n '
' +\n '
',\n scope: {},\n require: ['ngModel', 'sgTimePane'],\n controller: TimePaneCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attrs, controllers) {\n var ngModelCtrl = controllers[0];\n var sgTimePaneCtrl = controllers[1];\n console.log(element);\n var timePaneElement = element;\n sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl, timePaneElement);\n }\n };\n }\n\n /** Class applied to the selected hour or minute cell/. */\n //var SELECTED_TIME_CLASS = 'md-calendar-selected-date';\n //var SELECTED_TIME_CLASS1 = 'md-raised';\n var SELECTED_TIME_CLASS2 = 'md-primary';\n\n /** Class applied to the focused hour or minute cell/. */\n var FOCUSED_TIME_CLASS = 'md-focus';\n\n /** Next identifier for calendar instance. */\n var nextTimePaneUniqueId = 0;\n\n function TimePaneCtrl($element, $attrs, $scope, $animate, $q, $mdConstant,\n $mdTheming, $$mdDateUtil, $mdDateLocale, $mdInkRipple, $mdUtil) {\n var m;\n this.$scope = $scope;\n this.$element = $element;\n this.timePaneElement = $element[0].querySelector('.sg-time-pane');\n this.$animate = $animate;\n this.$q = $q;\n this.$mdInkRipple = $mdInkRipple;\n this.$mdUtil = $mdUtil;\n this.keyCode = $mdConstant.KEY_CODE;\n this.dateUtil = $$mdDateUtil;\n this.id = nextTimePaneUniqueId++;\n this.ngModelCtrl = null;\n this.selectedTime = null;\n this.displayTime = null;\n this.isInitialized = false;\n\n $scope.hours=[];\n $scope.hours[0]=[];\n $scope.hours[0][0]=[];\n $scope.hours[0][1]=[];\n $scope.hours[1]=[];\n $scope.hours[1][0]=[];\n $scope.hours[1][1]=[];\n for(var i=0; i<6; i++){\n $scope.hours[0][0][i] = {id:'tp-'+this.id+'-hour-'+i, displayName:i<10?\"0\"+i:\"\"+i, selected:false};\n $scope.hours[0][1][i] = {id:'tp-'+this.id+'-hour-'+(i+6),displayName:(i+6)<10?\"0\"+(i+6):\"\"+(i+6), selected:false};\n $scope.hours[1][0][i] = {id:'tp-'+this.id+'-hour-'+(i+12), displayName:\"\"+(i+12), selected:false};\n $scope.hours[1][1][i] = {id:'tp-'+this.id+'-hour-'+(i+18), displayName:\"\"+(i+18), selected:false};\n }\n\n $scope.min5=[];\n $scope.min5[0]=[];\n $scope.min5[1]=[];\n for(i=0; i<6; i++){\n m=i*5;\n $scope.min5[0][i] = {id:'tp-'+this.id+'-minute5-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n $scope.min5[1][i] = {id:'tp-'+this.id+'-minute5-'+(m+30), displayName:\":\"+(m+30), selected:false};\n }\n\n $scope.min1=[];\n for(i=0; i<12; i++){\n $scope.min1[i]=[];\n for(var ii=0; ii<5; ii++){\n m=i*5 + ii;\n $scope.min1[i][ii] = {id:'tp-'+this.id+'-minute-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n }\n }\n\n $scope.show5min=true;\n $scope.getToggleBtnLbl = function() {\n return ($scope.is5min()) ? '>>' : '<<';\n };\n $scope.toggleManual5min = function() {\n $scope.manual5min = !$scope.is5min();\n };\n $scope.is5min=function(){\n if($scope.manual5min === true || $scope.manual5min === false) {\n return $scope.manual5min;\n }\n else {\n return $scope.show5min;\n }\n };\n\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n var self = this;\n\n this.hourClickHandler = function(displayVal) {\n var updated = new Date(self.displayTime).setHours(Number(displayVal));\n self.setNgModelValue(updated, 'hours');\n };\n $scope.hourClickHandler = this.hourClickHandler;\n\n this.minuteClickHandler = function(displayVal) {\n //remove leading ':'\n var val = displayVal.substr(1);\n var updated = new Date(self.displayTime).setMinutes(Number(val));\n self.setNgModelValue(updated, 'minutes');\n };\n $scope.minuteClickHandler = this.minuteClickHandler;\n\n this.attachTimePaneEventListeners();\n }\n TimePaneCtrl.$inject = [\"$element\", \"$attrs\", \"$scope\", \"$animate\", \"$q\", \"$mdConstant\", \"$mdTheming\", \"$$mdDateUtil\", \"$mdDateLocale\", \"$mdInkRipple\", \"$mdUtil\"];\n\n TimePaneCtrl.prototype.configureNgModel = function(ngModelCtrl, sgTimePaneCtrl, timePaneElement) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.changeSelectedTime(self.ngModelCtrl.$viewValue, sgTimePaneCtrl, timePaneElement);\n };\n };\n\n /**\n * Change the selected date in the time (ngModel value has already been changed).\n */\n TimePaneCtrl.prototype.changeSelectedTime = function(date, sgTimePaneCtrl, timePaneElement) {\n var self = this;\n var previousSelectedTime = this.selectedTime;\n this.selectedTime = new Date(date);\n this.changeDisplayTime(date).then(function() {\n // Remove the selected class from the previously selected date, if any.\n if (previousSelectedTime) {\n var prevH = previousSelectedTime.getHours();\n var prevHCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+prevH);\n if (prevHCell) {\n prevHCell.classList.remove(SELECTED_TIME_CLASS2);\n prevHCell.setAttribute('aria-selected', 'false');\n }\n var prevM = previousSelectedTime.getMinutes();\n var prevMCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+prevM);\n if (prevMCell) {\n prevMCell.classList.remove(SELECTED_TIME_CLASS2);\n prevMCell.setAttribute('aria-selected', 'false');\n }\n var prevM5Cell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+prevM);\n if (prevM5Cell) {\n prevM5Cell.classList.remove(SELECTED_TIME_CLASS2);\n prevM5Cell.setAttribute('aria-selected', 'false');\n }\n }\n\n // Apply the select class to the new selected date if it is set.\n if (date) {\n var d = new Date(date);\n var newH = d.getHours();\n var mCell, hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(SELECTED_TIME_CLASS2);\n hCell.setAttribute('aria-selected', 'true');\n }\n var newM = d.getMinutes();\n if (newM % 5 === 0) {\n sgTimePaneCtrl.$scope.show5min = true;\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS2);\n mCell.setAttribute('aria-selected', 'true');\n }\n }\n else {\n sgTimePaneCtrl.$scope.show5min = false;\n }\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS2);\n mCell.setAttribute('aria-selected', 'true');\n }\n\n }\n });\n };\n\n TimePaneCtrl.prototype.changeDisplayTime = function(date) {\n var d = new Date(date);\n if (!this.isInitialized) {\n this.buildInitialTimePaneDisplay();\n return this.$q.when();\n }\n if (!this.dateUtil.isValidDate(d)) {\n return this.$q.when();\n }\n\n this.displayTime = d;\n\n return this.$q.when();\n };\n TimePaneCtrl.prototype.buildInitialTimePaneDisplay = function() {\n this.displayTime = this.selectedTime || this.today;\n this.isInitialized = true;\n };\n\n TimePaneCtrl.prototype.attachTimePaneEventListeners = function() {\n // Keyboard interaction.\n this.$element.on('keydown', angular.bind(this, this.handleKeyEvent));\n };\n\n /*** User input handling ***/\n\n /**\n * Handles a key event in the calendar with the appropriate action. The action will either\n * be to select the focused date or to navigate to focus a new date.\n * @param {KeyboardEvent} event\n */\n TimePaneCtrl.prototype.handleKeyEvent = function(event) {\n var self = this;\n this.$scope.$apply(function() {\n // Capture escape and emit back up so that a wrapping component\n // (such as a time-picker) can decide to close.\n if (event.which == self.keyCode.ESCAPE || event.which == self.keyCode.TAB) {\n self.$scope.$emit('md-time-pane-close');\n\n if (event.which == self.keyCode.TAB) {\n event.preventDefault();\n }\n\n return;\n }\n\n // Remaining key events fall into two categories: selection and navigation.\n // Start by checking if this is a selection event.\n if (event.which === self.keyCode.ENTER) {\n self.setNgModelValue(self.displayTime, 'enter');\n event.preventDefault();\n return;\n }\n\n // Selection isn't occuring, so the key event is either navigation or nothing.\n /*var date = self.getFocusDateFromKeyEvent(event);\n if (date) {\n event.preventDefault();\n event.stopPropagation();\n\n // Since this is a keyboard interaction, actually give the newly focused date keyboard\n // focus after the been brought into view.\n self.changeDisplayTime(date).then(function () {\n self.focus(date);\n });\n }*/\n });\n };\n\n /**\n * Sets the ng-model value for the time pane and emits a change event.\n * @param {Date} date\n */\n TimePaneCtrl.prototype.setNgModelValue = function(date, mode) {\n this.$scope.$emit('sg-time-pane-change', {date:date, changed:mode});\n this.ngModelCtrl.$setViewValue(date);\n this.ngModelCtrl.$render();\n };\n\n /**\n * Focus the cell corresponding to the given date.\n * @param {Date=} opt_date\n */\n TimePaneCtrl.prototype.focus = function(opt_date, sgTimePaneCtrl) {\n var date = opt_date || this.selectedTime || this.today;\n\n var previousFocus = this.timePaneElement.querySelector('.md-focus');\n if (previousFocus) {\n previousFocus.classList.remove(FOCUSED_TIME_CLASS);\n }\n\n if (date) {\n var newH = date.getHours();\n var hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(FOCUSED_TIME_CLASS);\n hCell.focus();\n }\n }\n };\n})();\n\n(function() {\n 'use strict';\n \n angular.module('SOGo.Common')\n .directive('sgTimepicker', timePickerDirective);\n\n /**\n * @ngdoc directive\n * @name mdTimepicker\n * @module material.components.timepicker\n *\n * @param {Date} ng-model The component's model. Expects a JavaScript Date object.\n * @param {expression=} ng-change Expression evaluated when the model value changes.\n * @param {boolean=} disabled Whether the timepicker is disabled.\n *\n * @description\n * `` is a component used to select a single time.\n * For information on how to configure internationalization for the time picker,\n * see `$mdTimeLocaleProvider`.\n *\n * @usage\n * \n * \n * \n *\n */\n function timePickerDirective() {\n return {\n template:\n // Buttons are not in the tab order because users can open the hours pane via keyboard\n // interaction on the text input, and multiple tab stops for one component (picker)\n // may be confusing.\n '' +\n //'' +\n 'access_time' +\n '' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n // This pane will be detached from here and re-attached to the document body.\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '
' +\n '
',\n require: ['ngModel', 'sgTimepicker'],\n scope: {\n placeholder: '@mdPlaceholder'\n },\n controller: TimePickerCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attr, controllers) {\n var ngModelCtrl = controllers[0];\n var mdTimePickerCtrl = controllers[1];\n\n mdTimePickerCtrl.configureNgModel(ngModelCtrl);\n }\n };\n }\n\n /** Additional offset for the input's `size` attribute, which is updated based on its content. */\n var EXTRA_INPUT_SIZE = 3;\n\n /** Class applied to the container if the date is invalid. */\n var INVALID_CLASS = 'sg-timepicker-invalid';\n\n /** Default time in ms to debounce input event by. */\n var DEFAULT_DEBOUNCE_INTERVAL = 500;\n\n /**\n * Controller for sg-timepicker.\n *\n * ngInject @constructor\n */\n function TimePickerCtrl($scope, $element, $attrs, $compile, $timeout, $mdConstant, $mdTheming,\n $mdUtil, $mdDateLocale, $$mdDateUtil, $$rAF) {\n /** @final */\n this.$compile = $compile;\n\n /** @final */\n this.$timeout = $timeout;\n\n /** @final */\n this.dateLocale = $mdDateLocale;\n\n /** @final */\n this.dateUtil = $$mdDateUtil;\n\n /** @final */\n this.$mdConstant = $mdConstant;\n\n /* @final */\n this.$mdUtil = $mdUtil;\n\n /** @final */\n this.$$rAF = $$rAF;\n\n /** @type {!angular.NgModelController} */\n this.ngModelCtrl = null;\n\n /** @type {HTMLInputElement} */\n this.inputElement = $element[0].querySelector('input');\n\n /** @type {HTMLElement} */\n this.inputContainer = $element[0].querySelector('.sg-timepicker-input-container');\n\n /** @type {HTMLElement} Floating time pane. */\n this.timePane = $element[0].querySelector('.sg-timepicker-time-pane');\n\n /** @type {HTMLElement} Time icon button. */\n this.timeButton = $element[0].querySelector('.sg-timepicker-button');\n\n /**\n * Element covering everything but the input in the top of the floating calendar pane.\n * @type {HTMLElement}\n */\n this.inputMask = $element[0].querySelector('.sg-timepicker-input-mask-opaque');\n\n /** @final {!angular.JQLite} */\n this.$element = $element;\n\n /** @final {!angular.Attributes} */\n this.$attrs = $attrs;\n\n /** @final {!angular.Scope} */\n this.$scope = $scope;\n\n /** @type {Date} */\n this.date = null;\n\n /** @type {boolean} */\n this.isFocused = false;\n\n /** @type {boolean} */\n this.isDisabled = false;\n this.setDisabled($element[0].disabled || angular.isString($attrs.disabled));\n\n /** @type {boolean} Whether the date-picker's calendar pane is open. */\n this.isTimeOpen = false;\n\n /**\n * Element from which the calendar pane was opened. Keep track of this so that we can return\n * focus to it when the pane is closed.\n * @type {HTMLElement}\n */\n this.timePaneOpenedFrom = null;\n\n this.timePane.id = 'sg-time-pane' + $mdUtil.nextUid();\n\n $mdTheming($element);\n\n /** Pre-bound click handler is saved so that the event listener can be removed. */\n this.bodyClickHandler = angular.bind(this, this.handleBodyClick);\n\n // Unless the user specifies so, the datepicker should not be a tab stop.\n // This is necessary because ngAria might add a tabindex to anything with an ng-model\n // (based on whether or not the user has turned that particular feature on/off).\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n this.installPropertyInterceptors();\n this.attachChangeListeners();\n this.attachInteractionListeners();\n\n var self = this;\n $scope.$on('$destroy', function() {\n self.detachTimePane();\n });\n }\n\n TimePickerCtrl.$inject = [\"$scope\", \"$element\", \"$attrs\", \"$compile\", \"$timeout\", \"$mdConstant\", \"$mdTheming\",\n \"$mdUtil\", \"$mdDateLocale\", \"$$mdDateUtil\", \"$$rAF\"];\n\n /**\n * Sets up the controller's reference to ngModelController.\n * @param {!angular.NgModelController} ngModelCtrl\n */\n TimePickerCtrl.prototype.configureNgModel = function(ngModelCtrl) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.time = self.ngModelCtrl.$viewValue;\n self.inputElement.value = self.formatTime(self.time);\n self.resizeInputElement();\n };\n };\n\n TimePickerCtrl.prototype.formatTime = function(time) {\n var t = new Date(time);\n if(t) {\n var h= t.getHours();\n var m= t.getMinutes();\n return (h<10?('0'+ h) : h) + ':' + (m<10?'0'+ m : m);\n }\n else return '';\n };\n /**\n * Attach event listeners for both the text input and the md-time.\n * Events are used instead of ng-model so that updates don't infinitely update the other\n * on a change. This should also be more performant than using a $watch.\n */\n TimePickerCtrl.prototype.attachChangeListeners = function() {\n var self = this;\n\n self.$scope.$on('sg-time-pane-change', function(event, data) {\n var time = new Date(data.date);\n self.ngModelCtrl.$setViewValue(time);\n self.time = time;\n self.inputElement.value = self.formatTime(self.time);\n if(data.changed == 'minutes') {\n self.closeTimePane();\n }\n self.resizeInputElement();\n self.inputContainer.classList.remove(INVALID_CLASS);\n });\n\n var ngElement = angular.element(self.inputElement);\n ngElement.on('input', angular.bind(self, self.resizeInputElement));\n ngElement.on('input', self.$mdUtil.debounce(self.handleInputEvent,\n DEFAULT_DEBOUNCE_INTERVAL, self));\n };\n\n /** Attach event listeners for user interaction. */\n TimePickerCtrl.prototype.attachInteractionListeners = function() {\n var self = this;\n var $scope = this.$scope;\n var keyCodes = this.$mdConstant.KEY_CODE;\n\n // Add event listener through angular so that we can triggerHandler in unit tests.\n angular.element(self.inputElement).on('keydown', function(event) {\n if (event.altKey && event.keyCode == keyCodes.DOWN_ARROW) {\n self.openTimePane(event);\n $scope.$digest();\n }\n });\n\n $scope.$on('md-time-close', function() {\n self.closeTimePane();\n });\n };\n\n /**\n * Capture properties set to the time-picker and imperitively handle internal changes.\n * This is done to avoid setting up additional $watches.\n */\n TimePickerCtrl.prototype.installPropertyInterceptors = function() {\n var self = this;\n\n if (this.$attrs.ngDisabled) {\n // The expression is to be evaluated against the directive element's scope and not\n // the directive's isolate scope.\n this.$element.scope().$watch(this.$attrs.ngDisabled, function(isDisabled) {\n self.setDisabled(isDisabled);\n });\n }\n\n Object.defineProperty(this, 'placeholder', {\n get: function() { return self.inputElement.placeholder; },\n set: function(value) { self.inputElement.placeholder = value || ''; }\n });\n };\n\n /**\n * Sets whether the date-picker is disabled.\n * @param {boolean} isDisabled\n */\n TimePickerCtrl.prototype.setDisabled = function(isDisabled) {\n this.isDisabled = isDisabled;\n this.inputElement.disabled = isDisabled;\n this.timeButton.disabled = isDisabled;\n };\n\n /**\n * Resizes the input element based on the size of its content.\n */\n TimePickerCtrl.prototype.resizeInputElement = function() {\n this.inputElement.size = this.inputElement.value.length + EXTRA_INPUT_SIZE;\n };\n\n /**\n * Sets the model value if the user input is a valid time.\n * Adds an invalid class to the input element if not.\n */\n TimePickerCtrl.prototype.handleInputEvent = function(self) {\n var inputString = this.inputElement.value;\n var arr = inputString.split(':');\n if(arr.length < 2) {return;}\n var h=Number(arr[0]);\n var m=Number(arr[1]);\n var newVal = new Date(this.time);\n if (h && h>=0 && h<=23 && m && m>=0 && m<= 59 && angular.isDate(newVal)) {\n newVal.setHours(h);\n newVal.setMinutes(m);\n this.ngModelCtrl.$setViewValue(newVal);\n this.time = newVal;\n this.inputContainer.classList.remove(INVALID_CLASS);\n }\n else {\n // If there's an input string, it's an invalid time.\n this.inputContainer.classList.toggle(INVALID_CLASS, inputString);\n }\n };\n\n /** Position and attach the floating calendar to the document. */\n TimePickerCtrl.prototype.attachTimePane = function() {\n var timePane = this.timePane;\n this.$element.addClass('sg-timepicker-open');\n\n var elementRect = this.inputContainer.getBoundingClientRect();\n var bodyRect = document.body.getBoundingClientRect();\n\n timePane.style.left = (elementRect.left - bodyRect.left) + 'px';\n timePane.style.top = (elementRect.top - bodyRect.top) + 'px';\n document.body.appendChild(this.timePane);\n\n // The top of the calendar pane is a transparent box that shows the text input underneath.\n // Since the pane is flowing, though, the page underneath the pane *adjacent* to the input is\n // also shown unless we cover it up. The inputMask does this by filling up the remaining space\n // based on the width of the input.\n this.inputMask.style.left = elementRect.width + 'px';\n\n // Add CSS class after one frame to trigger open animation.\n this.$$rAF(function() {\n timePane.classList.add('md-pane-open');\n });\n };\n\n /** Detach the floating time pane from the document. */\n TimePickerCtrl.prototype.detachTimePane = function() {\n this.$element.removeClass('sg-timepicker-open');\n this.timePane.classList.remove('md-pane-open');\n\n if (this.timePane.parentNode) {\n // Use native DOM removal because we do not want any of the angular state of this element\n // to be disposed.\n this.timePane.parentNode.removeChild(this.timePane);\n }\n };\n\n /**\n * Open the floating time pane.\n * @param {Event} event\n */\n TimePickerCtrl.prototype.openTimePane = function(event) {\n if (!this.isTimeOpen && !this.isDisabled) {\n this.isTimeOpen = true;\n this.timePaneOpenedFrom = event.target;\n this.attachTimePane();\n this.focusTime();\n\n // Because the time pane is attached directly to the body, it is possible that the\n // rest of the component (input, etc) is in a different scrolling container, such as\n // an md-content. This means that, if the container is scrolled, the pane would remain\n // stationary. To remedy this, we disable scrolling while the time pane is open, which\n // also matches the native behavior for things like `',\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=404';\n //return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=retro';\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 scope: {\n size: '@',\n email: '=sgEmail',\n src: '=sgSrc'\n },\n template: '',\n link: link,\n bindToController: true,\n controller: 'sgAvatarImageController',\n controllerAs: 'vm'\n };\n }\n\n function link(scope, element, attrs, controller) {\n var el = element[0],\n className = el.className,\n imgElement = element.find('img'),\n img = imgElement[0];\n\n if (attrs.size) {\n imgElement.attr('width', attrs.size);\n imgElement.attr('height', attrs.size);\n }\n\n imgElement.bind('error', function() {\n // Error while loading external link; insert a generic avatar\n controller.insertGenericAvatar(img);\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 var img = $element.find('img')[0];\n if (!email && !vm.genericAvatar) {\n // If no email is specified, insert a generic avatar\n vm.insertGenericAvatar(img);\n }\n else if (email && !vm.url) {\n if (vm.genericAvatar) {\n // Remove generic avatar and restore visibility of image\n vm.genericAvatar.parentNode.removeChild(vm.genericAvatar);\n delete vm.genericAvatar;\n img.classList.remove('ng-hide');\n }\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 vm.insertGenericAvatar = function(img) {\n var avatar;\n\n if (!vm.genericAvatar) {\n avatar = document.createElement('md-icon');\n avatar.className = 'material-icons icon-person';\n img.classList.add('ng-hide');\n vm.genericAvatar = img.parentNode.insertBefore(avatar, img);\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 'use strict';\n\n /**\n * sgPlaceholder - A directive for dynamic placeholder\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n \n */\n function sgPlaceholder() {\n return {\n restrict: 'A',\n scope: {\n placeholder: '=sgPlaceholder'\n },\n link: function(scope, elem, attr) {\n scope.$watch('placeholder',function() {\n elem[0].placeholder = scope.placeholder;\n });\n }\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgPlaceholder', sgPlaceholder);\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","(function() {\n 'use strict';\n\n angular\n .module('SOGo.Common')\n .directive('sgTimePane', timePaneDirective);\n \n function timePaneDirective() {\n return {\n template: [\n '
',\n '
',\n '
',\n '
',\n ' {{hour.displayName}}',\n '
',\n '
',\n '
',\n '
',\n '
',\n '
',\n ' {{minute.displayName}}',\n '
',\n '
',\n '
',\n '
',\n '
',\n ' {{minute.displayName}}',\n '
',\n '
',\n '
',\n ' ',\n '
',\n '
'\n ].join(''),\n scope: {},\n require: ['ngModel', 'sgTimePane'],\n controller: TimePaneCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attrs, controllers) {\n var ngModelCtrl = controllers[0];\n var sgTimePaneCtrl = controllers[1];\n console.log(element);\n var timePaneElement = element;\n sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl, timePaneElement);\n }\n };\n }\n\n /** Class applied to the selected hour or minute cell/. */\n var SELECTED_TIME_CLASS = 'md-bg';\n\n /** Class applied to the focused hour or minute cell/. */\n var FOCUSED_TIME_CLASS = 'md-focus';\n\n /** Next identifier for calendar instance. */\n var nextTimePaneUniqueId = 0;\n\n function TimePaneCtrl($element, $attrs, $scope, $animate, $q, $mdConstant,\n $mdTheming, $$mdDateUtil, $mdDateLocale, $mdInkRipple, $mdUtil) {\n var m;\n this.$scope = $scope;\n this.$element = $element;\n this.timePaneElement = $element[0].querySelector('.sg-time-pane');\n this.$animate = $animate;\n this.$q = $q;\n this.$mdInkRipple = $mdInkRipple;\n this.$mdUtil = $mdUtil;\n this.keyCode = $mdConstant.KEY_CODE;\n this.dateUtil = $$mdDateUtil;\n this.id = nextTimePaneUniqueId++;\n this.ngModelCtrl = null;\n this.selectedTime = null;\n this.displayTime = null;\n this.isInitialized = false;\n\n $scope.hours=[];\n $scope.hours[0]=[];\n $scope.hours[0][0]=[];\n $scope.hours[0][1]=[];\n $scope.hours[1]=[];\n $scope.hours[1][0]=[];\n $scope.hours[1][1]=[];\n for(var i=0; i<6; i++){\n $scope.hours[0][0][i] = {id:'tp-'+this.id+'-hour-'+i, displayName:i<10?\"0\"+i:\"\"+i, selected:false};\n $scope.hours[0][1][i] = {id:'tp-'+this.id+'-hour-'+(i+6),displayName:(i+6)<10?\"0\"+(i+6):\"\"+(i+6), selected:false};\n $scope.hours[1][0][i] = {id:'tp-'+this.id+'-hour-'+(i+12), displayName:\"\"+(i+12), selected:false};\n $scope.hours[1][1][i] = {id:'tp-'+this.id+'-hour-'+(i+18), displayName:\"\"+(i+18), selected:false};\n }\n\n $scope.min5=[];\n $scope.min5[0]=[];\n $scope.min5[1]=[];\n for(i=0; i<6; i++){\n m=i*5;\n $scope.min5[0][i] = {id:'tp-'+this.id+'-minute5-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n $scope.min5[1][i] = {id:'tp-'+this.id+'-minute5-'+(m+30), displayName:\":\"+(m+30), selected:false};\n }\n\n $scope.min1=[];\n for(i=0; i<12; i++){\n $scope.min1[i]=[];\n for(var ii=0; ii<5; ii++){\n m=i*5 + ii;\n $scope.min1[i][ii] = {id:'tp-'+this.id+'-minute-'+m, displayName:m<10?\":0\"+m:\":\"+m, selected:true};\n }\n }\n\n $scope.show5min=true;\n $scope.getToggleBtnLbl = function() {\n return ($scope.is5min()) ? '>>' : '<<';\n };\n $scope.toggleManual5min = function() {\n $scope.manual5min = !$scope.is5min();\n };\n $scope.is5min=function(){\n if($scope.manual5min === true || $scope.manual5min === false) {\n return $scope.manual5min;\n }\n else {\n return $scope.show5min;\n }\n };\n\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n var self = this;\n\n this.hourClickHandler = function(displayVal) {\n var updated = new Date(self.displayTime).setHours(Number(displayVal));\n self.setNgModelValue(updated, 'hours');\n };\n $scope.hourClickHandler = this.hourClickHandler;\n\n this.minuteClickHandler = function(displayVal) {\n //remove leading ':'\n var val = displayVal.substr(1);\n var updated = new Date(self.displayTime).setMinutes(Number(val));\n self.setNgModelValue(updated, 'minutes');\n };\n $scope.minuteClickHandler = this.minuteClickHandler;\n\n this.attachTimePaneEventListeners();\n }\n TimePaneCtrl.$inject = [\"$element\", \"$attrs\", \"$scope\", \"$animate\", \"$q\", \"$mdConstant\", \"$mdTheming\", \"$$mdDateUtil\", \"$mdDateLocale\", \"$mdInkRipple\", \"$mdUtil\"];\n\n TimePaneCtrl.prototype.configureNgModel = function(ngModelCtrl, sgTimePaneCtrl, timePaneElement) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.changeSelectedTime(self.ngModelCtrl.$viewValue, sgTimePaneCtrl, timePaneElement);\n };\n };\n\n /**\n * Change the selected date in the time (ngModel value has already been changed).\n */\n TimePaneCtrl.prototype.changeSelectedTime = function(date, sgTimePaneCtrl, timePaneElement) {\n var self = this;\n var previousSelectedTime = this.selectedTime;\n this.selectedTime = new Date(date);\n this.changeDisplayTime(date).then(function() {\n // Remove the selected class from the previously selected date, if any.\n if (previousSelectedTime) {\n var prevH = previousSelectedTime.getHours();\n var prevHCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+prevH);\n if (prevHCell) {\n prevHCell.classList.remove(SELECTED_TIME_CLASS);\n prevHCell.setAttribute('aria-selected', 'false');\n }\n var prevM = previousSelectedTime.getMinutes();\n var prevMCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+prevM);\n if (prevMCell) {\n prevMCell.classList.remove(SELECTED_TIME_CLASS);\n prevMCell.setAttribute('aria-selected', 'false');\n }\n var prevM5Cell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+prevM);\n if (prevM5Cell) {\n prevM5Cell.classList.remove(SELECTED_TIME_CLASS);\n prevM5Cell.setAttribute('aria-selected', 'false');\n }\n }\n\n // Apply the select class to the new selected date if it is set.\n if (date) {\n var d = new Date(date);\n var newH = d.getHours();\n var mCell, hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(SELECTED_TIME_CLASS);\n hCell.setAttribute('aria-selected', 'true');\n }\n var newM = d.getMinutes();\n if (newM % 5 === 0) {\n sgTimePaneCtrl.$scope.show5min = true;\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute5-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS);\n mCell.setAttribute('aria-selected', 'true');\n }\n }\n else {\n sgTimePaneCtrl.$scope.show5min = false;\n }\n mCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-minute-'+newM);\n if (mCell) {\n mCell.classList.add(SELECTED_TIME_CLASS);\n mCell.setAttribute('aria-selected', 'true');\n }\n\n }\n });\n };\n\n TimePaneCtrl.prototype.changeDisplayTime = function(date) {\n var d = new Date(date);\n if (!this.isInitialized) {\n this.buildInitialTimePaneDisplay();\n return this.$q.when();\n }\n if (!this.dateUtil.isValidDate(d)) {\n return this.$q.when();\n }\n\n this.displayTime = d;\n\n return this.$q.when();\n };\n TimePaneCtrl.prototype.buildInitialTimePaneDisplay = function() {\n this.displayTime = this.selectedTime || this.today;\n this.isInitialized = true;\n };\n\n TimePaneCtrl.prototype.attachTimePaneEventListeners = function() {\n // Keyboard interaction.\n this.$element.on('keydown', angular.bind(this, this.handleKeyEvent));\n };\n\n /*** User input handling ***/\n\n /**\n * Handles a key event in the calendar with the appropriate action. The action will either\n * be to select the focused date or to navigate to focus a new date.\n * @param {KeyboardEvent} event\n */\n TimePaneCtrl.prototype.handleKeyEvent = function(event) {\n var self = this;\n this.$scope.$apply(function() {\n // Capture escape and emit back up so that a wrapping component\n // (such as a time-picker) can decide to close.\n if (event.which == self.keyCode.ESCAPE || event.which == self.keyCode.TAB) {\n self.$scope.$emit('md-time-pane-close');\n\n if (event.which == self.keyCode.TAB) {\n event.preventDefault();\n }\n\n return;\n }\n\n // Remaining key events fall into two categories: selection and navigation.\n // Start by checking if this is a selection event.\n if (event.which === self.keyCode.ENTER) {\n self.setNgModelValue(self.displayTime, 'enter');\n event.preventDefault();\n return;\n }\n\n // Selection isn't occuring, so the key event is either navigation or nothing.\n /*var date = self.getFocusDateFromKeyEvent(event);\n if (date) {\n event.preventDefault();\n event.stopPropagation();\n\n // Since this is a keyboard interaction, actually give the newly focused date keyboard\n // focus after the been brought into view.\n self.changeDisplayTime(date).then(function () {\n self.focus(date);\n });\n }*/\n });\n };\n\n /**\n * Sets the ng-model value for the time pane and emits a change event.\n * @param {Date} date\n */\n TimePaneCtrl.prototype.setNgModelValue = function(date, mode) {\n this.$scope.$emit('sg-time-pane-change', {date:date, changed:mode});\n this.ngModelCtrl.$setViewValue(date);\n this.ngModelCtrl.$render();\n };\n\n /**\n * Focus the cell corresponding to the given date.\n * @param {Date=} opt_date\n */\n TimePaneCtrl.prototype.focus = function(opt_date, sgTimePaneCtrl) {\n var date = opt_date || this.selectedTime || this.today;\n\n var previousFocus = this.timePaneElement.querySelector('.md-focus');\n if (previousFocus) {\n previousFocus.classList.remove(FOCUSED_TIME_CLASS);\n }\n\n if (date) {\n var newH = date.getHours();\n var hCell = document.getElementById('tp-'+sgTimePaneCtrl.id+'-hour-'+newH);\n if (hCell) {\n hCell.classList.add(FOCUSED_TIME_CLASS);\n hCell.focus();\n }\n }\n };\n})();\n\n(function() {\n 'use strict';\n \n angular.module('SOGo.Common')\n .directive('sgTimepicker', timePickerDirective);\n\n /**\n * @ngdoc directive\n * @name mdTimepicker\n * @module material.components.timepicker\n *\n * @param {Date} ng-model The component's model. Expects a JavaScript Date object.\n * @param {expression=} ng-change Expression evaluated when the model value changes.\n * @param {boolean=} disabled Whether the timepicker is disabled.\n *\n * @description\n * `` is a component used to select a single time.\n * For information on how to configure internationalization for the time picker,\n * see `$mdTimeLocaleProvider`.\n *\n * @usage\n * \n * \n * \n *\n */\n function timePickerDirective() {\n return {\n template: [\n // Buttons are not in the tab order because users can open the hours pane via keyboard\n // interaction on the text input, and multiple tab stops for one component (picker)\n // may be confusing.\n '',\n ' access_time',\n '',\n '
',\n ' ',\n ' ',\n '
',\n '
',\n '
',\n // This pane will be detached from here and re-attached to the document body.\n '
',\n '
',\n '
',\n '
',\n '
',\n ' ',\n '
',\n '
'\n ].join(''),\n require: ['ngModel', 'sgTimepicker'],\n scope: {\n placeholder: '@mdPlaceholder'\n },\n controller: TimePickerCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n link: function(scope, element, attr, controllers) {\n var ngModelCtrl = controllers[0];\n var mdTimePickerCtrl = controllers[1];\n\n mdTimePickerCtrl.configureNgModel(ngModelCtrl);\n }\n };\n }\n\n /** Additional offset for the input's `size` attribute, which is updated based on its content. */\n var EXTRA_INPUT_SIZE = 3;\n\n /** Class applied to the container if the date is invalid. */\n var INVALID_CLASS = 'sg-timepicker-invalid';\n\n /** Default time in ms to debounce input event by. */\n var DEFAULT_DEBOUNCE_INTERVAL = 500;\n\n /**\n * Controller for sg-timepicker.\n *\n * ngInject @constructor\n */\n function TimePickerCtrl($scope, $element, $attrs, $compile, $timeout, $mdConstant, $mdTheming,\n $mdUtil, $mdDateLocale, $$mdDateUtil, $$rAF) {\n /** @final */\n this.$compile = $compile;\n\n /** @final */\n this.$timeout = $timeout;\n\n /** @final */\n this.dateLocale = $mdDateLocale;\n\n /** @final */\n this.dateUtil = $$mdDateUtil;\n\n /** @final */\n this.$mdConstant = $mdConstant;\n\n /* @final */\n this.$mdUtil = $mdUtil;\n\n /** @final */\n this.$$rAF = $$rAF;\n\n /** @type {!angular.NgModelController} */\n this.ngModelCtrl = null;\n\n /** @type {HTMLInputElement} */\n this.inputElement = $element[0].querySelector('input');\n\n /** @type {HTMLElement} */\n this.inputContainer = $element[0].querySelector('.sg-timepicker-input-container');\n\n /** @type {HTMLElement} Floating time pane. */\n this.timePane = $element[0].querySelector('.sg-timepicker-time-pane');\n\n /** @type {HTMLElement} Time icon button. */\n this.timeButton = $element[0].querySelector('.sg-timepicker-button');\n\n /**\n * Element covering everything but the input in the top of the floating calendar pane.\n * @type {HTMLElement}\n */\n this.inputMask = $element[0].querySelector('.sg-timepicker-input-mask-opaque');\n\n /** @final {!angular.JQLite} */\n this.$element = $element;\n\n /** @final {!angular.Attributes} */\n this.$attrs = $attrs;\n\n /** @final {!angular.Scope} */\n this.$scope = $scope;\n\n /** @type {Date} */\n this.date = null;\n\n /** @type {boolean} */\n this.isFocused = false;\n\n /** @type {boolean} */\n this.isDisabled = false;\n this.setDisabled($element[0].disabled || angular.isString($attrs.disabled));\n\n /** @type {boolean} Whether the date-picker's calendar pane is open. */\n this.isTimeOpen = false;\n\n /**\n * Element from which the calendar pane was opened. Keep track of this so that we can return\n * focus to it when the pane is closed.\n * @type {HTMLElement}\n */\n this.timePaneOpenedFrom = null;\n\n this.timePane.id = 'sg-time-pane' + $mdUtil.nextUid();\n\n $mdTheming($element);\n\n /** Pre-bound click handler is saved so that the event listener can be removed. */\n this.bodyClickHandler = angular.bind(this, this.handleBodyClick);\n\n // Unless the user specifies so, the datepicker should not be a tab stop.\n // This is necessary because ngAria might add a tabindex to anything with an ng-model\n // (based on whether or not the user has turned that particular feature on/off).\n if (!$attrs.tabindex) {\n $element.attr('tabindex', '-1');\n }\n\n this.installPropertyInterceptors();\n this.attachChangeListeners();\n this.attachInteractionListeners();\n\n var self = this;\n $scope.$on('$destroy', function() {\n self.detachTimePane();\n });\n }\n\n TimePickerCtrl.$inject = [\"$scope\", \"$element\", \"$attrs\", \"$compile\", \"$timeout\", \"$mdConstant\", \"$mdTheming\",\n \"$mdUtil\", \"$mdDateLocale\", \"$$mdDateUtil\", \"$$rAF\"];\n\n /**\n * Sets up the controller's reference to ngModelController.\n * @param {!angular.NgModelController} ngModelCtrl\n */\n TimePickerCtrl.prototype.configureNgModel = function(ngModelCtrl) {\n this.ngModelCtrl = ngModelCtrl;\n var self = this;\n ngModelCtrl.$render = function() {\n self.time = self.ngModelCtrl.$viewValue;\n self.inputElement.value = self.formatTime(self.time);\n self.resizeInputElement();\n };\n };\n\n TimePickerCtrl.prototype.formatTime = function(time) {\n var t = new Date(time);\n if(t) {\n var h= t.getHours();\n var m= t.getMinutes();\n return (h<10?('0'+ h) : h) + ':' + (m<10?'0'+ m : m);\n }\n else return '';\n };\n /**\n * Attach event listeners for both the text input and the md-time.\n * Events are used instead of ng-model so that updates don't infinitely update the other\n * on a change. This should also be more performant than using a $watch.\n */\n TimePickerCtrl.prototype.attachChangeListeners = function() {\n var self = this;\n\n self.$scope.$on('sg-time-pane-change', function(event, data) {\n var time = new Date(data.date);\n self.ngModelCtrl.$setViewValue(time);\n self.time = time;\n self.inputElement.value = self.formatTime(self.time);\n if(data.changed == 'minutes') {\n self.closeTimePane();\n }\n self.resizeInputElement();\n self.inputContainer.classList.remove(INVALID_CLASS);\n });\n\n var ngElement = angular.element(self.inputElement);\n ngElement.on('input', angular.bind(self, self.resizeInputElement));\n ngElement.on('input', self.$mdUtil.debounce(self.handleInputEvent,\n DEFAULT_DEBOUNCE_INTERVAL, self));\n };\n\n /** Attach event listeners for user interaction. */\n TimePickerCtrl.prototype.attachInteractionListeners = function() {\n var self = this;\n var $scope = this.$scope;\n var keyCodes = this.$mdConstant.KEY_CODE;\n\n // Add event listener through angular so that we can triggerHandler in unit tests.\n angular.element(self.inputElement).on('keydown', function(event) {\n if (event.altKey && event.keyCode == keyCodes.DOWN_ARROW) {\n self.openTimePane(event);\n $scope.$digest();\n }\n });\n\n $scope.$on('md-time-close', function() {\n self.closeTimePane();\n });\n };\n\n /**\n * Capture properties set to the time-picker and imperitively handle internal changes.\n * This is done to avoid setting up additional $watches.\n */\n TimePickerCtrl.prototype.installPropertyInterceptors = function() {\n var self = this;\n\n if (this.$attrs.ngDisabled) {\n // The expression is to be evaluated against the directive element's scope and not\n // the directive's isolate scope.\n this.$element.scope().$watch(this.$attrs.ngDisabled, function(isDisabled) {\n self.setDisabled(isDisabled);\n });\n }\n\n Object.defineProperty(this, 'placeholder', {\n get: function() { return self.inputElement.placeholder; },\n set: function(value) { self.inputElement.placeholder = value || ''; }\n });\n };\n\n /**\n * Sets whether the date-picker is disabled.\n * @param {boolean} isDisabled\n */\n TimePickerCtrl.prototype.setDisabled = function(isDisabled) {\n this.isDisabled = isDisabled;\n this.inputElement.disabled = isDisabled;\n this.timeButton.disabled = isDisabled;\n };\n\n /**\n * Resizes the input element based on the size of its content.\n */\n TimePickerCtrl.prototype.resizeInputElement = function() {\n this.inputElement.size = this.inputElement.value.length + EXTRA_INPUT_SIZE;\n };\n\n /**\n * Sets the model value if the user input is a valid time.\n * Adds an invalid class to the input element if not.\n */\n TimePickerCtrl.prototype.handleInputEvent = function(self) {\n var inputString = this.inputElement.value;\n var arr = inputString.split(':');\n if(arr.length < 2) {return;}\n var h=Number(arr[0]);\n var m=Number(arr[1]);\n var newVal = new Date(this.time);\n if (h && h>=0 && h<=23 && m && m>=0 && m<= 59 && angular.isDate(newVal)) {\n newVal.setHours(h);\n newVal.setMinutes(m);\n this.ngModelCtrl.$setViewValue(newVal);\n this.time = newVal;\n this.inputContainer.classList.remove(INVALID_CLASS);\n }\n else {\n // If there's an input string, it's an invalid time.\n this.inputContainer.classList.toggle(INVALID_CLASS, inputString);\n }\n };\n\n /** Position and attach the floating calendar to the document. */\n TimePickerCtrl.prototype.attachTimePane = function() {\n var timePane = this.timePane;\n this.$element.addClass('sg-timepicker-open');\n this.$element.find('button').addClass('md-primary');\n\n var elementRect = this.inputContainer.getBoundingClientRect();\n var bodyRect = document.body.getBoundingClientRect();\n\n timePane.style.left = (elementRect.left - bodyRect.left) + 'px';\n timePane.style.top = (elementRect.top - bodyRect.top) + 'px';\n document.body.appendChild(this.timePane);\n\n // The top of the calendar pane is a transparent box that shows the text input underneath.\n // Since the pane is flowing, though, the page underneath the pane *adjacent* to the input is\n // also shown unless we cover it up. The inputMask does this by filling up the remaining space\n // based on the width of the input.\n this.inputMask.style.left = elementRect.width + 'px';\n\n // Add CSS class after one frame to trigger open animation.\n this.$$rAF(function() {\n timePane.classList.add('md-pane-open');\n });\n };\n\n /** Detach the floating time pane from the document. */\n TimePickerCtrl.prototype.detachTimePane = function() {\n this.$element.removeClass('sg-timepicker-open');\n this.$element.find('button').removeClass('md-primary');\n this.timePane.classList.remove('md-pane-open');\n\n if (this.timePane.parentNode) {\n // Use native DOM removal because we do not want any of the angular state of this element\n // to be disposed.\n this.timePane.parentNode.removeChild(this.timePane);\n }\n };\n\n /**\n * Open the floating time pane.\n * @param {Event} event\n */\n TimePickerCtrl.prototype.openTimePane = function(event) {\n if (!this.isTimeOpen && !this.isDisabled) {\n this.isTimeOpen = true;\n this.timePaneOpenedFrom = event.target;\n this.attachTimePane();\n //this.focusTime();\n\n // Because the time pane is attached directly to the body, it is possible that the\n // rest of the component (input, etc) is in a different scrolling container, such as\n // an md-content. This means that, if the container is scrolled, the pane would remain\n // stationary. To remedy this, we disable scrolling while the time pane is open, which\n // also matches the native behavior for things like `',"
",' '+l("No file chosen")+"",' {{ uploader.queue[0].file.name }}'," "," ",'
',' '+l("Upload")+"","
",""].join(""),controller:CardsImportDialogController,locals:{folder:folder}}),CardsImportDialogController.$inject=["scope","$mdDialog","folder"]}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){function LinksDialogController($mdDialog,addressbook){function close(){$mdDialog.hide()}this.addressbook=addressbook,this.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}}),LinksDialogController.$inject=["$mdDialog","addressbook"]}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name),AddressBook.$subscribe(addressbookData.owner,addressbookData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=AddressBook,vm.select=select,vm.newAddressbook=newAddressbook,vm.edit=edit,vm.revertEditing=revertEditing,vm.save=save,vm.confirmDelete=confirmDelete,vm.importCards=importCards,vm.exportCards=exportCards,vm.showLinks=showLinks,vm.share=share,vm.subscribeToFolder=subscribeToFolder}AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","$mdToast","FileUploader","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)}(),function(){"use strict";function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addBirthday(){vm.card.birthday=new Date}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){return AddressBook.selectedFolder.$filter($query,{dry:!0,excludeLists:!0},excludedCards),AddressBook.selectedFolder.$cards}function save(form){form.$valid&&vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);0>i?AddressBook.selectedFolder.$reload():AddressBook.selectedFolder.cards[i]=angular.copy(vm.card),$state.go("app.addressbook.card.view",{cardId:vm.card.id})})["catch"](function(err){console.log(err)})}function close(){$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id}).then(function(){vm.card=null,delete AddressBook.selectedFolder.selectedCard})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset(),vm.card.isNew?(vm.card=null,delete AddressBook.selectedFolder.selectedCard,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})):$state.go("app.addressbook.card.view",{cardId:vm.card.id})}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id}),vm.card=null,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}function viewRawSource($event){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){function CardRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:CardRawSourceDialogController}),CardRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.card=stateCard,vm.currentFolder=AddressBook.selectedFolder,vm.allEmailTypes=Card.$EMAIL_TYPES,vm.allTelTypes=Card.$TEL_TYPES,vm.allUrlTypes=Card.$URL_TYPES,vm.allAddressTypes=Card.$ADDRESS_TYPES,vm.categories={},vm.userFilterResults=[],vm.addOrgUnit=addOrgUnit,vm.addBirthday=addBirthday,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.close=close,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.exportCard=exportCard,vm.viewRawSource=viewRawSource}CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",CardController)}(),function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];return data.street&&lines.push(data.street),data.street2&&lines.push(data.street2),data.locality&&locality_region.push(data.locality),data.region&&locality_region.push(data.region),locality_region.length>0&&lines.push(locality_region.join(", ")),data.country&&lines.push(data.country),data.postalcode&&lines.push(data.postalcode),lines.join("
")}}],template:'
'}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)}(); +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("app",{url:"/addressbooks","abstract":!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:stateAddressbooks}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:stateAddressbook}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:stateNewCard}}).state("app.addressbook.card",{url:"/:cardId","abstract":!0,views:{card:{template:""}},resolve:{stateCard:stateCard}}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),$urlRouterProvider.otherwise("/addressbooks/personal")}function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}function stateAddressbook($stateParams,AddressBook){return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData}function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});return stateAddressbook.selectedCard=!0,card}function stateCard($stateParams,stateAddressbook){return stateAddressbook.selectedCard=$stateParams.cardId,stateAddressbook.$getCard($stateParams.cardId)}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}angular.module("SOGo.ContactsUI",["ngSanitize","ui.router","angularFileUpload","ck","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).config(configure).run(runBlock),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAddressbooks.$inject=["AddressBook"],stateAddressbook.$inject=["$stateParams","AddressBook"],stateNewCard.$inject=["$stateParams","stateAddressbook","Card"],stateCard.$inject=["$stateParams","stateAddressbook"],runBlock.$inject=["$rootScope"]}(),function(){"use strict";function AddressBookController($scope,$q,$state,$timeout,$mdDialog,focus,Account,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function toggleCardSelection($event,card){card.selected=!card.selected,$event.preventDefault(),$event.stopPropagation()}function newComponent(ev){function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide(),$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ",'
'," "," "+l("Contact")," "," "," "+l("List")," ","
","
","
"].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController}),ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"]}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=!1})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards),delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function copySelectedCards(folder){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$copyCards(selectedCards,folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=!0})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return AddressBook.$query.sort==field}function cancelSearch(){vm.mode.search=!1,vm.selectedFolder.$filter("")}function newMessage($event,recipients){Account.$findAll().then(function(accounts){var account=_.filter(accounts,function(o){return 0===o.id?o:void 0})[0];account.$getMailboxes().then(function(mailboxes){account.$newMessage().then(function(message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"../Mail/UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:accounts,stateMessage:message,stateRecipients:recipients}})})})})}function newMessageWithRecipient($event,recipient,fn){var recipients=[{full:fn+" <"+recipient+">"}];vm.newMessage($event,recipients)}function newMessageWithSelectedCards($event){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected}),promises=[],recipients=[];_.each(selectedCards,function(card){"vcard"==card.c_component&&card.c_mail.length?recipients.push({full:card.c_cn+" <"+card.c_mail+">"}):"vlist"==card.c_component&&(angular.isDefined(card.refs)&&card.refs.length?_.each(card.refs,function(ref){ref.email.length&&recipients.push({full:ref.c_cn+" <"+ref.email+">"})}):promises.push(vm.selectedFolder.$getCard(card.id).then(function(card){return card.$futureCardData.then(function(data){_.each(data.refs,function(ref){ref.email.length&&recipients.push({full:ref.c_cn+" <"+ref.email+">"})})})})))}),$q.all(promises).then(function(){recipients.length&&vm.newMessage($event,recipients)})}var vm=this;AddressBook.selectedFolder=stateAddressbook,vm.service=AddressBook,vm.selectedFolder=stateAddressbook,vm.selectCard=selectCard,vm.toggleCardSelection=toggleCardSelection,vm.newComponent=newComponent,vm.notSelectedComponent=notSelectedComponent,vm.unselectCards=unselectCards,vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards,vm.saveSelectedCards=saveSelectedCards,vm.copySelectedCards=copySelectedCards,vm.selectAll=selectAll,vm.sort=sort,vm.sortedBy=sortedBy,vm.cancelSearch=cancelSearch,vm.newMessage=newMessage,vm.newMessageWithSelectedCards=newMessageWithSelectedCards,vm.newMessageWithRecipient=newMessageWithRecipient,vm.mode={search:!1}}AddressBookController.$inject=["$scope","$q","$state","$timeout","$mdDialog","sgFocus","Account","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)}(),function(){"use strict";function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,$mdToast,FileUploader,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){function select(folder){vm.editMode=!1,AddressBook.$query.value="",$state.go("app.addressbook",{addressbookId:folder.id})}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:!0,isRemote:!1,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){folder.isRemote||(vm.editMode=folder.id,vm.originalAddressbook=angular.extend({},folder.$omit()),focus("addressBookName_"+folder.id))}function revertEditing(folder){folder.name=vm.originalAddressbook.name,vm.editMode=!1}function save(folder){var name=folder.name;name&&name.length>0&&name!=vm.originalAddressbook.name&&folder.$rename(name).then(function(data){vm.editMode=!1},function(data,status){Dialog.alert(l("Warning"),data)})}function confirmDelete(){vm.service.selectedFolder.isSubscription?vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null,$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0}?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){return vm.service.selectedFolder=null,!0})["catch"](function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}function importCards($event,folder){function CardsImportDialogController(scope,$mdDialog,folder){scope.uploader=new FileUploader({url:ApplicationBaseURL+"/"+folder.id+"/import",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2)),$mdDialog.hide(),$mdToast.show($mdToast.simple().content(l("A total of %{0} cards were imported in the addressbook.",response.imported)).position("top right").hideDelay(3e3)),AddressBook.selectedFolder.$reload()},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2))},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),scope.close=function(){$mdDialog.hide()},scope.upload=function(){scope.uploader.uploadAll()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:['',' ','
',' import_export','
','
'+l("Import Cards")+"
","
",' ',' close'," ","
","
"," ",'
','
'," "+l("Select a vCard or LDIF file.")+"",' ",' ',"
",' '+l("No file chosen")+"",' {{ uploader.queue[0].file.name }}',"
","
",'
',' '+l("Upload")+"","
","
"].join(""),controller:CardsImportDialogController,locals:{folder:folder}}),CardsImportDialogController.$inject=["scope","$mdDialog","folder"]}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){function LinksDialogController($mdDialog,addressbook){function close(){$mdDialog.hide()}this.addressbook=addressbook,this.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}}),LinksDialogController.$inject=["$mdDialog","addressbook"]}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name),AddressBook.$subscribe(addressbookData.owner,addressbookData.name)["catch"](function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}var vm=this;vm.activeUser=Settings.activeUser,vm.service=AddressBook,vm.select=select,vm.newAddressbook=newAddressbook,vm.edit=edit,vm.revertEditing=revertEditing,vm.save=save,vm.confirmDelete=confirmDelete,vm.importCards=importCards,vm.exportCards=exportCards,vm.showLinks=showLinks,vm.share=share,vm.subscribeToFolder=subscribeToFolder}AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","$mdToast","FileUploader","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)}(),function(){"use strict";function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addBirthday(){vm.card.birthday=new Date}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){return AddressBook.selectedFolder.$filter($query,{dry:!0,excludeLists:!0},excludedCards),AddressBook.selectedFolder.$cards}function save(form){form.$valid&&vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);0>i?AddressBook.selectedFolder.$reload():AddressBook.selectedFolder.cards[i]=angular.copy(vm.card),$state.go("app.addressbook.card.view",{cardId:vm.card.id})})["catch"](function(err){console.log(err)})}function close(){$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id}).then(function(){vm.card=null,delete AddressBook.selectedFolder.selectedCard})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset(),vm.card.isNew?(vm.card=null,delete AddressBook.selectedFolder.selectedCard,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})):$state.go("app.addressbook.card.view",{cardId:vm.card.id})}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id}),vm.card=null,$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}function viewRawSource($event){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){function CardRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:CardRawSourceDialogController}),CardRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this;vm.card=stateCard,vm.currentFolder=AddressBook.selectedFolder,vm.allEmailTypes=Card.$EMAIL_TYPES,vm.allTelTypes=Card.$TEL_TYPES,vm.allUrlTypes=Card.$URL_TYPES,vm.allAddressTypes=Card.$ADDRESS_TYPES,vm.categories={},vm.userFilterResults=[],vm.addOrgUnit=addOrgUnit,vm.addBirthday=addBirthday,vm.addEmail=addEmail,vm.addPhone=addPhone,vm.addUrl=addUrl,vm.addAddress=addAddress,vm.addMember=addMember,vm.userFilter=userFilter,vm.save=save,vm.close=close,vm.reset=reset,vm.cancel=cancel,vm.confirmDelete=confirmDelete,vm.exportCard=exportCard,vm.viewRawSource=viewRawSource}CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",CardController)}(),function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];return data.street&&lines.push(data.street),data.street2&&lines.push(data.street2),data.locality&&locality_region.push(data.locality),data.region&&locality_region.push(data.region),locality_region.length>0&&lines.push(locality_region.join(", ")),data.country&&lines.push(data.country),data.postalcode&&lines.push(data.postalcode),lines.join("
")}}],template:'
'}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)}(); //# sourceMappingURL=Contacts.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.js.map b/UI/WebServerResources/js/Contacts.js.map index 24ab62e4d..890005c7a 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","$q","$state","$timeout","$mdDialog","focus","Account","Dialog","Settings","selectCard","go","id","newComponent","ev","ComponentDialogController","scope","create","type","hide","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","vm","selectedFolder","notSelectedComponent","currentCard","selected","unselectCards","_","each","cards","confirmDeleteSelectedCards","confirm","then","selectedCards","filter","$deleteCards","data","status","saveSelectedCards","selectedUIDs","pluck","location","href","ApplicationBaseURL","copySelectedCards","folder","$copyCards","alert","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","newMessage","$event","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","newMessageWithRecipient","recipient","fn","full","newMessageWithSelectedCards","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","this","AddressBooksController","$mdToast","FileUploader","User","select","editMode","value","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","$rename","confirmDelete","service","isSubscription","$delete","importCards","CardsImportDialogController","uploader","onProgressItem","item","progress","debug","onSuccessItem","response","headers","JSON","stringify","undefined","simple","content","imported","position","hideDelay","$reload","onCancelItem","onErrorItem","close","upload","uploadAll","exportCards","showLinks","LinksDialogController","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addBirthday","birthday","Date","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","exportCard","currentFolder","viewRawSource","$$resource","post","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"CAGA,WACE,YAUA,SAASA,WAAUC,eAAgBC,oBACjCD,eACGE,MAAM,OACLC,IAAK,gBACLC,YAAU,EACVC,OACEC,cACEC,YAAa,wBACbC,WAAY,yBACZC,aAAc,QAGlBC,SACEC,kBAAmBA,qBAGtBT,MAAM,mBACLC,IAAK,kBACLE,OACEO,aACEL,YAAa,cACbC,WAAY,wBACZC,aAAc,gBAGlBC,SACEG,iBAAkBA,oBAGrBX,MAAM,uBACLC,IAAK,mCACLE,OACES,MACEP,YAAa,2BACbC,WAAY,iBACZC,aAAc,WAGlBC,SACEK,UAAWC,gBAGdd,MAAM,wBACLC,IAAK,WACLC,YAAU,EACVC,OACES,MACEG,SAAU,eAGdP,SACEK,UAAWA,aAGdb,MAAM,6BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,yBACbC,WAAY,iBACZC,aAAc,aAInBP,MAAM,+BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,2BACbC,WAAY,iBACZC,aAAc,aAMtBR,mBAAmBkB,UAAU,0BAO/B,QAASR,mBAAkBS,aACzB,MAAOA,aAAYC,SAASC,OAAOC,gBAOrC,QAASV,kBAAiBW,aAAcJ,aACtC,MAAOA,aAAYK,MAAMD,aAAaE,eAAeC,uBAOvD,QAASX,cAAaQ,aAAcX,iBAAkBe,MACpD,GAAIC,KAAM,IAAML,aAAaM,YACzBhB,KAAO,GAAIc,OAAOG,IAAKP,aAAaE,cAAeM,YAAaH,KAEpE,OADAhB,kBAAiBoB,cAAe,EACzBnB,KAOT,QAASC,WAAUS,aAAcX,kBAE/B,MADAA,kBAAiBoB,aAAeT,aAAaU,OACtCrB,iBAAiBsB,SAASX,aAAaU,QAOhD,QAASE,UAASC,YAChBA,WAAWC,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,WACrEC,QAAQC,MAAML,MAAOC,QAASC,SAAUC,aAjI5CG,QAAQC,OAAO,mBAAoB,aAAc,YAAa,oBAAqB,KAAM,cAAe,qBAAsB,kBAC3HC,OAAOhD,WACPiD,IAAIZ,UAKPrC,UAAUkD,SAAW,iBAAkB,sBAmFvCtC,kBAAkBsC,SAAW,eAQ7BpC,iBAAiBoC,SAAW,eAAgB,eAQ5CjC,aAAaiC,SAAW,eAAgB,mBAAoB,QAW5DlC,UAAUkC,SAAW,eAAgB,oBASrCb,SAASa,SAAW,iBClItB,WACE,YAMA,SAASC,uBAAsBC,OAAQC,GAAIC,OAAQC,SAAUC,UAAWC,MAAOC,QAAS7B,KAAMR,YAAasC,OAAQC,SAAUhD,kBAAmBE,kBAsB9I,QAAS+C,YAAW9C,MAClBuC,OAAOQ,GAAG,6BAA8BnC,cAAeb,iBAAiBiD,GAAI5B,OAAQpB,KAAKgD,KAG3F,QAASC,cAAaC,IA8BpB,QAASC,2BAA0BC,MAAOX,UAAWF,OAAQ3B,eAC3DwC,MAAMC,OAAS,SAASC,MACtBb,UAAUc,OACVhB,OAAOQ,GAAG,uBAAyBnC,cAAeA,cAAeI,YAAasC,QAhClFb,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAaX,GACbY,qBAAqB,EACrBC,eAAe,EACf5D,UACE,0BAA4B6D,EAAE,oBAAsB,KACpD,wBACA,4BACA,gDACA,WAAaA,EAAE,WACf,qBACA,gDACA,WAAaA,EAAE,QACf,qBACA,aACA,yBACA,gBACAC,KAAK,IACPC,QACEtD,cAAeuD,GAAGC,eAAepB,IAEnCtD,WAAYyD,4BAMdA,0BAA0BhB,SAAW,QAAS,YAAa,SAAU,iBASvE,QAASkC,sBAAqBC,YAAahB,MACzC,MAAQgB,cAAeA,YAAYpD,aAAeoC,OAASgB,YAAYC,SAGzE,QAASC,iBACPC,EAAEC,KAAKP,GAAGC,eAAeO,MAAO,SAAS3E,MAAQA,KAAKuE,UAAW,IAGnE,QAASK,8BACPhC,OAAOiC,QAAQb,EAAE,WACFA,EAAE,2DACdc,KAAK,WAEJ,GAAIC,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,UACnFJ,IAAGC,eAAea,aAAaF,qBACxBZ,IAAGC,eAAejD,cACvB,SAAS+D,KAAMC,WAKvB,QAASC,qBACP,GAAIL,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,WAC/Ec,aAAeZ,EAAEa,MAAMP,cAAe,KAC1CvE,QAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGC,eAAepB,GAAK,eAAiBqC,aAAapB,KAAK,SAG9G,QAASyB,mBAAkBC,QACzB,GAAIZ,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,UACnFJ,IAAGC,eAAewB,WAAWb,cAAeY,QAAQb,KAAK,aAEtD,SAAShD,OACVc,OAAOiD,MAAM7B,EAAE,SAAUlC,SAI7B,QAASgE,aACPrB,EAAEC,KAAKP,GAAGC,eAAeO,MAAO,SAAS3E,MACvCA,KAAKuE,UAAW,IAIpB,QAASwB,MAAKC,OACZ7B,GAAGC,eAAe6B,QAAQ,IAAMF,KAAMC,QAGxC,QAASE,UAASF,OAChB,MAAO1F,aAAY6F,OAAOJ,MAAQC,MAGpC,QAASI,gBACPjC,GAAGkC,KAAKC,QAAS,EACjBnC,GAAGC,eAAe6B,QAAQ,IAG5B,QAASM,YAAWC,OAAQC,YAC1B9D,QAAQpC,WAAWuE,KAAK,SAAS4B,UAC/B,GAAIC,SAAUlC,EAAEO,OAAO0B,SAAU,SAASE,GACxC,MAAa,KAATA,EAAE5D,GACG4D,EADT,SAEC,EAIHD,SAAQE,gBAAgB/B,KAAK,SAASgC,WACpCH,QAAQI,cAAcjC,KAAK,SAASkC,SAClCvE,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACftE,YAAa,wBACbC,WAAY,0BACZC,aAAc,SACduE,QACE+C,cAAeP,SACfQ,aAAcF,QACdG,gBAAiBV,oBAQ7B,QAASW,yBAAwBZ,OAAQa,UAAWC,IAClD,GAAIb,cAAec,KAAMD,GAAK,KAAOD,UAAY,KACjDlD,IAAGoC,WAAWC,OAAQC,YAGxB,QAASe,6BAA4BhB,QACnC,GAAIzB,eAAgBN,EAAEO,OAAOb,GAAGC,eAAeO,MAAO,SAAS3E,MAAQ,MAAOA,MAAKuE,WAC/EkD,YAAehB,aAEnBhC,GAAEC,KAAKK,cAAe,SAAS/E,MACL,SAApBA,KAAKkB,aAA0BlB,KAAK0H,OAAOC,OAC7ClB,WAAWmB,MAAML,KAAMvH,KAAK6H,KAAO,KAAO7H,KAAK0H,OAAS,MAE7B,SAApB1H,KAAKkB,cAERa,QAAQ+F,UAAU9H,KAAK+H,OAAS/H,KAAK+H,KAAKJ,OAC5ClD,EAAEC,KAAK1E,KAAK+H,KAAM,SAASC,KACrBA,IAAIC,MAAMN,QACZlB,WAAWmB,MAAML,KAAMS,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,QAIzDR,SAASG,KAAKzD,GAAGC,eAAe/C,SAASrB,KAAKgD,IAAI8B,KAAK,SAAS9E,MAC9D,MAAOA,MAAKkI,gBAAgBpD,KAAK,SAASI,MACxCT,EAAEC,KAAKQ,KAAK6C,KAAM,SAASC,KACrBA,IAAIC,MAAMN,QACZlB,WAAWmB,MAAML,KAAMS,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,gBAQnE3F,GAAG6F,IAAIV,UAAU3C,KAAK,WAChB2B,WAAWkB,QACbxD,GAAGoC,WAAWC,OAAQC,cAxL5B,GAAItC,IAAKiE,IAET9H,aAAY8D,eAAiBrE,iBAE7BoE,GAAGC,eAAiBrE,iBACpBoE,GAAGrB,WAAaA,WAChBqB,GAAGlB,aAAeA,aAClBkB,GAAGE,qBAAuBA,qBAC1BF,GAAGK,cAAgBA,cACnBL,GAAGS,2BAA6BA,2BAChCT,GAAGiB,kBAAoBA,kBACvBjB,GAAGuB,kBAAoBA,kBACvBvB,GAAG2B,UAAYA,UACf3B,GAAG4B,KAAOA,KACV5B,GAAG+B,SAAWA,SACd/B,GAAGiC,aAAeA,aAClBjC,GAAGoC,WAAaA,WAChBpC,GAAGqD,4BAA8BA,4BACjCrD,GAAGiD,wBAA0BA,wBAC7BjD,GAAGkC,MAASC,QAAQ,GArBtBlE,sBAAsBD,SAAW,SAAU,KAAM,SAAU,WAAY,YAAa,UAAW,UAAW,OAAQ,cAAe,SAAU,aAAc,oBAAqB,oBA+L9KJ,QACGC,OAAO,mBACPtC,WAAW,wBAAyB0C,0BCvMzC,WACE,YAMA,SAASiG,wBAAuB9F,OAAQF,OAAQd,WAAYb,aAAc8B,SAAUC,UAAW6F,SAAUC,aAAc7F,MAAO5B,KAAMR,YAAasC,OAAQC,SAAU2F,KAAM3I,mBAiBvK,QAAS4I,QAAO9C,QACdxB,GAAGuE,UAAW,EACdpI,YAAY6F,OAAOwC,MAAQ,GAC3BpG,OAAOQ,GAAG,mBAAoBnC,cAAe+E,OAAO3C,KAGtD,QAAS4F,kBACPhG,OAAOiG,OAAO7E,EAAE,mBACFA,EAAE,4BACbc,KAAK,SAASgE,MACb,GAAIhJ,aAAc,GAAIQ,cAElBwI,KAAMA,KACNC,YAAY,EACZC,UAAU,EACVC,MAAOC,WAGX5I,aAAY6I,KAAKrJ,eAIvB,QAASsJ,MAAKzD,QACPA,OAAOqD,WACV7E,GAAGuE,SAAW/C,OAAO3C,GACrBmB,GAAGkF,oBAAsBtH,QAAQuH,UAAW3D,OAAO4D,SACnD7G,MAAM,mBAAqBiD,OAAO3C,KAItC,QAASwG,eAAc7D,QACrBA,OAAOmD,KAAO3E,GAAGkF,oBAAoBP,KACrC3E,GAAGuE,UAAW,EAGhB,QAASe,MAAK9D,QACZ,GAAImD,MAAOnD,OAAOmD,IACdA,OAAQA,KAAKnB,OAAS,GAAKmB,MAAQ3E,GAAGkF,oBAAoBP,MAC5DnD,OAAO+D,QAAQZ,MACZhE,KAAK,SAASI,MACbf,GAAGuE,UAAW,GACb,SAASxD,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,WAAYkB,QAKnC,QAASyE,iBACHxF,GAAGyF,QAAQxF,eAAeyF,eAE5B1F,GAAGyF,QAAQxF,eAAe0F,UACvBhF,KAAK,WACJX,GAAGyF,QAAQxF,eAAiB,KAC5B7B,OAAOQ,GAAG,mBAAqBnC,cAAe,cAC7C,SAASsE,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,0DACAG,GAAGyF,QAAQxF,eAAe0E,MAC5B9E,EAAEkB,KAAKpD,UAIxBc,OAAOiC,QAAQb,EAAE,WAAYA,EAAE,iEACAG,GAAGyF,QAAQxF,eAAe0E,OACtDhE,KAAK,WACJ,MAAOX,IAAGyF,QAAQxF,eAAe0F,YAElChF,KAAK,WAEJ,MADAX,IAAGyF,QAAQxF,eAAiB,MACrB,IAPXxB,SASS,SAASsC,KAAMC,QACpBvC,OAAOiD,MAAM7B,EAAE,0DACAG,GAAGyF,QAAQxF,eAAe0E,MAC5B9E,EAAEkB,KAAKpD,UAK5B,QAASiI,aAAYvD,OAAQb,QA+C3B,QAASqE,6BAA4B5G,MAAOX,UAAWkD,QAErDvC,MAAM6G,SAAW,GAAI1B,eACnBlJ,IAAKoG,mBAAqB,IAAME,OAAO3C,GAAK,UAC5CkH,eAAgB,SAASC,KAAMC,UAC7BvI,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAMD,WAErCE,cAAe,SAASH,KAAMI,SAAUpF,OAAQqF,SAC9C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,aAAeI,KAAKC,UAAUH,SAAUI,OAAW,IACtFlI,UAAUc,OACV+E,SAAS9E,KACP8E,SAASsC,SACNC,QAAQ7G,EAAE,0DAA2DuG,SAASO,WAC9EC,SAAS,aACTC,UAAU,MACf1K,YAAY8D,eAAe6G,WAE7BC,aAAc,SAASf,KAAMI,SAAUpF,OAAQqF,SAC7C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,YAAcI,KAAKC,UAAUH,SAAUI,OAAW,KAEvFQ,YAAa,SAAShB,KAAMI,SAAUpF,OAAQqF,SAC5C3I,QAAQwI,MAAMF,MAAOtI,QAAQwI,MAAM,WAAaI,KAAKC,UAAUH,SAAUI,OAAW,OAIxFvH,MAAMgI,MAAQ,WACZ3I,UAAUc,QAEZH,MAAMiI,OAAS,WACbjI,MAAM6G,SAASqB,aA3EnB7I,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACf5D,UACE,kDAAoD6D,EAAE,gBAAkB,KACxE,mCACA,qCACA,mFACA,8BACA,oCAAsCA,EAAE,gBAAkB,SAC1D,eACA,8DACA,6DACA,qBACA,aACA,kBACA,wBACA,4BACA,uDACA,iBAAmBA,EAAE,gCAAkC,UACvD,qDACA,mBAAqBA,EAAE,eAAiB,UACxC,mBACA,mHACA,eACA,oDAAsDA,EAAE,kBAAoB,UAC5E,2FACA,aACA,yBACA,6BACA,+EAAiFA,EAAE,UAAY,eAC/F,WACA,gBACAC,KAAK,IACPvE,WAAYsK,4BACZ9F,QACEyB,OAAQA,UAOZqE,4BAA4B7H,SAAW,QAAS,YAAa,UAmC/D,QAASoJ,eACP/K,OAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGyF,QAAQxF,eAAepB,GAAK,gBAGnF,QAASwI,WAAU1L,aAiBjB,QAAS2L,uBAAsBhJ,UAAW3C,aAKxC,QAASsL,SACP3I,UAAUc,OAJZ6E,KAAKtI,YAAcA,YACnBsI,KAAKgD,MAAQA,MAnBf3I,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCE,qBAAqB,EACrBC,eAAe,EACftE,YAAaK,YAAYkD,GAAK,SAC9BtD,WAAY+L,sBACZ9L,aAAc,QACduE,QACEpE,YAAaA,eAOjB2L,sBAAsBtJ,SAAW,YAAa,eAYhD,QAASuJ,OAAM5L,aAEbA,YAAY6L,KAAKC,SAAS9G,KAAK,WAE7BrC,UAAUe,MACR/D,YAAaK,YAAYkD,GAAK,gBAC9BtD,WAAY,gBACZC,aAAc,MACdmE,qBAAqB,EACrBC,eAAe,EACfG,QACE2H,aAAc/L,YAAY6L,KAAKG,MAC/BtD,KAAMA,KACN7C,OAAQ7F,iBAShB,QAASiM,mBAAkBC,iBACzBnK,QAAQwI,MAAM,qBAAuB2B,gBAAgB/C,MAAQ+C,gBAAgBlD,MAC7ExI,YAAY2L,WAAWD,gBAAgB/C,MAAO+C,gBAAgBlD,MAA9DxI,SAA0E,SAAS4E,MACjFtC,OAAOiD,MAAM7B,EAAE,WAAYA,EAAE,yCAxOjC,GAAIG,IAAKiE,IAETjE,IAAG+H,WAAarJ,SAASqJ,WACzB/H,GAAGyF,QAAUtJ,YACb6D,GAAGsE,OAASA,OACZtE,GAAGyE,eAAiBA,eACpBzE,GAAGiF,KAAOA,KACVjF,GAAGqF,cAAgBA,cACnBrF,GAAGsF,KAAOA,KACVtF,GAAGwF,cAAgBA,cACnBxF,GAAG4F,YAAcA,YACjB5F,GAAGoH,YAAcA,YACjBpH,GAAGqH,UAAYA,UACfrH,GAAGuH,MAAQA,MACXvH,GAAG4H,kBAAoBA,kBAhBzB1D,uBAAuBlG,SAAW,SAAU,SAAU,aAAc,eAAgB,WAAY,YAAa,WAAY,eAAgB,UAAW,OAAQ,cAAe,SAAU,aAAc,OAAQ,qBA+O3MJ,QACGC,OAAO,mBACPtC,WAAW,yBAA0B2I,2BCvP1C,WACE,YAOA,SAAS8D,gBAAe9J,OAAQG,SAAUC,UAAWnC,YAAaQ,KAAM8B,OAAQF,MAAOH,OAAQ7B,aAAcT,WA4B3G,QAASmM,cACP,GAAIC,GAAIlI,GAAGnE,KAAKsM,YAAY,GAC5B5J,OAAM,WAAa2J,GAErB,QAASE,eACPpI,GAAGnE,KAAKwM,SAAW,GAAIC,MAEzB,QAASC,YACP,GAAIL,GAAIlI,GAAGnE,KAAK2M,UAAU,GAC1BjK,OAAM,SAAW2J,GAEnB,QAASO,YACP,GAAIP,GAAIlI,GAAGnE,KAAK6M,UAAU,GAC1BnK,OAAM,SAAW2J,GAEnB,QAASS,UACP,GAAIT,GAAIlI,GAAGnE,KAAK+M,QAAQ,GAAI,GAC5BrK,OAAM,OAAS2J,GAEjB,QAASW,cACP,GAAIX,GAAIlI,GAAGnE,KAAKiN,YAAY,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxDvK,OAAM,WAAa2J,GAErB,QAASa,aACP,GAAIb,GAAIlI,GAAGnE,KAAKmN,WAAW,GAC3BzK,OAAM,OAAS2J,GAEjB,QAASe,YAAWjH,OAAQkH,eAE1B,MADA/M,aAAY8D,eAAe6B,QAAQE,QAASmH,KAAK,EAAMC,cAAc,GAAOF,eACrE/M,YAAY8D,eAAeoJ,OAEpC,QAAS/D,MAAKgE,MACRA,KAAKC,QACPvJ,GAAGnE,KAAK2N,QACL7I,KAAK,SAASI,MACb,GAAImH,GAAI5H,EAAEmJ,QAAQnJ,EAAEa,MAAMhF,YAAY8D,eAAeO,MAAO,MAAOR,GAAGnE,KAAKgD,GACnE,GAAJqJ,EAEF/L,YAAY8D,eAAe6G,UAI3B3K,YAAY8D,eAAeO,MAAM0H,GAAKtK,QAAQ8L,KAAK1J,GAAGnE,MAExDuC,OAAOQ,GAAG,6BAA+B3B,OAAQ+C,GAAGnE,KAAKgD,OAX7DmB,SAaS,SAAS2J,KACdjM,QAAQkM,IAAID,OAIpB,QAAS1C,SACP7I,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,KAAM8B,KAAK,WAClFX,GAAGnE,KAAO,WACHM,aAAY8D,eAAejD,eAGtC,QAAS6M,SACP7J,GAAGnE,KAAKiO,SAEV,QAASC,UACP/J,GAAGnE,KAAKiO,SACJ9J,GAAGnE,KAAKmO,OAEVhK,GAAGnE,KAAO,WACHM,aAAY8D,eAAejD,aAClCoB,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,MAIzET,OAAOQ,GAAG,6BAA+B3B,OAAQ+C,GAAGnE,KAAKgD,KAG7D,QAAS2G,eAAc3J,MACrB4C,OAAOiC,QAAQb,EAAE,WACFA,EAAE,oDAAqDhE,KAAKoO,cAC3DC,GAAIrK,EAAE,OAAQkK,OAAQlK,EAAE,QACrCc,KAAK,WAEJ9E,KAAK8J,UACFhF,KAAK,WAEJxE,YAAY8D,eAAeO,MAAQF,EAAE6J,OAAOhO,YAAY8D,eAAeO,MAAO,SAASiC,GACrF,MAAOA,GAAE5D,IAAMhD,KAAKgD,KAGtBmB,GAAGnE,KAAO,KACVuC,OAAOQ,GAAG,mBAAqBnC,cAAeN,YAAY8D,eAAepB,MACxE,SAASkC,KAAMC,QAChBvC,OAAOiD,MAAM7B,EAAE,WAAYA,EAAE,mDACAhE,KAAKoO,kBAK5C,QAASG,cACP/N,OAAO+E,SAASC,KAAOC,mBAAqB,IAAMtB,GAAGqK,cAAcxL,GAAK,eAAiBmB,GAAGnE,KAAKgD,GAGnG,QAASyL,eAAcjI,QACrB1F,KAAK4N,WAAWC,KAAKxK,GAAGqK,cAAcxL,GAAK,IAAMmB,GAAGnE,KAAKgD,GAAI,OAAO8B,KAAK,SAASI,MAyBhF,QAAS0J,+BAA8BxL,MAAOX,WAC5CW,MAAMgI,MAAQ,WACZ3I,UAAUc,QA1Bdd,UAAUe,MACRC,OAAQ1B,QAAQ2B,QAAQC,SAASC,MACjCC,YAAa2C,OACb1C,qBAAqB,EACrBC,eAAe,EACf5D,UACE,kDAAoD6D,EAAE,oBAAsB,KAC5E,wBACA,YACAkB,KACA,aACA,yBACA,6BACA,qCAAuClB,EAAE,SAAW,eACpD,WACA,gBACAC,KAAK,IACPvE,WAAYkP,gCAMdA,8BAA8BzM,SAAW,QAAS,eAvJtD,GAAIgC,IAAKiE,IAETjE,IAAGnE,KAAOC,UAEVkE,GAAGqK,cAAgBlO,YAAY8D,eAC/BD,GAAG0K,cAAgB/N,KAAKgO,aACxB3K,GAAG4K,YAAcjO,KAAKkO,WACtB7K,GAAG8K,YAAcnO,KAAKoO,WACtB/K,GAAGgL,gBAAkBrO,KAAKsO,eAC1BjL,GAAGkL,cACHlL,GAAGmL,qBACHnL,GAAGiI,WAAaA,WAChBjI,GAAGoI,YAAcA,YACjBpI,GAAGuI,SAAWA,SACdvI,GAAGyI,SAAWA,SACdzI,GAAG2I,OAASA,OACZ3I,GAAG6I,WAAaA,WAChB7I,GAAG+I,UAAYA,UACf/I,GAAGiJ,WAAaA,WAChBjJ,GAAGsF,KAAOA,KACVtF,GAAGiH,MAAQA,MACXjH,GAAG6J,MAAQA,MACX7J,GAAG+J,OAASA,OACZ/J,GAAGwF,cAAgBA,cACnBxF,GAAGoK,WAAaA,WAChBpK,GAAGsK,cAAgBA,cA3BrBtC,eAAehK,SAAW,SAAU,WAAY,YAAa,cAAe,OAAQ,SAAU,UAAW,SAAU,eAAgB,aAmKnIJ,QACGC,OAAO,mBACPtC,WAAW,iBAAkByM,mBC5KlC,WACE,YAQA,SAASoD,aACP,OACEC,SAAU,IACVpM,OAAS8B,KAAM,cACfxF,YAAa,SAAU,SAAS2C,QAC9BA,OAAOoN,aAAe,SAASvK,MAC7B,GAAIwK,UACAC,kBAQJ,OAPIzK,MAAK0K,QAAQF,MAAM9H,KAAK1C,KAAK0K,QAC7B1K,KAAK2K,SAASH,MAAM9H,KAAK1C,KAAK2K,SAC9B3K,KAAK4K,UAAUH,gBAAgB/H,KAAK1C,KAAK4K,UACzC5K,KAAK6K,QAAQJ,gBAAgB/H,KAAK1C,KAAK6K,QACvCJ,gBAAgBhI,OAAS,GAAG+H,MAAM9H,KAAK+H,gBAAgB1L,KAAK,OAC5DiB,KAAK8K,SAASN,MAAM9H,KAAK1C,KAAK8K,SAC9B9K,KAAK+K,YAAYP,MAAM9H,KAAK1C,KAAK+K,YAC9BP,MAAMzL,KAAK,WAGtB9D,SAAU,yDAId4B,QACGC,OAAO,eACPkO,UAAU,YAAaX","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'angularFileUpload', 'ck', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: ''\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$q', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Account', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $q, $state, $timeout, $mdDialog, focus, Account, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.copySelectedCards = copySelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.newMessageWithSelectedCards = newMessageWithSelectedCards;\n vm.newMessageWithRecipient = newMessageWithRecipient;\n vm.mode = { search: false };\n \n function selectCard(card) {\n $state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});\n }\n \n function newComponent(ev) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' ',\n ' ' + l('Contact'),\n ' ',\n ' ',\n ' ' + l('List'),\n ' ',\n '
',\n '
',\n '
'\n ].join(''),\n locals: {\n addressbookId: vm.selectedFolder.id\n },\n controller: ComponentDialogController\n });\n \n /**\n * @ngInject\n */\n ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];\n function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {\n scope.create = function(type) {\n $mdDialog.hide();\n $state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });\n };\n }\n }\n\n function notSelectedComponent(currentCard, type) {\n return (currentCard && currentCard.c_component == type && !currentCard.selected);\n }\n\n function unselectCards() {\n _.each(vm.selectedFolder.cards, function(card) { card.selected = false; });\n }\n \n function confirmDeleteSelectedCards() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected contacts?'))\n .then(function() {\n // User confirmed the deletion\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$deleteCards(selectedCards);\n delete vm.selectedFolder.selectedCard;\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function saveSelectedCards() {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var selectedUIDs = _.pluck(selectedCards, 'id');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');\n }\n\n function copySelectedCards(folder) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {\n // TODO: refresh target addressbook?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.cards, function(card) {\n card.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter('', { sort: field });\n }\n\n function sortedBy(field) {\n return AddressBook.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n\n function newMessage($event, recipients) {\n Account.$findAll().then(function(accounts) {\n var account = _.filter(accounts, function(o) {\n if (o.id === 0)\n return o;\n })[0];\n\n // We must initialize the Account with its mailbox\n // list before proceeding with message's creation\n account.$getMailboxes().then(function(mailboxes) {\n account.$newMessage().then(function(message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: '../Mail/UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n });\n });\n });\n });\n }\n\n function newMessageWithRecipient($event, recipient, fn) {\n var recipients = [{full: fn + ' <' + recipient + '>'}];\n vm.newMessage($event, recipients);\n }\n\n function newMessageWithSelectedCards($event) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var promises = [], recipients = [];\n\n _.each(selectedCards, function(card) {\n if (card.c_component == 'vcard' && card.c_mail.length) {\n recipients.push({full: card.c_cn + ' <' + card.c_mail + '>'});\n }\n else if (card.c_component == 'vlist') {\n // If the list's members were already fetch, use them\n if (angular.isDefined(card.refs) && card.refs.length) {\n _.each(card.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n }\n else {\n promises.push(vm.selectedFolder.$getCard(card.id).then(function(card) {\n return card.$futureCardData.then(function(data) {\n _.each(data.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n });\n }));\n }\n }\n });\n\n $q.all(promises).then(function() {\n if (recipients.length)\n vm.newMessage($event, recipients);\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', '$mdToast', 'FileUploader', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, $mdToast, FileUploader, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select(folder) {\n vm.editMode = false;\n AddressBook.$query.value = '';\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards($event, folder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' import_export',\n '
',\n '
' + l('Import Cards') + '
',\n '
',\n ' ',\n ' close',\n ' ',\n '
',\n '
',\n ' ',\n '
',\n '
',\n ' ' + l('Select a vCard or LDIF file.') + '',\n ' ',\n ' ',\n '
',\n ' ' + l('No file chosen') + '',\n ' 0\">{{ uploader.queue[0].file.name }}',\n '
',\n '
',\n '
',\n ' ' + l('Upload') + '',\n '
',\n '
'\n ].join(''),\n controller: CardsImportDialogController,\n locals: {\n folder: folder\n }\n });\n\n /**\n * @ngInject\n */\n CardsImportDialogController.$inject = ['scope', '$mdDialog', 'folder'];\n function CardsImportDialogController(scope, $mdDialog, folder) {\n\n scope.uploader = new FileUploader({\n url: ApplicationBaseURL + '/' + folder.id + '/import',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n $mdDialog.hide();\n $mdToast.show(\n $mdToast.simple()\n .content(l('A total of %{0} cards were imported in the addressbook.', response.imported))\n .position('top right')\n .hideDelay(3000));\n AddressBook.selectedFolder.$reload();\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n scope.close = function() {\n $mdDialog.hide();\n };\n scope.upload = function() {\n scope.uploader.uploadAll();\n };\n }\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(addressbook) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: addressbook.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n addressbook: addressbook\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'addressbook'];\n function LinksDialogController($mdDialog, addressbook) {\n var vm = this;\n this.addressbook = addressbook;\n this.close = close;\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addBirthday = addBirthday;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.close = close;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.exportCard = exportCard;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addBirthday() {\n vm.card.birthday = new Date();\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function close() {\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id }).then(function() {\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n });\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function exportCard() {\n window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('
');\n };\n }],\n template: '
'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Contacts.js","sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","addressbooks","templateUrl","controller","controllerAs","resolve","stateAddressbooks","addressbook","stateAddressbook","card","stateCard","stateNewCard","template","card@app.addressbook","otherwise","AddressBook","$findAll","window","contactFolders","$stateParams","$find","addressbookId","$futureAddressBookData","Card","tag","contactType","pid","c_component","selectedCard","cardId","$getCard","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","angular","module","config","run","$inject","AddressBookController","$scope","$q","$state","$timeout","$mdDialog","focus","Account","Dialog","Settings","selectCard","go","id","toggleCardSelection","$event","selected","preventDefault","stopPropagation","newComponent","ev","ComponentDialogController","scope","create","type","hide","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","vm","selectedFolder","notSelectedComponent","currentCard","unselectCards","_","each","cards","confirmDeleteSelectedCards","confirm","then","selectedCards","filter","$deleteCards","data","status","saveSelectedCards","selectedUIDs","pluck","location","href","ApplicationBaseURL","copySelectedCards","folder","$copyCards","alert","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","newMessage","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","newMessageWithRecipient","recipient","fn","full","newMessageWithSelectedCards","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","this","service","AddressBooksController","$mdToast","FileUploader","User","select","editMode","value","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","$rename","confirmDelete","isSubscription","$delete","importCards","CardsImportDialogController","uploader","onProgressItem","item","progress","debug","onSuccessItem","response","headers","JSON","stringify","undefined","simple","content","imported","position","hideDelay","$reload","onCancelItem","onErrorItem","close","upload","uploadAll","exportCards","showLinks","LinksDialogController","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addBirthday","birthday","Date","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","exportCard","currentFolder","viewRawSource","$$resource","post","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'angularFileUpload', 'ck', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: ''\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$q', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Account', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $q, $state, $timeout, $mdDialog, focus, Account, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.service = AddressBook;\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.toggleCardSelection = toggleCardSelection;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.copySelectedCards = copySelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.newMessageWithSelectedCards = newMessageWithSelectedCards;\n vm.newMessageWithRecipient = newMessageWithRecipient;\n vm.mode = { search: false };\n \n function selectCard(card) {\n $state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});\n }\n \n function toggleCardSelection($event, card) {\n card.selected = !card.selected;\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n function newComponent(ev) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' ',\n ' ' + l('Contact'),\n ' ',\n ' ',\n ' ' + l('List'),\n ' ',\n '
',\n '
',\n '
'\n ].join(''),\n locals: {\n addressbookId: vm.selectedFolder.id\n },\n controller: ComponentDialogController\n });\n \n /**\n * @ngInject\n */\n ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];\n function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {\n scope.create = function(type) {\n $mdDialog.hide();\n $state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });\n };\n }\n }\n\n function notSelectedComponent(currentCard, type) {\n return (currentCard && currentCard.c_component == type && !currentCard.selected);\n }\n\n function unselectCards() {\n _.each(vm.selectedFolder.cards, function(card) { card.selected = false; });\n }\n \n function confirmDeleteSelectedCards() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected contacts?'))\n .then(function() {\n // User confirmed the deletion\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$deleteCards(selectedCards);\n delete vm.selectedFolder.selectedCard;\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function saveSelectedCards() {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var selectedUIDs = _.pluck(selectedCards, 'id');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');\n }\n\n function copySelectedCards(folder) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {\n // TODO: refresh target addressbook?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.cards, function(card) {\n card.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter('', { sort: field });\n }\n\n function sortedBy(field) {\n return AddressBook.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n\n function newMessage($event, recipients) {\n Account.$findAll().then(function(accounts) {\n var account = _.filter(accounts, function(o) {\n if (o.id === 0)\n return o;\n })[0];\n\n // We must initialize the Account with its mailbox\n // list before proceeding with message's creation\n account.$getMailboxes().then(function(mailboxes) {\n account.$newMessage().then(function(message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: '../Mail/UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n });\n });\n });\n });\n }\n\n function newMessageWithRecipient($event, recipient, fn) {\n var recipients = [{full: fn + ' <' + recipient + '>'}];\n vm.newMessage($event, recipients);\n }\n\n function newMessageWithSelectedCards($event) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var promises = [], recipients = [];\n\n _.each(selectedCards, function(card) {\n if (card.c_component == 'vcard' && card.c_mail.length) {\n recipients.push({full: card.c_cn + ' <' + card.c_mail + '>'});\n }\n else if (card.c_component == 'vlist') {\n // If the list's members were already fetch, use them\n if (angular.isDefined(card.refs) && card.refs.length) {\n _.each(card.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n }\n else {\n promises.push(vm.selectedFolder.$getCard(card.id).then(function(card) {\n return card.$futureCardData.then(function(data) {\n _.each(data.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n });\n }));\n }\n }\n });\n\n $q.all(promises).then(function() {\n if (recipients.length)\n vm.newMessage($event, recipients);\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', '$mdToast', 'FileUploader', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, $mdToast, FileUploader, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select(folder) {\n vm.editMode = false;\n AddressBook.$query.value = '';\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook %{0}?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards($event, folder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n ' import_export',\n '
',\n '
' + l('Import Cards') + '
',\n '
',\n ' ',\n ' close',\n ' ',\n '
',\n '
',\n ' ',\n '
',\n '
',\n ' ' + l('Select a vCard or LDIF file.') + '',\n ' ',\n ' ',\n '
',\n ' ' + l('No file chosen') + '',\n ' 0\">{{ uploader.queue[0].file.name }}',\n '
',\n '
',\n '
',\n ' ' + l('Upload') + '',\n '
',\n '
'\n ].join(''),\n controller: CardsImportDialogController,\n locals: {\n folder: folder\n }\n });\n\n /**\n * @ngInject\n */\n CardsImportDialogController.$inject = ['scope', '$mdDialog', 'folder'];\n function CardsImportDialogController(scope, $mdDialog, folder) {\n\n scope.uploader = new FileUploader({\n url: ApplicationBaseURL + '/' + folder.id + '/import',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n $mdDialog.hide();\n $mdToast.show(\n $mdToast.simple()\n .content(l('A total of %{0} cards were imported in the addressbook.', response.imported))\n .position('top right')\n .hideDelay(3000));\n AddressBook.selectedFolder.$reload();\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n scope.close = function() {\n $mdDialog.hide();\n };\n scope.upload = function() {\n scope.uploader.uploadAll();\n };\n }\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(addressbook) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: addressbook.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n addressbook: addressbook\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'addressbook'];\n function LinksDialogController($mdDialog, addressbook) {\n var vm = this;\n this.addressbook = addressbook;\n this.close = close;\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addBirthday = addBirthday;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.close = close;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.exportCard = exportCard;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addBirthday() {\n vm.card.birthday = new Date();\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function close() {\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id }).then(function() {\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n });\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function exportCard() {\n window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('
');\n };\n }],\n template: '
'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js b/UI/WebServerResources/js/Contacts.services.js index 1dbb30fd4..8b86889c6 100644 --- a/UI/WebServerResources/js/Contacts.services.js +++ b/UI/WebServerResources/js/Contacts.services.js @@ -1,2 +1,2 @@ -!function(){"use strict";function AddressBook(futureAddressBookData){if("function"!=typeof futureAddressBookData.then)if(this.init(futureAddressBookData),this.name&&!this.id){var newAddressBookData=AddressBook.$$resource.create("createFolder",this.name);this.$unwrap(newAddressBookData)}else this.id&&(this.$acl=new AddressBook.$$Acl("Contacts/"+this.id));else this.$unwrap(futureAddressBookData)}AddressBook.$factory=["$q","$timeout","$log","sgSettings","Resource","Card","Acl","Preferences",function($q,$timeout,$log,Settings,Resource,Card,Acl,Preferences){return angular.extend(AddressBook,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$Card:Card,$$Acl:Acl,$Preferences:Preferences,$query:{search:"name_or_address",value:"",sort:"c_cn",asc:1},activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),Preferences.ready().then(function(){Preferences.settings.Contact.SortingState&&(AddressBook.$query.sort=Preferences.settings.Contact.SortingState[0],AddressBook.$query.asc=parseInt(Preferences.settings.Contact.SortingState[1]))}),AddressBook}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("AddressBook",AddressBook.$factory),AddressBook.$filterAll=function(search,options,excludedCards){var params={search:search};if(!search)return AddressBook.$cards=[],AddressBook.$q.when(AddressBook.$cards);if(angular.isUndefined(AddressBook.$cards))AddressBook.$cards=[];else if(AddressBook.$query==search)return AddressBook.$q.when(AddressBook.$cards);return AddressBook.$query=search,angular.extend(params,options),AddressBook.$$resource.fetch(null,"allContactSearch",params).then(function(response){var results,card,index,compareIds=function(data){return this.id==data.id};for(results=excludedCards?_.filter(response.contacts,function(data){return _.isUndefined(_.find(excludedCards,compareIds,data))}):response.contacts,index=AddressBook.$cards.length-1;index>=0;index--)card=AddressBook.$cards[index],_.isUndefined(_.find(results,compareIds,card))&&AddressBook.$cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(AddressBook.$cards,compareIds,data))){var card=new AddressBook.$Card(data,search);AddressBook.$cards.splice(index,0,card)}}),AddressBook.$cards})},AddressBook.$add=function(addressbook){var list,sibling,i;list=addressbook.isSubscription?this.$subscriptions:this.$addressbooks,sibling=_.find(list,function(o){return"personal"==addressbook.id||"personal"!=o.id&&1===o.name.localeCompare(addressbook.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,addressbook)},AddressBook.$findAll=function(data){var _this=this;return data&&(this.$addressbooks=[],this.$subscriptions=[],this.$remotes=[],angular.forEach(data,function(o,i){var addressbook=new AddressBook(o);addressbook.isRemote?_this.$remotes.push(addressbook):addressbook.isSubscription?_this.$subscriptions.push(addressbook):_this.$addressbooks.push(addressbook)})),_.union(this.$addressbooks,this.$subscriptions,this.$remotes)},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$Preferences.ready().then(function(){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query)});return new AddressBook(futureAddressBookData)},AddressBook.$subscribe=function(uid,path){var _this=this;return AddressBook.$$resource.userResource(uid).fetch(path,"subscribe").then(function(addressbookData){var addressbook=new AddressBook(addressbookData);return _.isUndefined(_.find(_this.$subscriptions,function(o){return o.id==addressbookData.id}))&&AddressBook.$add(addressbook),addressbook})},AddressBook.prototype.init=function(data){this.$isLoading=!0,this.$cards=[],this.cards=[],angular.extend(this,data),this.isOwned=AddressBook.activeUser.isSuperUser||this.owner==AddressBook.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=AddressBook.activeUser.login},AddressBook.prototype.$id=function(){return this.id?AddressBook.$q.when(this.id):this.$futureAddressBookData.then(function(addressbook){return addressbook.id})},AddressBook.prototype.$selectedCount=function(){var count;return count=0,this.cards&&(count=_.filter(this.cards,function(card){return card.selected}).length),count},AddressBook.prototype.$startRefreshTimeout=function(){var _this=this;AddressBook.$refreshTimeout&&AddressBook.$timeout.cancel(AddressBook.$refreshTimeout),AddressBook.$Preferences.ready().then(function(){var refreshViewCheck=AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,AddressBook.prototype.$reload);AddressBook.$refreshTimeout=AddressBook.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},AddressBook.prototype.$reload=function(){return this.$startRefreshTimeout(),this.$filter()},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;return this.$isLoading=!0,AddressBook.$Preferences.ready().then(function(){if(options&&(angular.extend(AddressBook.$query,options),options.dry)){if(!search)return _this.$cards=[],AddressBook.$q.when(_this.$cards);if(AddressBook.$query.value==search)return AddressBook.$q.when(_this.$cards)}return angular.isDefined(search)&&(AddressBook.$query.value=search),_this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query)}).then(function(response){var results,cards,card,index,compareIds=function(data){return _this.id==data.id};for(cards=options&&options.dry?_this.$cards:_this.cards,results=excludedCards?_.filter(response.cards,function(card){return _.isUndefined(_.find(excludedCards,compareIds,card))}):response.cards,index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data,search);cards.splice(index,0,card)}}),_.each(results,function(data,index){var oldIndex,removedCards;cards[index].id!=data.id&&(oldIndex=_.findIndex(cards,compareIds,data),removedCards=cards.splice(oldIndex,1),cards.splice(index,0,removedCards[0]))}),_this.$isLoading=!1,cards})})},AddressBook.prototype.$rename=function(name){var i=_.indexOf(_.pluck(AddressBook.$addressbooks,"id"),this.id);return this.name=name,AddressBook.$addressbooks.splice(i,1),AddressBook.$add(this),this.$save()},AddressBook.prototype.$delete=function(){var list,promise,_this=this,d=AddressBook.$q.defer();return this.isSubscription?(promise=AddressBook.$$resource.fetch(this.id,"unsubscribe"),list=AddressBook.$subscriptions):(promise=AddressBook.$$resource.remove(this.id),list=AddressBook.$addressbooks),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},AddressBook.prototype.$deleteCards=function(cards){var uids=_.map(cards,function(card){return card.id}),_this=this;return AddressBook.$$resource.post(this.id,"batchDelete",{uids:uids}).then(function(){_this.cards=_.difference(_this.cards,cards)})},AddressBook.prototype.$copyCards=function(cards,folder){var uids=_.map(cards,function(card){return card.id});return AddressBook.$$resource.post(this.id,"copy",{uids:uids,folder:folder})},AddressBook.prototype.$save=function(){return AddressBook.$$resource.save(this.id,this.$omit()).then(function(data){return data})},AddressBook.prototype.$getCard=function(cardId){var _this=this;return this.$id().then(function(addressbookId){var fullCard,cachedCard=_.find(_this.cards,function(data){return cardId==data.id});return cachedCard&&cachedCard.$futureCardData?cachedCard:(fullCard=AddressBook.$Card.$find(addressbookId,cardId),fullCard.$id().then(function(cardId){cachedCard&&angular.extend(cachedCard,fullCard)}),fullCard)})},AddressBook.prototype.$unwrap=function(futureAddressBookData){var _this=this;this.$futureAddressBookData=futureAddressBookData.then(function(data){return AddressBook.$timeout(function(){return angular.forEach(AddressBook.$findAll(),function(o,i){o.id==data.id&&angular.extend(_this,o)}),_this.init(data),angular.forEach(_this.cards,function(o,i){_this.cards[i]=new AddressBook.$Card(o)}),_this.$acl=new AddressBook.$$Acl("Contacts/"+_this.id),_this.$startRefreshTimeout(),_this.$isLoading=!1,_this})},function(data){_this.isError=!0,angular.isObject(data)&&AddressBook.$timeout(function(){angular.extend(_this,data)})})},AddressBook.prototype.$omit=function(){var addressbook={};return angular.forEach(this,function(value,key){"constructor"!=key&&"cards"!=key&&"$"!=key[0]&&(addressbook[key]=value)}),addressbook}}(),function(){"use strict";function Card(futureCardData,partial){if("function"!=typeof futureCardData.then){if(this.init(futureCardData,partial),this.pid&&!this.id){var newCardData=Card.$$resource.newguid(this.pid);this.$unwrap(newCardData),this.isNew=!0}}else this.$unwrap(futureCardData)}Card.$TEL_TYPES=["work","home","cell","fax","pager"],Card.$EMAIL_TYPES=["work","home","pref"],Card.$URL_TYPES=["work","home","pref"],Card.$ADDRESS_TYPES=["work","home"],Card.$factory=["$timeout","sgSettings","Resource","Preferences","Gravatar",function($timeout,Settings,Resource,Preferences,Gravatar){return angular.extend(Card,{$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$timeout:$timeout,$gravatar:Gravatar}),Preferences.ready().then(function(){Preferences.defaults.SOGoContactsCategories&&(Card.$categories=Preferences.defaults.SOGoContactsCategories)}),Card}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("Card",Card.$factory),Card.$find=function(addressbookId,cardId){var futureCardData=this.$$resource.fetch([addressbookId,cardId].join("/"),"view");return cardId?new Card(futureCardData):Card.$unwrapCollection(futureCardData)},Card.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(Card.$categories,function(category){return-1!=category.search(re)})},Card.$unwrapCollection=function(futureCardData){var collection={};return collection.$futureCardData=futureCardData,futureCardData.then(function(cards){Card.$timeout(function(){angular.forEach(cards,function(data,index){collection[data.id]=new Card(data)})})}),collection},Card.prototype.init=function(data,partial){this.refs=[],angular.extend(this,data),this.$$fullname||(this.$$fullname=this.$fullname()),this.$$email||(this.$$email=this.$preferredEmail(partial)),this.$$image||(this.$$image=this.image||Card.$gravatar(this.$preferredEmail(partial),32)),this.selected=!1,this.empty=" "},Card.prototype.$id=function(){return this.$futureCardData.then(function(data){return data.id})},Card.prototype.$save=function(){var _this=this,action="saveAsContact";return"vlist"==this.c_component&&(action="saveAsList"),Card.$$resource.save([this.pid,this.id||"_new_"].join("/"),this.$omit(),{action:action}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Card.prototype.$delete=function(attribute,index){return attribute?void(index>-1&&this[attribute].length>index?this[attribute].splice(index,1):delete this[attribute]):Card.$$resource.remove([this.pid,this.id].join("/"))},Card.prototype.$fullname=function(){var names,fn=this.c_cn||"";return 0===fn.length&&(names=[],this.c_givenname&&this.c_givenname.length>0&&names.push(this.c_givenname),this.nickname&&this.nickname.length>0&&names.push(""+this.nickname+""),this.c_sn&&this.c_sn.length>0&&names.push(this.c_sn),names.length>0?fn=names.join(" "):this.c_org&&this.c_org.length>0?fn=this.c_org:this.emails&&this.emails.length>0?fn=_.find(this.emails,function(i){return""!==i.value}).value:this.c_cn&&this.c_cn.length>0&&(fn=this.c_cn)),fn},Card.prototype.$description=function(){var description=[];return this.title&&description.push(this.title),this.role&&description.push(this.role),this.orgUnits&&this.orgUnits.length>0&&_.forEach(this.orgUnits,function(unit){""!==unit.value&&description.push(unit.value)}),this.org&&description.push(this.org),this.description&&description.push(this.description),description.join(", ")},Card.prototype.$preferredEmail=function(partial){var email,re;return partial&&(re=new RegExp(partial,"i"),email=_.find(this.emails,function(o){return re.test(o.value)})),email?email=email.value:(email=_.find(this.emails,function(o){return"pref"==o.type}),email=email?email.value:this.emails&&this.emails.length?this.emails[0].value:""),email},Card.prototype.$shortFormat=function(partial){var fullname=this.$fullname(),email=this.$preferredEmail(partial);return email&&email!=fullname&&(fullname+=" <"+email+">"),fullname},Card.prototype.$birthday=function(){return this.birthday?[this.birthday.getFullYear(),this.birthday.getMonth()+1,this.birthday.getDate()].join("/"):""},Card.prototype.$isCard=function(){return"vcard"==this.c_component},Card.prototype.$isList=function(){return"vlist"==this.c_component},Card.prototype.$addOrgUnit=function(orgUnit){if(angular.isUndefined(this.orgUnits))this.orgUnits=[{value:orgUnit}];else{for(var i=0;i"),"["+desc+"]"}}(); +!function(){"use strict";function AddressBook(futureAddressBookData){if("function"!=typeof futureAddressBookData.then)if(this.init(futureAddressBookData),this.name&&!this.id){var newAddressBookData=AddressBook.$$resource.create("createFolder",this.name);this.$unwrap(newAddressBookData)}else this.id&&(this.$acl=new AddressBook.$$Acl("Contacts/"+this.id));else this.$unwrap(futureAddressBookData)}AddressBook.$factory=["$q","$timeout","$log","sgSettings","Resource","Card","Acl","Preferences",function($q,$timeout,$log,Settings,Resource,Card,Acl,Preferences){return angular.extend(AddressBook,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$Card:Card,$$Acl:Acl,$Preferences:Preferences,$query:{search:"name_or_address",value:"",sort:"c_cn",asc:1},activeUser:Settings.activeUser(),selectedFolder:null,$refreshTimeout:null}),Preferences.ready().then(function(){Preferences.settings.Contact.SortingState&&(AddressBook.$query.sort=Preferences.settings.Contact.SortingState[0],AddressBook.$query.asc=parseInt(Preferences.settings.Contact.SortingState[1]))}),AddressBook}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("AddressBook",AddressBook.$factory),AddressBook.$filterAll=function(search,options,excludedCards){var params={search:search};if(!search)return AddressBook.$cards=[],AddressBook.$q.when(AddressBook.$cards);if(angular.isUndefined(AddressBook.$cards))AddressBook.$cards=[];else if(AddressBook.$query.value==search)return AddressBook.$q.when(AddressBook.$cards);return AddressBook.$query.value=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.$log.debug(AddressBook.$cards),AddressBook.$cards})},AddressBook.$add=function(addressbook){var list,sibling,i;list=addressbook.isSubscription?this.$subscriptions:this.$addressbooks,sibling=_.find(list,function(o){return"personal"==addressbook.id||"personal"!=o.id&&1===o.name.localeCompare(addressbook.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,addressbook)},AddressBook.$findAll=function(data){var _this=this;return data&&(this.$addressbooks=[],this.$subscriptions=[],this.$remotes=[],angular.forEach(data,function(o,i){var addressbook=new AddressBook(o);addressbook.isRemote?_this.$remotes.push(addressbook):addressbook.isSubscription?_this.$subscriptions.push(addressbook):_this.$addressbooks.push(addressbook)})),_.union(this.$addressbooks,this.$subscriptions,this.$remotes)},AddressBook.$find=function(addressbookId){var futureAddressBookData=AddressBook.$Preferences.ready().then(function(){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query)});return new AddressBook(futureAddressBookData)},AddressBook.$subscribe=function(uid,path){var _this=this;return AddressBook.$$resource.userResource(uid).fetch(path,"subscribe").then(function(addressbookData){var addressbook=new AddressBook(addressbookData);return _.isUndefined(_.find(_this.$subscriptions,function(o){return o.id==addressbookData.id}))&&AddressBook.$add(addressbook),addressbook})},AddressBook.prototype.init=function(data){this.$isLoading=!0,this.$cards=[],this.cards=[],angular.extend(this,data),this.isOwned=AddressBook.activeUser.isSuperUser||this.owner==AddressBook.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=AddressBook.activeUser.login},AddressBook.prototype.$id=function(){return this.id?AddressBook.$q.when(this.id):this.$futureAddressBookData.then(function(addressbook){return addressbook.id})},AddressBook.prototype.$selectedCount=function(){var count;return count=0,this.cards&&(count=_.filter(this.cards,function(card){return card.selected}).length),count},AddressBook.prototype.$startRefreshTimeout=function(){var _this=this;AddressBook.$refreshTimeout&&AddressBook.$timeout.cancel(AddressBook.$refreshTimeout),AddressBook.$Preferences.ready().then(function(){var refreshViewCheck=AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,AddressBook.prototype.$reload);AddressBook.$refreshTimeout=AddressBook.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},AddressBook.prototype.$reload=function(){return this.$startRefreshTimeout(),this.$filter()},AddressBook.prototype.$filter=function(search,options,excludedCards){var _this=this;return options&&options.dry||(this.$isLoading=!0),AddressBook.$Preferences.ready().then(function(){if(options&&(angular.extend(AddressBook.$query,options),options.dry)){if(!search)return _this.$cards=[],AddressBook.$q.when(_this.$cards);if(AddressBook.$query.value==search)return AddressBook.$q.when(_this.$cards)}return angular.isDefined(search)&&(AddressBook.$query.value=search),_this.$id().then(function(addressbookId){return AddressBook.$$resource.fetch(addressbookId,"view",AddressBook.$query)}).then(function(response){var results,cards,card,index,compareIds=function(data){return _this.id==data.id};for(cards=options&&options.dry?_this.$cards:_this.cards,results=excludedCards?_.filter(response.cards,function(card){return _.isUndefined(_.find(excludedCards,compareIds,card))}):response.cards,index=cards.length-1;index>=0;index--)card=cards[index],_.isUndefined(_.find(results,compareIds,card))&&cards.splice(index,1);return _.each(results,function(data,index){if(_.isUndefined(_.find(cards,compareIds,data))){var card=new AddressBook.$Card(data,search);cards.splice(index,0,card)}}),_.each(results,function(data,index){var oldIndex,removedCards;cards[index].id!=data.id&&(oldIndex=_.findIndex(cards,compareIds,data),removedCards=cards.splice(oldIndex,1),cards.splice(index,0,removedCards[0]))}),_this.$isLoading=!1,cards})})},AddressBook.prototype.$rename=function(name){var i=_.indexOf(_.pluck(AddressBook.$addressbooks,"id"),this.id);return this.name=name,AddressBook.$addressbooks.splice(i,1),AddressBook.$add(this),this.$save()},AddressBook.prototype.$delete=function(){var list,promise,_this=this,d=AddressBook.$q.defer();return this.isSubscription?(promise=AddressBook.$$resource.fetch(this.id,"unsubscribe"),list=AddressBook.$subscriptions):(promise=AddressBook.$$resource.remove(this.id),list=AddressBook.$addressbooks),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},AddressBook.prototype.$deleteCards=function(cards){var uids=_.map(cards,function(card){return card.id}),_this=this;return AddressBook.$$resource.post(this.id,"batchDelete",{uids:uids}).then(function(){_this.cards=_.difference(_this.cards,cards)})},AddressBook.prototype.$copyCards=function(cards,folder){var uids=_.map(cards,function(card){return card.id});return AddressBook.$$resource.post(this.id,"copy",{uids:uids,folder:folder})},AddressBook.prototype.$save=function(){return AddressBook.$$resource.save(this.id,this.$omit()).then(function(data){return data})},AddressBook.prototype.$getCard=function(cardId){var _this=this;return this.$id().then(function(addressbookId){var fullCard,cachedCard=_.find(_this.cards,function(data){return cardId==data.id});return cachedCard&&cachedCard.$futureCardData?cachedCard:(fullCard=AddressBook.$Card.$find(addressbookId,cardId),fullCard.$id().then(function(cardId){cachedCard&&angular.extend(cachedCard,fullCard)}),fullCard)})},AddressBook.prototype.$unwrap=function(futureAddressBookData){var _this=this;this.$futureAddressBookData=futureAddressBookData.then(function(data){return AddressBook.$timeout(function(){return angular.forEach(AddressBook.$findAll(),function(o,i){o.id==data.id&&angular.extend(_this,o)}),_this.init(data),angular.forEach(_this.cards,function(o,i){_this.cards[i]=new AddressBook.$Card(o)}),_this.$acl=new AddressBook.$$Acl("Contacts/"+_this.id),_this.$startRefreshTimeout(),_this.$isLoading=!1,_this})},function(data){_this.isError=!0,angular.isObject(data)&&AddressBook.$timeout(function(){angular.extend(_this,data)})})},AddressBook.prototype.$omit=function(){var addressbook={};return angular.forEach(this,function(value,key){"constructor"!=key&&"cards"!=key&&"$"!=key[0]&&(addressbook[key]=value)}),addressbook}}(),function(){"use strict";function Card(futureCardData,partial){if("function"!=typeof futureCardData.then){if(this.init(futureCardData,partial),this.pid&&!this.id){var newCardData=Card.$$resource.newguid(this.pid);this.$unwrap(newCardData),this.isNew=!0}}else this.$unwrap(futureCardData)}Card.$TEL_TYPES=["work","home","cell","fax","pager"],Card.$EMAIL_TYPES=["work","home","pref"],Card.$URL_TYPES=["work","home","pref"],Card.$ADDRESS_TYPES=["work","home"],Card.$factory=["$timeout","sgSettings","Resource","Preferences","Gravatar",function($timeout,Settings,Resource,Preferences,Gravatar){return angular.extend(Card,{$$resource:new Resource(Settings.activeUser("folderURL")+"Contacts",Settings.activeUser()),$timeout:$timeout,$gravatar:Gravatar}),Preferences.ready().then(function(){Preferences.defaults.SOGoContactsCategories&&(Card.$categories=Preferences.defaults.SOGoContactsCategories)}),Card}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common"])}angular.module("SOGo.ContactsUI").factory("Card",Card.$factory),Card.$find=function(addressbookId,cardId){var futureCardData=this.$$resource.fetch([addressbookId,cardId].join("/"),"view");return cardId?new Card(futureCardData):Card.$unwrapCollection(futureCardData)},Card.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(Card.$categories,function(category){return-1!=category.search(re)})},Card.$unwrapCollection=function(futureCardData){var collection={};return collection.$futureCardData=futureCardData,futureCardData.then(function(cards){Card.$timeout(function(){angular.forEach(cards,function(data,index){collection[data.id]=new Card(data)})})}),collection},Card.prototype.init=function(data,partial){this.refs=[],angular.extend(this,data),this.$$fullname||(this.$$fullname=this.$fullname()),this.$$email||(this.$$email=this.$preferredEmail(partial)),this.$$image||(this.$$image=this.image||Card.$gravatar(this.$preferredEmail(partial),32)),this.selected=!1,this.empty=" "},Card.prototype.$id=function(){return this.$futureCardData.then(function(data){return data.id})},Card.prototype.$save=function(){var _this=this,action="saveAsContact";return"vlist"==this.c_component&&(action="saveAsList"),Card.$$resource.save([this.pid,this.id||"_new_"].join("/"),this.$omit(),{action:action}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Card.prototype.$delete=function(attribute,index){return attribute?void(index>-1&&this[attribute].length>index?this[attribute].splice(index,1):delete this[attribute]):Card.$$resource.remove([this.pid,this.id].join("/"))},Card.prototype.$fullname=function(){var names,fn=this.c_cn||"";return 0===fn.length&&(names=[],this.c_givenname&&this.c_givenname.length>0&&names.push(this.c_givenname),this.nickname&&this.nickname.length>0&&names.push(""+this.nickname+""),this.c_sn&&this.c_sn.length>0&&names.push(this.c_sn),names.length>0?fn=names.join(" "):this.c_org&&this.c_org.length>0?fn=this.c_org:this.emails&&this.emails.length>0?fn=_.find(this.emails,function(i){return""!==i.value}).value:this.c_cn&&this.c_cn.length>0&&(fn=this.c_cn)),fn},Card.prototype.$description=function(){var description=[];return this.title&&description.push(this.title),this.role&&description.push(this.role),this.orgUnits&&this.orgUnits.length>0&&_.forEach(this.orgUnits,function(unit){""!==unit.value&&description.push(unit.value)}),this.c_org&&description.push(this.c_org),this.description&&description.push(this.description),description.join(", ")},Card.prototype.$preferredEmail=function(partial){var email,re;return partial&&(re=new RegExp(partial,"i"),email=_.find(this.emails,function(o){return re.test(o.value)})),email?email=email.value:(email=_.find(this.emails,function(o){return"pref"==o.type}),email=email?email.value:this.emails&&this.emails.length?this.emails[0].value:""),email},Card.prototype.$shortFormat=function(partial){var fullname=this.$fullname(),email=this.$preferredEmail(partial);return email&&email!=fullname&&(fullname+=" <"+email+">"),fullname},Card.prototype.$birthday=function(){return this.birthday?[this.birthday.getFullYear(),this.birthday.getMonth()+1,this.birthday.getDate()].join("/"):""},Card.prototype.$isCard=function(){return"vcard"==this.c_component},Card.prototype.$isList=function(){return"vlist"==this.c_component},Card.prototype.$addOrgUnit=function(orgUnit){if(angular.isUndefined(this.orgUnits))this.orgUnits=[{value:orgUnit}];else{for(var i=0;i"),"["+desc+"]"}}(); //# sourceMappingURL=Contacts.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Contacts.services.js.map b/UI/WebServerResources/js/Contacts.services.js.map index 955d1a129..08fa8c422 100644 --- a/UI/WebServerResources/js/Contacts.services.js.map +++ b/UI/WebServerResources/js/Contacts.services.js.map @@ -1 +1 @@ -{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","then","this","init","name","id","newAddressBookData","$$resource","create","$unwrap","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Card","Acl","Preferences","angular","extend","activeUser","$Card","$Preferences","$query","search","value","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Contact","SortingState","parseInt","module","e","factory","$filterAll","options","excludedCards","params","$cards","when","isUndefined","fetch","response","results","card","index","compareIds","data","_","filter","contacts","find","length","splice","each","$add","addressbook","list","sibling","i","isSubscription","$subscriptions","$addressbooks","o","localeCompare","indexOf","pluck","$findAll","_this","$remotes","forEach","isRemote","push","union","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","$isLoading","cards","isOwned","isSuperUser","owner","login","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","isDefined","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","$copyCards","folder","save","$omit","$getCard","cardId","fullCard","cachedCard","$futureCardData","isError","isObject","key","futureCardData","partial","pid","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Gravatar","$gravatar","SOGoContactsCategories","$categories","join","$unwrapCollection","filterCategories","query","re","RegExp","category","collection","refs","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","empty","action","c_component","$shadowData","attribute","names","fn","c_cn","c_givenname","nickname","c_sn","c_org","emails","$description","description","title","role","orgUnits","unit","org","email","test","type","$shortFormat","fullname","$birthday","birthday","getFullYear","getMonth","getDate","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","Date","deep","copy","getTime","toString","desc"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name AddressBook\n * @constructor\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function AddressBook(futureAddressBookData) {\n // Data is immediately available\n if (typeof futureAddressBookData.then !== 'function') {\n this.init(futureAddressBookData);\n if (this.name && !this.id) {\n // Create a new addressbook on the server\n var newAddressBookData = AddressBook.$$resource.create('createFolder', this.name);\n this.$unwrap(newAddressBookData);\n }\n else if (this.id) {\n this.$acl = new AddressBook.$$Acl('Contacts/' + this.id);\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureAddressBookData);\n }\n }\n\n /**\n * @memberof AddressBook\n * @desc The factory we'll use to register with Angular\n * @returns the AddressBook constructor\n */\n AddressBook.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Card', 'Acl', 'Preferences', function($q, $timeout, $log, Settings, Resource, Card, Acl, Preferences) {\n angular.extend(AddressBook, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $Card: Card,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: {search: 'name_or_address', value: '', sort: 'c_cn', asc: 1},\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Contact.SortingState) {\n AddressBook.$query.sort = Preferences.settings.Contact.SortingState[0];\n AddressBook.$query.asc = parseInt(Preferences.settings.Contact.SortingState[1]);\n }\n });\n return AddressBook; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of AddressBook in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('AddressBook', AddressBook.$factory);\n\n /**\n * @memberof AddressBook\n * @desc Search for cards among all addressbooks matching some criterias.\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query (excludeGroups and excludeLists)\n * @param {object[]} excludedCards - a list of Card objects that must be excluded from the results\n * @returns a collection of Cards instances\n */\n AddressBook.$filterAll = function(search, options, excludedCards) {\n var params = {search: search};\n\n if (!search) {\n // No query specified\n AddressBook.$cards = [];\n return AddressBook.$q.when(AddressBook.$cards);\n }\n if (angular.isUndefined(AddressBook.$cards)) {\n // First session query\n AddressBook.$cards = [];\n }\n else if (AddressBook.$query == search) {\n // Query hasn't changed\n return AddressBook.$q.when(AddressBook.$cards);\n }\n AddressBook.$query = search;\n\n angular.extend(params, options);\n\n return AddressBook.$$resource.fetch(null, 'allContactSearch', params).then(function(response) {\n var results, card, index,\n compareIds = function(data) {\n return this.id == data.id;\n };\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.contacts, function(data) {\n return _.isUndefined(_.find(excludedCards, compareIds, data));\n });\n }\n else {\n results = response.contacts;\n }\n // Remove cards that no longer match the search query\n for (index = AddressBook.$cards.length - 1; index >= 0; index--) {\n card = AddressBook.$cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n AddressBook.$cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(AddressBook.$cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n AddressBook.$cards.splice(index, 0, card);\n }\n });\n return AddressBook.$cards;\n });\n };\n\n /**\n * @memberof AddressBook\n * @desc Add a new addressbook to the static list of addressbooks\n * @param {AddressBook} addressbook - an Addressbook object instance\n */\n AddressBook.$add = function(addressbook) {\n // Insert new addressbook at proper index\n var list, sibling, i;\n\n list = addressbook.isSubscription? this.$subscriptions : this.$addressbooks;\n sibling = _.find(list, function(o) {\n return (addressbook.id == 'personal' ||\n (o.id != 'personal' &&\n o.name.localeCompare(addressbook.name) === 1));\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, addressbook);\n };\n\n /**\n * @memberof AddressBook\n * @desc Set or get the list of addressbooks. Will instantiate a new AddressBook object for each item.\n * @param {array} [data] - the metadata of the addressbooks\n * @returns the list of addressbooks\n */\n AddressBook.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$addressbooks = [];\n this.$subscriptions = [];\n this.$remotes = [];\n // Instanciate AddressBook objects\n angular.forEach(data, function(o, i) {\n var addressbook = new AddressBook(o);\n if (addressbook.isRemote)\n _this.$remotes.push(addressbook);\n else if (addressbook.isSubscription)\n _this.$subscriptions.push(addressbook);\n else\n _this.$addressbooks.push(addressbook);\n });\n }\n return _.union(this.$addressbooks, this.$subscriptions, this.$remotes);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Fetch list of cards and return an AddressBook instance.\n * @param {string} addressbookId - the addressbook identifier\n * @returns an AddressBook object instance\n */\n AddressBook.$find = function(addressbookId) {\n var futureAddressBookData = AddressBook.$Preferences.ready().then(function() {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$query);\n });\n return new AddressBook(futureAddressBookData);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Subscribe to another user's addressbook and add it to the list of addressbooks.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n AddressBook.$subscribe = function(uid, path) {\n var _this = this;\n return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {\n var addressbook = new AddressBook(addressbookData);\n if (_.isUndefined(_.find(_this.$subscriptions, function(o) {\n return o.id == addressbookData.id;\n }))) {\n // Not already subscribed\n AddressBook.$add(addressbook);\n }\n return addressbook;\n });\n };\n\n /**\n * @function init\n * @memberof AddressBook.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of addressbook\n */\n AddressBook.prototype.init = function(data) {\n this.$isLoading = true;\n this.$cards = [];\n this.cards = [];\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = AddressBook.activeUser.isSuperUser || this.owner == AddressBook.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != AddressBook.activeUser.login;\n };\n\n /**\n * @function $id\n * @memberof AddressBook.prototype\n * @desc Resolve the addressbook id.\n * @returns a promise of the addressbook id\n */\n AddressBook.prototype.$id = function() {\n if (this.id) {\n // Object already unwrapped\n return AddressBook.$q.when(this.id);\n }\n else {\n // Wait until object is unwrapped\n return this.$futureAddressBookData.then(function(addressbook) {\n return addressbook.id;\n });\n }\n };\n\n /**\n * @function $selectedCount\n * @memberof AddressBook.prototype\n * @desc Return the number of cards selected by the user.\n * @returns the number of selected cards\n */\n AddressBook.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.cards) {\n count = (_.filter(this.cards, function(card) { return card.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof AddressBook.prototype\n * @desc Starts the refresh timeout for the current selected address book\n */\n AddressBook.prototype.$startRefreshTimeout = function() {\n var _this = this;\n\n if (AddressBook.$refreshTimeout)\n AddressBook.$timeout.cancel(AddressBook.$refreshTimeout);\n\n AddressBook.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, AddressBook.prototype.$reload);\n AddressBook.$refreshTimeout = AddressBook.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $reload\n * @memberof AddressBook.prototype\n * @desc Reload list of cards\n * @returns a promise of the Cards instances\n */\n AddressBook.prototype.$reload = function() {\n var _this = this;\n\n this.$startRefreshTimeout();\n return this.$filter();\n };\n\n /**\n * @function $filter\n * @memberof AddressBook.prototype\n * @desc Search for cards matching some criterias\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query\n * @returns a collection of Cards instances\n */\n AddressBook.prototype.$filter = function(search, options, excludedCards) {\n var _this = this;\n\n this.$isLoading = true;\n\n return AddressBook.$Preferences.ready().then(function() {\n if (options) {\n angular.extend(AddressBook.$query, options);\n\n if (options.dry) {\n if (!search) {\n // No query specified\n _this.$cards = [];\n return AddressBook.$q.when(_this.$cards);\n }\n else if (AddressBook.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(_this.$cards);\n }\n }\n }\n\n if (angular.isDefined(search))\n AddressBook.$query.value = search;\n\n return _this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$query);\n }).then(function(response) {\n var results, cards, card, index,\n compareIds = function(data) {\n return _this.id == data.id;\n };\n if (options && options.dry) {\n // Don't keep a copy of the resulting cards.\n // This is usefull when doing autocompletion.\n cards = _this.$cards;\n }\n else {\n cards = _this.cards;\n }\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.cards, function(card) {\n return _.isUndefined(_.find(excludedCards, compareIds, card));\n });\n }\n else {\n results = response.cards;\n }\n // Remove cards that no longer match the search query\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n cards.splice(index, 0, card);\n }\n });\n // Respect the order of the results\n _.each(results, function(data, index) {\n var oldIndex, removedCards;\n if (cards[index].id != data.id) {\n oldIndex = _.findIndex(cards, compareIds, data);\n removedCards = cards.splice(oldIndex, 1);\n cards.splice(index, 0, removedCards[0]);\n }\n });\n _this.$isLoading = false;\n return cards;\n });\n });\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), this.id);\n this.name = name;\n AddressBook.$addressbooks.splice(i, 1);\n AddressBook.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof AddressBook.prototype\n * @desc Delete the addressbook from the server and the static list of addressbooks.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$delete = function() {\n var _this = this,\n d = AddressBook.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');\n list = AddressBook.$subscriptions;\n }\n else {\n promise = AddressBook.$$resource.remove(this.id);\n list = AddressBook.$addressbooks;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteCards\n * @memberof AddressBook.prototype\n * @desc Delete multiple cards from addressbook.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$deleteCards = function(cards) {\n\n var uids = _.map(cards, function(card) { return card.id; });\n var _this = this;\n \n return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: uids}).then(function() {\n _this.cards = _.difference(_this.cards, cards);\n });\n };\n\n /**\n * @function $copyCards\n * @memberof AddressBook.prototype\n * @desc Copy multiple cards from addressbook to an other one.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$copyCards = function(cards, folder) {\n var uids = _.map(cards, function(card) { return card.id; });\n return AddressBook.$$resource.post(this.id, 'copy', {uids: uids, folder: folder});\n };\n\n /**\n * @function $save\n * @memberof AddressBook.prototype\n * @desc Save the addressbook to the server. This currently can only affect the name of the addressbook.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$save = function() {\n return AddressBook.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $getCard\n * @memberof AddressBook.prototype\n * @desc Fetch the card attributes from the server.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$getCard = function(cardId) {\n var _this = this;\n\n return this.$id().then(function(addressbookId) {\n var fullCard,\n cachedCard = _.find(_this.cards, function(data) {\n return cardId == data.id;\n });\n\n if (cachedCard && cachedCard.$futureCardData)\n // Full card is available\n return cachedCard;\n\n fullCard = AddressBook.$Card.$find(addressbookId, cardId);\n fullCard.$id().then(function(cardId) {\n // Extend the Card object of the addressbook list with the full card description\n if (cachedCard)\n angular.extend(cachedCard, fullCard);\n });\n return fullCard;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof AddressBook.prototype\n * @desc Unwrap a promise and instanciate new Card objects using received data.\n * @param {promise} futureAddressBookData - a promise of the AddressBook's data\n */\n AddressBook.prototype.$unwrap = function(futureAddressBookData) {\n var _this = this;\n\n // Expose and sesolve the promise\n this.$futureAddressBookData = futureAddressBookData.then(function(data) {\n return AddressBook.$timeout(function() {\n // Extend AddressBook instance from data of addressbooks list.\n // Will inherit attributes such as isEditable and isRemote.\n angular.forEach(AddressBook.$findAll(), function(o, i) {\n if (o.id == data.id) {\n angular.extend(_this, o);\n }\n });\n // Extend AddressBook instance with received data\n _this.init(data);\n // Instanciate Card objects\n angular.forEach(_this.cards, function(o, i) {\n _this.cards[i] = new AddressBook.$Card(o);\n });\n // Instanciate Acl object\n _this.$acl = new AddressBook.$$Acl('Contacts/' + _this.id);\n\n _this.$startRefreshTimeout();\n\n _this.$isLoading = false;\n\n return _this;\n });\n }, function(data) {\n _this.isError = true;\n if (angular.isObject(data)) {\n AddressBook.$timeout(function() {\n angular.extend(_this, data);\n });\n }\n });\n };\n\n /**\n * @function $omit\n * @memberof AddressBook.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Addressbook instance\n */\n AddressBook.prototype.$omit = function() {\n var addressbook = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'cards' &&\n key[0] != '$') {\n addressbook[key] = value;\n }\n });\n return addressbook;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Card\n * @constructor\n * @param {object} futureCardData\n * @param {string} [partial]\n */\n function Card(futureCardData, partial) {\n\n // Data is immediately available\n if (typeof futureCardData.then !== 'function') {\n this.init(futureCardData, partial);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new card;\n // Get UID from the server.\n var newCardData = Card.$$resource.newguid(this.pid);\n this.$unwrap(newCardData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureCardData);\n }\n }\n\n Card.$TEL_TYPES = ['work', 'home', 'cell', 'fax', 'pager'];\n Card.$EMAIL_TYPES = ['work', 'home', 'pref'];\n Card.$URL_TYPES = ['work', 'home', 'pref'];\n Card.$ADDRESS_TYPES = ['work', 'home'];\n\n /**\n * @memberof Card\n * @desc The factory we'll use to register with Angular.\n * @returns the Card constructor\n */\n Card.$factory = ['$timeout', 'sgSettings', 'Resource', 'Preferences', 'Gravatar', function($timeout, Settings, Resource, Preferences, Gravatar) {\n angular.extend(Card, {\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $timeout: $timeout,\n $gravatar: Gravatar\n });\n // Initialize categories from user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoContactsCategories) {\n Card.$categories = Preferences.defaults.SOGoContactsCategories;\n }\n });\n\n return Card; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of Card in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('Card', Card.$factory);\n\n /**\n * @memberof Card\n * @desc Fetch a card from a specific addressbook.\n * @param {string} addressbookId - the addressbook ID\n * @param {string} cardId - the card ID\n * @see {@link AddressBook.$getCard}\n */\n Card.$find = function(addressbookId, cardId) {\n var futureCardData = this.$$resource.fetch([addressbookId, cardId].join('/'), 'view');\n\n if (cardId) return new Card(futureCardData); // a single card\n\n return Card.$unwrapCollection(futureCardData); // a collection of cards\n };\n\n /**\n * @function filterCategories\n * @memberof Card.prototype\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Card.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(Card.$categories, function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @memberof Card\n * @desc Unwrap to a collection of Card instances.\n * @param {object} futureCardData\n */\n Card.$unwrapCollection = function(futureCardData) {\n var collection = {};\n\n collection.$futureCardData = futureCardData;\n\n futureCardData.then(function(cards) {\n Card.$timeout(function() {\n angular.forEach(cards, function(data, index) {\n collection[data.id] = new Card(data);\n });\n });\n });\n\n return collection;\n };\n\n /**\n * @function init\n * @memberof Card.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of card\n */\n Card.prototype.init = function(data, partial) {\n this.refs = [];\n angular.extend(this, data);\n if (!this.$$fullname)\n this.$$fullname = this.$fullname();\n if (!this.$$email)\n this.$$email = this.$preferredEmail(partial);\n if (!this.$$image)\n this.$$image = this.image || Card.$gravatar(this.$preferredEmail(partial), 32);\n this.selected = false;\n\n // An empty attribute to trick md-autocomplete when adding attendees from the appointment editor\n this.empty = ' ';\n };\n\n /**\n * @function $id\n * @memberof Card.prototype\n * @desc Return the card ID.\n * @returns the card ID\n */\n Card.prototype.$id = function() {\n return this.$futureCardData.then(function(data) {\n return data.id;\n });\n };\n\n /**\n * @function $save\n * @memberof Card.prototype\n * @desc Save the card to the server.\n */\n Card.prototype.$save = function() {\n var _this = this,\n action = 'saveAsContact';\n\n if (this.c_component == 'vlist') action = 'saveAsList';\n\n return Card.$$resource.save([this.pid, this.id || '_new_'].join('/'),\n this.$omit(),\n { action: action })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n Card.prototype.$delete = function(attribute, index) {\n if (attribute) {\n if (index > -1 && this[attribute].length > index) {\n this[attribute].splice(index, 1);\n }\n else\n delete this[attribute];\n }\n else {\n // No arguments -- delete card\n return Card.$$resource.remove([this.pid, this.id].join('/'));\n }\n };\n\n Card.prototype.$fullname = function() {\n var fn = this.c_cn || '', names;\n if (fn.length === 0) {\n names = [];\n if (this.c_givenname && this.c_givenname.length > 0)\n names.push(this.c_givenname);\n if (this.nickname && this.nickname.length > 0)\n names.push('' + this.nickname + '');\n if (this.c_sn && this.c_sn.length > 0)\n names.push(this.c_sn);\n if (names.length > 0)\n fn = names.join(' ');\n else if (this.c_org && this.c_org.length > 0) {\n fn = this.c_org;\n }\n else if (this.emails && this.emails.length > 0) {\n fn = _.find(this.emails, function(i) { return i.value !== ''; }).value;\n }\n else if (this.c_cn && this.c_cn.length > 0) {\n fn = this.c_cn;\n }\n }\n\n return fn;\n };\n\n Card.prototype.$description = function() {\n var description = [];\n if (this.title) description.push(this.title);\n if (this.role) description.push(this.role);\n if (this.orgUnits && this.orgUnits.length > 0)\n _.forEach(this.orgUnits, function(unit) {\n if (unit.value !== '')\n description.push(unit.value);\n });\n if (this.org) description.push(this.org);\n if (this.description) description.push(this.description);\n\n return description.join(', ');\n };\n\n /**\n * @function $preferredEmail\n * @memberof Card.prototype\n * @desc Get the preferred email address.\n * @param {string} [partial] - a partial string that the email must match\n * @returns the first email address of type \"pref\" or the first address if none found\n */\n Card.prototype.$preferredEmail = function(partial) {\n var email, re;\n if (partial) {\n re = new RegExp(partial, 'i');\n email = _.find(this.emails, function(o) {\n return re.test(o.value);\n });\n }\n if (email) {\n email = email.value;\n }\n else {\n email = _.find(this.emails, function(o) {\n return o.type == 'pref';\n });\n if (email) {\n email = email.value;\n }\n else if (this.emails && this.emails.length) {\n email = this.emails[0].value;\n }\n else {\n email = '';\n }\n }\n\n return email;\n };\n\n /**\n * @function $shortFormat\n * @memberof Card.prototype\n * @param {string} [partial] - a partial string that the email must match\n * @returns the fullname along with a matching email address in parentheses\n */\n Card.prototype.$shortFormat = function(partial) {\n var fullname = this.$fullname(),\n email = this.$preferredEmail(partial);\n if (email && email != fullname)\n fullname += ' <' + email + '>';\n return fullname;\n };\n\n /**\n * @function $birthday\n * @memberof Card.prototype\n * @returns the formatted birthday object\n */\n Card.prototype.$birthday = function() {\n if (this.birthday) {\n return [this.birthday.getFullYear(), this.birthday.getMonth() + 1, this.birthday.getDate()].join('/');\n }\n return '';\n };\n\n Card.prototype.$isCard = function() {\n return this.c_component == 'vcard';\n };\n\n Card.prototype.$isList = function() {\n return this.c_component == 'vlist';\n };\n\n Card.prototype.$addOrgUnit = function(orgUnit) {\n if (angular.isUndefined(this.orgUnits)) {\n this.orgUnits = [{value: orgUnit}];\n }\n else {\n for (var i = 0; i < this.orgUnits.length; i++) {\n if (this.orgUnits[i].value == orgUnit) {\n break;\n }\n }\n if (i == this.orgUnits.length)\n this.orgUnits.push({value: orgUnit});\n }\n return this.orgUnits.length - 1;\n };\n\n Card.prototype.$addCategory = function(category) {\n if (angular.isUndefined(this.categories)) {\n this.categories = [{value: category}];\n }\n else {\n for (var i = 0; i < this.categories.length; i++) {\n if (this.categories[i].value == category) {\n break;\n }\n }\n if (i == this.categories.length)\n this.categories.push({value: category});\n }\n };\n\n Card.prototype.$addEmail = function(type) {\n if (angular.isUndefined(this.emails)) {\n this.emails = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.emails, function(i) { return i.value === ''; }))) {\n this.emails.push({type: type, value: ''});\n }\n return this.emails.length - 1;\n };\n\n Card.prototype.$addPhone = function(type) {\n if (angular.isUndefined(this.phones)) {\n this.phones = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.phones, function(i) { return i.value === ''; }))) {\n this.phones.push({type: type, value: ''});\n }\n return this.phones.length - 1;\n };\n\n Card.prototype.$addUrl = function(type, url) {\n if (angular.isUndefined(this.urls)) {\n this.urls = [{type: type, value: url}];\n }\n else if (_.isUndefined(_.find(this.urls, function(i) { return i.value == url; }))) {\n this.urls.push({type: type, value: url});\n }\n return this.urls.length - 1;\n };\n\n Card.prototype.$addAddress = function(type, postoffice, street, street2, locality, region, country, postalcode) {\n if (angular.isUndefined(this.addresses)) {\n this.addresses = [{type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode}];\n }\n else if (!_.find(this.addresses, function(i) {\n return i.street == street &&\n i.street2 == street2 &&\n i.locality == locality &&\n i.country == country &&\n i.postalcode == postalcode;\n })) {\n this.addresses.push({type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode});\n }\n return this.addresses.length - 1;\n };\n\n Card.prototype.$addMember = function(email) {\n var card = new Card({email: email, emails: [{value: email}]}),\n i;\n if (angular.isUndefined(this.refs)) {\n this.refs = [card];\n }\n else if (email.length === 0) {\n this.refs.push(card);\n }\n else {\n for (i = 0; i < this.refs.length; i++) {\n if (this.refs[i].email == email) {\n break;\n }\n }\n if (i == this.refs.length)\n this.refs.push(card);\n }\n return this.refs.length - 1;\n };\n\n /**\n * @function $reset\n * @memberof Card.prototype\n * @desc Reset the original state the card's data.\n */\n Card.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n // Reinstanciate Card objects for list members\n angular.forEach(this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n _this.refs[i] = new Card(o);\n });\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function $updateMember\n * @memberof Card.prototype\n * @desc Update an existing list member from a Card instance.\n * A list member has the following attribtues:\n * - email\n * - reference\n * - fn\n * @param {number} index\n * @param {string} email\n * @param {Card} card\n */\n // Card.prototype.$updateMember = function(index, email, card) {\n // var ref = {\n // email: email,\n // emails: [{value: email}],\n // reference: card.c_name,\n // c_cn: card.$fullname()\n // };\n // this.refs[index] = new Card(ref);\n // };\n\n /**\n * @function $unwrap\n * @memberof Card.prototype\n * @desc Unwrap a promise and make a copy of the resolved data.\n * @param {object} futureCardData - a promise of the Card's data\n */\n Card.prototype.$unwrap = function(futureCardData) {\n var _this = this;\n\n // Expose the promise\n this.$futureCardData = futureCardData.then(function(data) {\n _this.init(data);\n // Instanciate Card objects for list members\n angular.forEach(_this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n o.id = o.reference;\n _this.refs[i] = new Card(o);\n });\n if (_this.birthday) {\n _this.birthday = new Date(_this.birthday * 1000);\n }\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return _this;\n });\n };\n\n /**\n * @function $omit\n * @memberof Card.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Card instance\n */\n Card.prototype.$omit = function(deep) {\n var card = {};\n angular.forEach(this, function(value, key) {\n if (key == 'refs') {\n card.refs = _.map(value, function(o) {\n return o.$omit(deep);\n });\n }\n else if (key != 'constructor' && key[0] != '$') {\n if (deep)\n card[key] = angular.copy(value);\n else\n card[key] = value;\n }\n });\n\n // We convert back our birthday object\n if (!deep) {\n if (card.birthday)\n card.birthday = card.birthday.getTime()/1000;\n else\n card.birthday = 0;\n }\n\n return card;\n };\n\n Card.prototype.toString = function() {\n var desc = this.id + ' ' + this.$$fullname;\n\n if (this.$$email)\n desc += ' <' + this.$$email + '>';\n\n return '[' + desc + ']';\n };\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","then","this","init","name","id","newAddressBookData","$$resource","create","$unwrap","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Card","Acl","Preferences","angular","extend","activeUser","$Card","$Preferences","$query","search","value","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Contact","SortingState","parseInt","module","e","factory","$filterAll","options","excludedCards","params","$cards","when","isUndefined","fetch","response","results","card","index","compareIds","data","_","filter","contacts","find","length","splice","each","debug","$add","addressbook","list","sibling","i","isSubscription","$subscriptions","$addressbooks","o","localeCompare","indexOf","pluck","$findAll","_this","$remotes","forEach","isRemote","push","union","$find","addressbookId","$subscribe","uid","path","userResource","addressbookData","prototype","$isLoading","cards","isOwned","isSuperUser","owner","login","$id","$futureAddressBookData","$selectedCount","count","selected","$startRefreshTimeout","cancel","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","$reload","timeInterval","$filter","dry","isDefined","oldIndex","removedCards","findIndex","$rename","$save","$delete","promise","d","defer","remove","resolve","status","reject","$deleteCards","uids","map","post","difference","$copyCards","folder","save","$omit","$getCard","cardId","fullCard","cachedCard","$futureCardData","isError","isObject","key","futureCardData","partial","pid","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Gravatar","$gravatar","SOGoContactsCategories","$categories","join","$unwrapCollection","filterCategories","query","re","RegExp","category","collection","refs","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","empty","action","c_component","$shadowData","attribute","names","fn","c_cn","c_givenname","nickname","c_sn","c_org","emails","$description","description","title","role","orgUnits","unit","email","test","type","$shortFormat","fullname","$birthday","birthday","getFullYear","getMonth","getDate","$isCard","$isList","$addOrgUnit","orgUnit","$addCategory","categories","$addEmail","$addPhone","phones","$addUrl","url","urls","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$reset","reference","Date","deep","copy","getTime","toString","desc"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name AddressBook\n * @constructor\n * @param {object} futureAddressBookData - either an object literal or a promise\n */\n function AddressBook(futureAddressBookData) {\n // Data is immediately available\n if (typeof futureAddressBookData.then !== 'function') {\n this.init(futureAddressBookData);\n if (this.name && !this.id) {\n // Create a new addressbook on the server\n var newAddressBookData = AddressBook.$$resource.create('createFolder', this.name);\n this.$unwrap(newAddressBookData);\n }\n else if (this.id) {\n this.$acl = new AddressBook.$$Acl('Contacts/' + this.id);\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureAddressBookData);\n }\n }\n\n /**\n * @memberof AddressBook\n * @desc The factory we'll use to register with Angular\n * @returns the AddressBook constructor\n */\n AddressBook.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Card', 'Acl', 'Preferences', function($q, $timeout, $log, Settings, Resource, Card, Acl, Preferences) {\n angular.extend(AddressBook, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $Card: Card,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: {search: 'name_or_address', value: '', sort: 'c_cn', asc: 1},\n activeUser: Settings.activeUser(),\n selectedFolder: null,\n $refreshTimeout: null\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Contact.SortingState) {\n AddressBook.$query.sort = Preferences.settings.Contact.SortingState[0];\n AddressBook.$query.asc = parseInt(Preferences.settings.Contact.SortingState[1]);\n }\n });\n return AddressBook; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of AddressBook in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('AddressBook', AddressBook.$factory);\n\n /**\n * @memberof AddressBook\n * @desc Search for cards among all addressbooks matching some criterias.\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query (excludeGroups and excludeLists)\n * @param {object[]} excludedCards - a list of Card objects that must be excluded from the results\n * @returns a collection of Cards instances\n */\n AddressBook.$filterAll = function(search, options, excludedCards) {\n var params = {search: search};\n\n if (!search) {\n // No query specified\n AddressBook.$cards = [];\n return AddressBook.$q.when(AddressBook.$cards);\n }\n if (angular.isUndefined(AddressBook.$cards)) {\n // First session query\n AddressBook.$cards = [];\n }\n else if (AddressBook.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(AddressBook.$cards);\n }\n AddressBook.$query.value = 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 AddressBook.$log.debug(AddressBook.$cards);\n return AddressBook.$cards;\n });\n };\n\n /**\n * @memberof AddressBook\n * @desc Add a new addressbook to the static list of addressbooks\n * @param {AddressBook} addressbook - an Addressbook object instance\n */\n AddressBook.$add = function(addressbook) {\n // Insert new addressbook at proper index\n var list, sibling, i;\n\n list = addressbook.isSubscription? this.$subscriptions : this.$addressbooks;\n sibling = _.find(list, function(o) {\n return (addressbook.id == 'personal' ||\n (o.id != 'personal' &&\n o.name.localeCompare(addressbook.name) === 1));\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, addressbook);\n };\n\n /**\n * @memberof AddressBook\n * @desc Set or get the list of addressbooks. Will instantiate a new AddressBook object for each item.\n * @param {array} [data] - the metadata of the addressbooks\n * @returns the list of addressbooks\n */\n AddressBook.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$addressbooks = [];\n this.$subscriptions = [];\n this.$remotes = [];\n // Instanciate AddressBook objects\n angular.forEach(data, function(o, i) {\n var addressbook = new AddressBook(o);\n if (addressbook.isRemote)\n _this.$remotes.push(addressbook);\n else if (addressbook.isSubscription)\n _this.$subscriptions.push(addressbook);\n else\n _this.$addressbooks.push(addressbook);\n });\n }\n return _.union(this.$addressbooks, this.$subscriptions, this.$remotes);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Fetch list of cards and return an AddressBook instance.\n * @param {string} addressbookId - the addressbook identifier\n * @returns an AddressBook object instance\n */\n AddressBook.$find = function(addressbookId) {\n var futureAddressBookData = AddressBook.$Preferences.ready().then(function() {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$query);\n });\n return new AddressBook(futureAddressBookData);\n };\n\n /**\n * @memberOf AddressBook\n * @desc Subscribe to another user's addressbook and add it to the list of addressbooks.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n AddressBook.$subscribe = function(uid, path) {\n var _this = this;\n return AddressBook.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(addressbookData) {\n var addressbook = new AddressBook(addressbookData);\n if (_.isUndefined(_.find(_this.$subscriptions, function(o) {\n return o.id == addressbookData.id;\n }))) {\n // Not already subscribed\n AddressBook.$add(addressbook);\n }\n return addressbook;\n });\n };\n\n /**\n * @function init\n * @memberof AddressBook.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of addressbook\n */\n AddressBook.prototype.init = function(data) {\n this.$isLoading = true;\n this.$cards = [];\n this.cards = [];\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = AddressBook.activeUser.isSuperUser || this.owner == AddressBook.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != AddressBook.activeUser.login;\n };\n\n /**\n * @function $id\n * @memberof AddressBook.prototype\n * @desc Resolve the addressbook id.\n * @returns a promise of the addressbook id\n */\n AddressBook.prototype.$id = function() {\n if (this.id) {\n // Object already unwrapped\n return AddressBook.$q.when(this.id);\n }\n else {\n // Wait until object is unwrapped\n return this.$futureAddressBookData.then(function(addressbook) {\n return addressbook.id;\n });\n }\n };\n\n /**\n * @function $selectedCount\n * @memberof AddressBook.prototype\n * @desc Return the number of cards selected by the user.\n * @returns the number of selected cards\n */\n AddressBook.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.cards) {\n count = (_.filter(this.cards, function(card) { return card.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof AddressBook.prototype\n * @desc Starts the refresh timeout for the current selected address book\n */\n AddressBook.prototype.$startRefreshTimeout = function() {\n var _this = this;\n\n if (AddressBook.$refreshTimeout)\n AddressBook.$timeout.cancel(AddressBook.$refreshTimeout);\n\n AddressBook.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = AddressBook.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, AddressBook.prototype.$reload);\n AddressBook.$refreshTimeout = AddressBook.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $reload\n * @memberof AddressBook.prototype\n * @desc Reload list of cards\n * @returns a promise of the Cards instances\n */\n AddressBook.prototype.$reload = function() {\n var _this = this;\n\n this.$startRefreshTimeout();\n return this.$filter();\n };\n\n /**\n * @function $filter\n * @memberof AddressBook.prototype\n * @desc Search for cards matching some criterias\n * @param {string} search - the search string to match\n * @param {object} [options] - additional options to the query\n * @returns a collection of Cards instances\n */\n AddressBook.prototype.$filter = function(search, options, excludedCards) {\n var _this = this;\n\n if (!options || !options.dry)\n this.$isLoading = true;\n\n return AddressBook.$Preferences.ready().then(function() {\n if (options) {\n angular.extend(AddressBook.$query, options);\n\n if (options.dry) {\n if (!search) {\n // No query specified\n _this.$cards = [];\n return AddressBook.$q.when(_this.$cards);\n }\n else if (AddressBook.$query.value == search) {\n // Query hasn't changed\n return AddressBook.$q.when(_this.$cards);\n }\n }\n }\n\n if (angular.isDefined(search))\n AddressBook.$query.value = search;\n\n return _this.$id().then(function(addressbookId) {\n return AddressBook.$$resource.fetch(addressbookId, 'view', AddressBook.$query);\n }).then(function(response) {\n var results, cards, card, index,\n compareIds = function(data) {\n return _this.id == data.id;\n };\n if (options && options.dry) {\n // Don't keep a copy of the resulting cards.\n // This is usefull when doing autocompletion.\n cards = _this.$cards;\n }\n else {\n cards = _this.cards;\n }\n if (excludedCards) {\n // Remove excluded cards from results\n results = _.filter(response.cards, function(card) {\n return _.isUndefined(_.find(excludedCards, compareIds, card));\n });\n }\n else {\n results = response.cards;\n }\n // Remove cards that no longer match the search query\n for (index = cards.length - 1; index >= 0; index--) {\n card = cards[index];\n if (_.isUndefined(_.find(results, compareIds, card))) {\n cards.splice(index, 1);\n }\n }\n // Add new cards matching the search query\n _.each(results, function(data, index) {\n if (_.isUndefined(_.find(cards, compareIds, data))) {\n var card = new AddressBook.$Card(data, search);\n cards.splice(index, 0, card);\n }\n });\n // Respect the order of the results\n _.each(results, function(data, index) {\n var oldIndex, removedCards;\n if (cards[index].id != data.id) {\n oldIndex = _.findIndex(cards, compareIds, data);\n removedCards = cards.splice(oldIndex, 1);\n cards.splice(index, 0, removedCards[0]);\n }\n });\n _this.$isLoading = false;\n return cards;\n });\n });\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(AddressBook.$addressbooks, 'id'), this.id);\n this.name = name;\n AddressBook.$addressbooks.splice(i, 1);\n AddressBook.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof AddressBook.prototype\n * @desc Delete the addressbook from the server and the static list of addressbooks.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$delete = function() {\n var _this = this,\n d = AddressBook.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = AddressBook.$$resource.fetch(this.id, 'unsubscribe');\n list = AddressBook.$subscriptions;\n }\n else {\n promise = AddressBook.$$resource.remove(this.id);\n list = AddressBook.$addressbooks;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteCards\n * @memberof AddressBook.prototype\n * @desc Delete multiple cards from addressbook.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$deleteCards = function(cards) {\n\n var uids = _.map(cards, function(card) { return card.id; });\n var _this = this;\n \n return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: uids}).then(function() {\n _this.cards = _.difference(_this.cards, cards);\n });\n };\n\n /**\n * @function $copyCards\n * @memberof AddressBook.prototype\n * @desc Copy multiple cards from addressbook to an other one.\n * @return a promise of the HTTP operation\n */\n AddressBook.prototype.$copyCards = function(cards, folder) {\n var uids = _.map(cards, function(card) { return card.id; });\n return AddressBook.$$resource.post(this.id, 'copy', {uids: uids, folder: folder});\n };\n\n /**\n * @function $save\n * @memberof AddressBook.prototype\n * @desc Save the addressbook to the server. This currently can only affect the name of the addressbook.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$save = function() {\n return AddressBook.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $getCard\n * @memberof AddressBook.prototype\n * @desc Fetch the card attributes from the server.\n * @returns a promise of the HTTP operation\n */\n AddressBook.prototype.$getCard = function(cardId) {\n var _this = this;\n\n return this.$id().then(function(addressbookId) {\n var fullCard,\n cachedCard = _.find(_this.cards, function(data) {\n return cardId == data.id;\n });\n\n if (cachedCard && cachedCard.$futureCardData)\n // Full card is available\n return cachedCard;\n\n fullCard = AddressBook.$Card.$find(addressbookId, cardId);\n fullCard.$id().then(function(cardId) {\n // Extend the Card object of the addressbook list with the full card description\n if (cachedCard)\n angular.extend(cachedCard, fullCard);\n });\n return fullCard;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof AddressBook.prototype\n * @desc Unwrap a promise and instanciate new Card objects using received data.\n * @param {promise} futureAddressBookData - a promise of the AddressBook's data\n */\n AddressBook.prototype.$unwrap = function(futureAddressBookData) {\n var _this = this;\n\n // Expose and sesolve the promise\n this.$futureAddressBookData = futureAddressBookData.then(function(data) {\n return AddressBook.$timeout(function() {\n // Extend AddressBook instance from data of addressbooks list.\n // Will inherit attributes such as isEditable and isRemote.\n angular.forEach(AddressBook.$findAll(), function(o, i) {\n if (o.id == data.id) {\n angular.extend(_this, o);\n }\n });\n // Extend AddressBook instance with received data\n _this.init(data);\n // Instanciate Card objects\n angular.forEach(_this.cards, function(o, i) {\n _this.cards[i] = new AddressBook.$Card(o);\n });\n // Instanciate Acl object\n _this.$acl = new AddressBook.$$Acl('Contacts/' + _this.id);\n\n _this.$startRefreshTimeout();\n\n _this.$isLoading = false;\n\n return _this;\n });\n }, function(data) {\n _this.isError = true;\n if (angular.isObject(data)) {\n AddressBook.$timeout(function() {\n angular.extend(_this, data);\n });\n }\n });\n };\n\n /**\n * @function $omit\n * @memberof AddressBook.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Addressbook instance\n */\n AddressBook.prototype.$omit = function() {\n var addressbook = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'cards' &&\n key[0] != '$') {\n addressbook[key] = value;\n }\n });\n return addressbook;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Card\n * @constructor\n * @param {object} futureCardData\n * @param {string} [partial]\n */\n function Card(futureCardData, partial) {\n\n // Data is immediately available\n if (typeof futureCardData.then !== 'function') {\n this.init(futureCardData, partial);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new card;\n // Get UID from the server.\n var newCardData = Card.$$resource.newguid(this.pid);\n this.$unwrap(newCardData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureCardData);\n }\n }\n\n Card.$TEL_TYPES = ['work', 'home', 'cell', 'fax', 'pager'];\n Card.$EMAIL_TYPES = ['work', 'home', 'pref'];\n Card.$URL_TYPES = ['work', 'home', 'pref'];\n Card.$ADDRESS_TYPES = ['work', 'home'];\n\n /**\n * @memberof Card\n * @desc The factory we'll use to register with Angular.\n * @returns the Card constructor\n */\n Card.$factory = ['$timeout', 'sgSettings', 'Resource', 'Preferences', 'Gravatar', function($timeout, Settings, Resource, Preferences, Gravatar) {\n angular.extend(Card, {\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Contacts', Settings.activeUser()),\n $timeout: $timeout,\n $gravatar: Gravatar\n });\n // Initialize categories from user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoContactsCategories) {\n Card.$categories = Preferences.defaults.SOGoContactsCategories;\n }\n });\n\n return Card; // return constructor\n }];\n\n /**\n * @module SOGo.ContactsUI\n * @desc Factory registration of Card in Angular module.\n */\n try {\n angular.module('SOGo.ContactsUI');\n }\n catch(e) {\n angular.module('SOGo.ContactsUI', ['SOGo.Common']);\n }\n angular.module('SOGo.ContactsUI')\n .factory('Card', Card.$factory);\n\n /**\n * @memberof Card\n * @desc Fetch a card from a specific addressbook.\n * @param {string} addressbookId - the addressbook ID\n * @param {string} cardId - the card ID\n * @see {@link AddressBook.$getCard}\n */\n Card.$find = function(addressbookId, cardId) {\n var futureCardData = this.$$resource.fetch([addressbookId, cardId].join('/'), 'view');\n\n if (cardId) return new Card(futureCardData); // a single card\n\n return Card.$unwrapCollection(futureCardData); // a collection of cards\n };\n\n /**\n * @function filterCategories\n * @memberof Card.prototype\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Card.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(Card.$categories, function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @memberof Card\n * @desc Unwrap to a collection of Card instances.\n * @param {object} futureCardData\n */\n Card.$unwrapCollection = function(futureCardData) {\n var collection = {};\n\n collection.$futureCardData = futureCardData;\n\n futureCardData.then(function(cards) {\n Card.$timeout(function() {\n angular.forEach(cards, function(data, index) {\n collection[data.id] = new Card(data);\n });\n });\n });\n\n return collection;\n };\n\n /**\n * @function init\n * @memberof Card.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of card\n */\n Card.prototype.init = function(data, partial) {\n this.refs = [];\n angular.extend(this, data);\n if (!this.$$fullname)\n this.$$fullname = this.$fullname();\n if (!this.$$email)\n this.$$email = this.$preferredEmail(partial);\n if (!this.$$image)\n this.$$image = this.image || Card.$gravatar(this.$preferredEmail(partial), 32);\n this.selected = false;\n\n // An empty attribute to trick md-autocomplete when adding attendees from the appointment editor\n this.empty = ' ';\n };\n\n /**\n * @function $id\n * @memberof Card.prototype\n * @desc Return the card ID.\n * @returns the card ID\n */\n Card.prototype.$id = function() {\n return this.$futureCardData.then(function(data) {\n return data.id;\n });\n };\n\n /**\n * @function $save\n * @memberof Card.prototype\n * @desc Save the card to the server.\n */\n Card.prototype.$save = function() {\n var _this = this,\n action = 'saveAsContact';\n\n if (this.c_component == 'vlist') action = 'saveAsList';\n\n return Card.$$resource.save([this.pid, this.id || '_new_'].join('/'),\n this.$omit(),\n { action: action })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n Card.prototype.$delete = function(attribute, index) {\n if (attribute) {\n if (index > -1 && this[attribute].length > index) {\n this[attribute].splice(index, 1);\n }\n else\n delete this[attribute];\n }\n else {\n // No arguments -- delete card\n return Card.$$resource.remove([this.pid, this.id].join('/'));\n }\n };\n\n Card.prototype.$fullname = function() {\n var fn = this.c_cn || '', names;\n if (fn.length === 0) {\n names = [];\n if (this.c_givenname && this.c_givenname.length > 0)\n names.push(this.c_givenname);\n if (this.nickname && this.nickname.length > 0)\n names.push('' + this.nickname + '');\n if (this.c_sn && this.c_sn.length > 0)\n names.push(this.c_sn);\n if (names.length > 0)\n fn = names.join(' ');\n else if (this.c_org && this.c_org.length > 0) {\n fn = this.c_org;\n }\n else if (this.emails && this.emails.length > 0) {\n fn = _.find(this.emails, function(i) { return i.value !== ''; }).value;\n }\n else if (this.c_cn && this.c_cn.length > 0) {\n fn = this.c_cn;\n }\n }\n\n return fn;\n };\n\n Card.prototype.$description = function() {\n var description = [];\n if (this.title) description.push(this.title);\n if (this.role) description.push(this.role);\n if (this.orgUnits && this.orgUnits.length > 0)\n _.forEach(this.orgUnits, function(unit) {\n if (unit.value !== '')\n description.push(unit.value);\n });\n if (this.c_org) description.push(this.c_org);\n if (this.description) description.push(this.description);\n\n return description.join(', ');\n };\n\n /**\n * @function $preferredEmail\n * @memberof Card.prototype\n * @desc Get the preferred email address.\n * @param {string} [partial] - a partial string that the email must match\n * @returns the first email address of type \"pref\" or the first address if none found\n */\n Card.prototype.$preferredEmail = function(partial) {\n var email, re;\n if (partial) {\n re = new RegExp(partial, 'i');\n email = _.find(this.emails, function(o) {\n return re.test(o.value);\n });\n }\n if (email) {\n email = email.value;\n }\n else {\n email = _.find(this.emails, function(o) {\n return o.type == 'pref';\n });\n if (email) {\n email = email.value;\n }\n else if (this.emails && this.emails.length) {\n email = this.emails[0].value;\n }\n else {\n email = '';\n }\n }\n\n return email;\n };\n\n /**\n * @function $shortFormat\n * @memberof Card.prototype\n * @param {string} [partial] - a partial string that the email must match\n * @returns the fullname along with a matching email address in parentheses\n */\n Card.prototype.$shortFormat = function(partial) {\n var fullname = this.$fullname(),\n email = this.$preferredEmail(partial);\n if (email && email != fullname)\n fullname += ' <' + email + '>';\n return fullname;\n };\n\n /**\n * @function $birthday\n * @memberof Card.prototype\n * @returns the formatted birthday object\n */\n Card.prototype.$birthday = function() {\n if (this.birthday) {\n return [this.birthday.getFullYear(), this.birthday.getMonth() + 1, this.birthday.getDate()].join('/');\n }\n return '';\n };\n\n Card.prototype.$isCard = function() {\n return this.c_component == 'vcard';\n };\n\n Card.prototype.$isList = function() {\n return this.c_component == 'vlist';\n };\n\n Card.prototype.$addOrgUnit = function(orgUnit) {\n if (angular.isUndefined(this.orgUnits)) {\n this.orgUnits = [{value: orgUnit}];\n }\n else {\n for (var i = 0; i < this.orgUnits.length; i++) {\n if (this.orgUnits[i].value == orgUnit) {\n break;\n }\n }\n if (i == this.orgUnits.length)\n this.orgUnits.push({value: orgUnit});\n }\n return this.orgUnits.length - 1;\n };\n\n Card.prototype.$addCategory = function(category) {\n if (angular.isUndefined(this.categories)) {\n this.categories = [{value: category}];\n }\n else {\n for (var i = 0; i < this.categories.length; i++) {\n if (this.categories[i].value == category) {\n break;\n }\n }\n if (i == this.categories.length)\n this.categories.push({value: category});\n }\n };\n\n Card.prototype.$addEmail = function(type) {\n if (angular.isUndefined(this.emails)) {\n this.emails = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.emails, function(i) { return i.value === ''; }))) {\n this.emails.push({type: type, value: ''});\n }\n return this.emails.length - 1;\n };\n\n Card.prototype.$addPhone = function(type) {\n if (angular.isUndefined(this.phones)) {\n this.phones = [{type: type, value: ''}];\n }\n else if (_.isUndefined(_.find(this.phones, function(i) { return i.value === ''; }))) {\n this.phones.push({type: type, value: ''});\n }\n return this.phones.length - 1;\n };\n\n Card.prototype.$addUrl = function(type, url) {\n if (angular.isUndefined(this.urls)) {\n this.urls = [{type: type, value: url}];\n }\n else if (_.isUndefined(_.find(this.urls, function(i) { return i.value == url; }))) {\n this.urls.push({type: type, value: url});\n }\n return this.urls.length - 1;\n };\n\n Card.prototype.$addAddress = function(type, postoffice, street, street2, locality, region, country, postalcode) {\n if (angular.isUndefined(this.addresses)) {\n this.addresses = [{type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode}];\n }\n else if (!_.find(this.addresses, function(i) {\n return i.street == street &&\n i.street2 == street2 &&\n i.locality == locality &&\n i.country == country &&\n i.postalcode == postalcode;\n })) {\n this.addresses.push({type: type, postoffice: postoffice, street: street, street2: street2, locality: locality, region: region, country: country, postalcode: postalcode});\n }\n return this.addresses.length - 1;\n };\n\n Card.prototype.$addMember = function(email) {\n var card = new Card({email: email, emails: [{value: email}]}),\n i;\n if (angular.isUndefined(this.refs)) {\n this.refs = [card];\n }\n else if (email.length === 0) {\n this.refs.push(card);\n }\n else {\n for (i = 0; i < this.refs.length; i++) {\n if (this.refs[i].email == email) {\n break;\n }\n }\n if (i == this.refs.length)\n this.refs.push(card);\n }\n return this.refs.length - 1;\n };\n\n /**\n * @function $reset\n * @memberof Card.prototype\n * @desc Reset the original state the card's data.\n */\n Card.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n // Reinstanciate Card objects for list members\n angular.forEach(this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n _this.refs[i] = new Card(o);\n });\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function $updateMember\n * @memberof Card.prototype\n * @desc Update an existing list member from a Card instance.\n * A list member has the following attribtues:\n * - email\n * - reference\n * - fn\n * @param {number} index\n * @param {string} email\n * @param {Card} card\n */\n // Card.prototype.$updateMember = function(index, email, card) {\n // var ref = {\n // email: email,\n // emails: [{value: email}],\n // reference: card.c_name,\n // c_cn: card.$fullname()\n // };\n // this.refs[index] = new Card(ref);\n // };\n\n /**\n * @function $unwrap\n * @memberof Card.prototype\n * @desc Unwrap a promise and make a copy of the resolved data.\n * @param {object} futureCardData - a promise of the Card's data\n */\n Card.prototype.$unwrap = function(futureCardData) {\n var _this = this;\n\n // Expose the promise\n this.$futureCardData = futureCardData.then(function(data) {\n _this.init(data);\n // Instanciate Card objects for list members\n angular.forEach(_this.refs, function(o, i) {\n if (o.email) o.emails = [{value: o.email}];\n o.id = o.reference;\n _this.refs[i] = new Card(o);\n });\n if (_this.birthday) {\n _this.birthday = new Date(_this.birthday * 1000);\n }\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return _this;\n });\n };\n\n /**\n * @function $omit\n * @memberof Card.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Card instance\n */\n Card.prototype.$omit = function(deep) {\n var card = {};\n angular.forEach(this, function(value, key) {\n if (key == 'refs') {\n card.refs = _.map(value, function(o) {\n return o.$omit(deep);\n });\n }\n else if (key != 'constructor' && key[0] != '$') {\n if (deep)\n card[key] = angular.copy(value);\n else\n card[key] = value;\n }\n });\n\n // We convert back our birthday object\n if (!deep) {\n if (card.birthday)\n card.birthday = card.birthday.getTime()/1000;\n else\n card.birthday = 0;\n }\n\n return card;\n };\n\n Card.prototype.toString = function() {\n var desc = this.id + ' ' + this.$$fullname;\n\n if (this.$$email)\n desc += ' <' + this.$$email + '>';\n\n return '[' + desc + ']';\n };\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.app.popup.js b/UI/WebServerResources/js/Mailer.app.popup.js new file mode 100644 index 000000000..738cbbceb --- /dev/null +++ b/UI/WebServerResources/js/Mailer.app.popup.js @@ -0,0 +1,2 @@ +!function(){"use strict";function configure($stateProvider,$urlRouterProvider){$stateProvider.state("mail",{url:"/Mail","abstract":!0,views:{message:{template:""}},resolve:{stateAccounts:stateAccounts}}).state("mail.account",{url:"/:accountId","abstract":!0,template:'',resolve:{stateAccount:stateAccount}}).state("mail.account.mailbox",{url:"/:mailboxId","abstract":!0,template:'',resolve:{stateMailbox:stateMailbox}}).state("mail.account.mailbox.newMessage",{url:"/new",views:{"message@":{template:"",controller:"MessageEditorControllerPopup"}},resolve:{stateMessage:stateNewMessage}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:stateMessage}}).state("mail.account.mailbox.message.edit",{url:"/edit",views:{"message@":{templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor"}},resolve:{stateContent:stateContent}}).state("mail.account.mailbox.message.action",{url:"/{actionName:(?:reply|replyall|forward)}",views:{message:{templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor"}}}),$urlRouterProvider.otherwise("/Mail/0/folderINBOX/new")}function stateAccounts($q,Account){var promise=Account.$findAll();return promise.then(function(accounts){var 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 stateNewMessage(stateAccount){return stateAccount.$newMessage()}function stateMessage(encodeUriFilter,$stateParams,$state,stateMailbox,Message){var data={uid:$stateParams.messageId.toString()},message=new Message(stateMailbox.$account.id,stateMailbox,data);return message.$reload()}function stateContent(stateMessage){return stateMessage.$editableContent()}function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}function MessageEditorControllerPopup($window,$mdDialog,stateAccounts,stateMessage){$mdDialog.show({hasBackdrop:!1,disableParentScroll:!1,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:stateAccounts,stateMessage:stateMessage,stateRecipients:[]}})["finally"](function(){$window.opener&&$window.close()})}angular.module("SOGo.MailerUI",["ngSanitize","ui.router","ck","angularFileUpload","SOGo.Common","SOGo.ContactsUI","ngAnimate","SOGo.PreferencesUI"]).config(configure).run(runBlock).controller("MessageEditorControllerPopup",MessageEditorControllerPopup),configure.$inject=["$stateProvider","$urlRouterProvider"],stateAccounts.$inject=["$q","Account"],stateAccount.$inject=["$stateParams","stateAccounts"],stateMailbox.$inject=["$stateParams","stateAccount","decodeUriFilter"],stateNewMessage.$inject=["stateAccount"],stateMessage.$inject=["encodeUriFilter","$stateParams","$state","stateMailbox","Message"],stateContent.$inject=["stateMessage"],runBlock.$inject=["$rootScope"],MessageEditorControllerPopup.$inject=["$window","$mdDialog","stateAccounts","stateMessage"]}(); +//# sourceMappingURL=Mailer.app.popup.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.app.popup.js.map b/UI/WebServerResources/js/Mailer.app.popup.js.map new file mode 100644 index 000000000..3f06a2f31 --- /dev/null +++ b/UI/WebServerResources/js/Mailer.app.popup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Mailer.app.popup.js","sources":["Mailer/Mailer.popup.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","message","template","resolve","stateAccounts","stateAccount","stateMailbox","message@","controller","stateMessage","stateNewMessage","templateUrl","controllerAs","stateContent","otherwise","$q","Account","promise","$findAll","then","accounts","promises","angular","forEach","account","i","mailboxes","$getMailboxes","push","objects","all","$stateParams","_","find","id","accountId","decodeUriFilter","_find","mailboxId","mailbox","o","path","children","length","$mailboxes","$newMessage","encodeUriFilter","$state","Message","data","uid","messageId","toString","$account","$reload","$editableContent","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","MessageEditorControllerPopup","$window","$mdDialog","show","hasBackdrop","disableParentScroll","clickOutsideToClose","escapeToClose","locals","stateRecipients","opener","close","module","config","run","$inject"],"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 .controller('MessageEditorControllerPopup', MessageEditorControllerPopup);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('mail', {\n url: '/Mail',\n abstract: true,\n views: {\n message: {\n template: ''\n }\n },\n resolve: {\n stateAccounts: stateAccounts\n }\n })\n .state('mail.account', {\n url: '/:accountId',\n abstract: true,\n template: '',\n resolve: {\n stateAccount: stateAccount\n }\n })\n .state('mail.account.mailbox', {\n url: '/:mailboxId',\n abstract: true,\n template: '',\n resolve: {\n stateMailbox: stateMailbox\n }\n })\n .state('mail.account.mailbox.newMessage', {\n url: '/new',\n views: {\n 'message@': {\n template: '',\n controller: 'MessageEditorControllerPopup'\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 'message@': {\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 message: {\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/0/folderINBOX/new');\n }\n\n /**\n * @ngInject\n */\n stateAccounts.$inject = ['$q', 'Account'];\n function stateAccounts($q, Account) {\n var promise = Account.$findAll();\n // Fetch list of mailboxes for each account\n return promise.then(function(accounts) {\n var promises = [];\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 /**\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 stateNewMessage.$inject = ['stateAccount'];\n function stateNewMessage(stateAccount) {\n return stateAccount.$newMessage();\n }\n\n /**\n * @ngInject\n */\n stateMessage.$inject = ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'Message'];\n function stateMessage(encodeUriFilter, $stateParams, $state, stateMailbox, Message) {\n var data = { uid: $stateParams.messageId.toString() },\n message = new Message(stateMailbox.$account.id, stateMailbox, data);\n\n return message.$reload();\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 * @ngInject\n */\n MessageEditorControllerPopup.$inject = ['$window', '$mdDialog', 'stateAccounts', 'stateMessage'];\n function MessageEditorControllerPopup($window, $mdDialog, stateAccounts, stateMessage) {\n $mdDialog\n .show({\n hasBackdrop: false,\n disableParentScroll: false,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: stateAccounts,\n stateMessage: stateMessage,\n stateRecipients: []\n }\n })\n .finally(function() {\n if ($window.opener)\n $window.close();\n });\n }\n \n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.js b/UI/WebServerResources/js/Mailer.js index c2228f815..8775cea2f 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 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.virtualMailbox",{url:"/virtual",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:stateVirtualMailbox}}).state("mail.account.virtualMailbox.message",{url:"/:mailboxId/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMailbox:stateVirtualMailboxOfMessage,stateMessage:stateMessage}}).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(Mailbox,$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},Mailbox.$virtualMode?Mailbox.selectedFolder:_find(stateAccount.$mailboxes)}function stateMessages($q,Mailbox,stateMailbox){return Mailbox.$virtualMode?[]:stateMailbox.$filter()}function stateVirtualMailbox($q,Mailbox){return Mailbox.$virtualMode?Mailbox.selectedFolder:$q.reject("No virtual mailbox defined")}function stateVirtualMailboxOfMessage($q,Mailbox,decodeUriFilter,$stateParams){var mailboxId=decodeUriFilter($stateParams.mailboxId);return Mailbox.$virtualMode?_.find(Mailbox.selectedFolder.$mailboxes,function(mailboxObject){return mailboxObject.path==mailboxId}):$q.reject("No virtual mailbox defined for message")}function stateMessage(Mailbox,encodeUriFilter,$stateParams,$state,stateMailbox){var message;return(message=_.find(stateMailbox.$messages,function(messageObject){return messageObject.uid==$stateParams.messageId}))?(stateMailbox.selectedMessage=$stateParams.messageId,message.$reload()):void $state.go("mail.account.mailbox",{accountId:stateMailbox.$account.id,mailboxId:encodeUriFilter(stateMailbox.path)})}function runBlock($rootScope,$log,$state){$rootScope.$on("$stateChangeError",function(event,toState,toParams,fromState,fromParams,error){$log.error(error),$state.go("mail")}),$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){$log.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=["Mailbox","$stateParams","stateAccount","decodeUriFilter"],stateMessages.$inject=["$q","Mailbox","stateMailbox"],stateVirtualMailbox.$inject=["$q","Mailbox"],stateVirtualMailboxOfMessage.$inject=["$q","Mailbox","decodeUriFilter","$stateParams"],stateMessage.$inject=["Mailbox","encodeUriFilter","$stateParams","$state","stateMailbox"],runBlock.$inject=["$rootScope","$log","$state"]}(); //# 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 3a1804345..3d4febdd4 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/sgIMIP.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","mailboxes","templateUrl","controller","controllerAs","resolve","stateAccounts","abstract","mailbox","template","stateAccount","mailbox@mail","stateMailbox","stateMessages","message","stateMessage","otherwise","$q","Account","accounts","$findAll","mailAccounts","promises","angular","forEach","account","i","$getMailboxes","push","then","objects","all","$stateParams","_","find","id","accountId","decodeUriFilter","_find","mailboxId","o","path","children","length","$mailboxes","$filter","encodeUriFilter","$state","$messages","messageObject","uid","messageId","selectedMessage","$reload","go","$account","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","module","config","run","$inject","sgImip","link","scope","iElement","attrs","ctrl","pathToAttachment","sgImipPath","restrict","sgImipController","$scope","User","vm","this","delegateInvitation","delegatedTo","searchText","userFilter","$query","iCalendarAction","action","data","receiveUpdates","c_email","viewer","$imipAction","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGo.MailerUI module */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.MailerUI', ['ngSanitize', 'ui.router', 'ck', 'angularFileUpload', 'SOGo.Common', 'SOGo.ContactsUI', 'ngAnimate', 'SOGo.PreferencesUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('mail', {\n url: '/Mail',\n views: {\n mailboxes: {\n templateUrl: 'UIxMailMainFrame', // UI/Templates/MailerUI/UIxMailMainFrame.wox\n controller: 'MailboxesController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAccounts: stateAccounts\n }\n })\n .state('mail.account', {\n url: '/:accountId',\n abstract: true,\n views: {\n mailbox: {\n template: ''\n }\n },\n resolve: {\n stateAccount: stateAccount\n }\n })\n .state('mail.account.mailbox', {\n url: '/:mailboxId',\n views: {\n 'mailbox@mail': {\n templateUrl: 'UIxMailFolderTemplate', // UI/Templates/MailerUI/UIxMailFolderTemplate.wox\n controller: 'MailboxController',\n controllerAs: 'mailbox'\n }\n },\n resolve: {\n stateMailbox: stateMailbox,\n stateMessages: stateMessages\n }\n })\n // .state('mail.account.mailbox.newMessage', {\n // url: '/new',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateMessage: stateNewMessage\n // }\n // })\n .state('mail.account.mailbox.message', {\n url: '/:messageId',\n views: {\n message: {\n templateUrl: 'UIxMailViewTemplate', // UI/Templates/MailerUI/UIxMailViewTemplate.wox\n controller: 'MessageController',\n controllerAs: 'viewer'\n }\n },\n resolve: {\n stateMessage: stateMessage\n }\n });\n // .state('mail.account.mailbox.message.edit', {\n // url: '/edit',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // },\n // resolve: {\n // stateContent: stateContent\n // }\n // })\n // .state('mail.account.mailbox.message.action', {\n // url: '/{actionName:(?:reply|replyall|forward)}',\n // views: {\n // 'mailbox@mail': {\n // templateUrl: 'UIxMailEditor', // UI/Templates/MailerUI/UIxMailEditor.wox\n // controller: 'MessageEditorController',\n // controllerAs: 'editor'\n // }\n // }\n // });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/Mail');\n\n // Set default configuration for tags input\n // tagsInputConfigProvider.setDefaults('tagsInput', {\n // addOnComma: false,\n // replaceSpacesWithDashes: false,\n // allowedTagsPattern: /([\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+\\.)*[\\w\\!\\#$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`{\\|\\}\\~]+@((((([a-z0-9]{1}[a-z0-9\\-]{0,62}[a-z0-9]{1})|[a-z])\\.)+[a-z]{2,})|(\\d{1,3}\\.){3}\\d{1,3}(\\:\\d{1,5})?)/i\n // });\n }\n\n /**\n * @ngInject\n */\n stateAccounts.$inject = ['$q', 'Account'];\n function stateAccounts($q, Account) {\n var accounts = Account.$findAll(mailAccounts),\n promises = [];\n // Fetch list of mailboxes for each account\n angular.forEach(accounts, function(account, i) {\n var mailboxes = account.$getMailboxes();\n promises.push(mailboxes.then(function(objects) {\n return account;\n }));\n });\n return $q.all(promises);\n }\n\n /**\n * @ngInject\n */\n stateAccount.$inject = ['$stateParams', 'stateAccounts'];\n function stateAccount($stateParams, stateAccounts) {\n return _.find(stateAccounts, function(account) {\n return account.id == $stateParams.accountId;\n });\n }\n\n /**\n * @ngInject\n */\n stateMailbox.$inject = ['$stateParams', 'stateAccount', 'decodeUriFilter'];\n function stateMailbox($stateParams, stateAccount, decodeUriFilter) {\n var mailboxId = decodeUriFilter($stateParams.mailboxId),\n _find;\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == mailboxId;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n return _find(stateAccount.$mailboxes);\n }\n\n /**\n * @ngInject\n */\n stateMessages.$inject = ['stateMailbox'];\n function stateMessages(stateMailbox) {\n return stateMailbox.$filter();\n }\n\n /**\n * @ngInject\n */\n // stateNewMessage.$inject = ['stateAccount'];\n // function stateNewMessage(stateAccount) {\n // return stateAccount.$newMessage();\n // }\n\n /**\n * @ngInject\n */\n stateMessage.$inject = ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages'];\n function stateMessage(encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) {\n var message = _.find(stateMailbox.$messages, function(messageObject) {\n return messageObject.uid == $stateParams.messageId;\n });\n\n if (message) {\n stateMailbox.selectedMessage = $stateParams.messageId;\n return message.$reload();\n }\n else {\n // Message not found\n $state.go('mail.account.mailbox', { accountId: stateMailbox.$account.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n }\n }\n\n /**\n * @ngInject\n */\n // stateContent.$inject = ['stateMessage'];\n // function stateContent(stateMessage) {\n // return stateMessage.$editableContent();\n // }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n /**\n * sgIMIP - A directive to handle IMIP actions on emails\n * @memberof SOGo.MailerUI\n * @example:\n\n */\n function sgImip() {\n return {\n restrict: 'A',\n link: link,\n controller: 'sgImipController'\n };\n\n function link(scope, iElement, attrs, ctrl) {\n ctrl.pathToAttachment = attrs.sgImipPath;\n }\n }\n\n /**\n * @ngInject\n */\n sgImipController.$inject = ['$scope', 'User'];\n function sgImipController($scope, User) {\n var vm = this;\n\n $scope.delegateInvitation = false;\n $scope.delegatedTo = '';\n $scope.searchText = '';\n\n $scope.userFilter = function($query) {\n return User.$filter($query);\n };\n\n $scope.iCalendarAction = function(action) {\n var data;\n\n if (action == 'delegate') {\n data = {\n receiveUpdates: false,\n delegatedTo: $scope.delegatedTo.c_email\n };\n }\n\n $scope.viewer.message.$imipAction(vm.pathToAttachment, action, data);\n };\n }\n\n angular\n .module('SOGo.MailerUI')\n .controller('sgImipController', sgImipController)\n .directive('sgImip', sgImip);\n})();\n\n"]} \ No newline at end of file +{"version":3,"file":"Mailer.js","sources":["Mailer/Mailer.app.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","views","mailboxes","templateUrl","controller","controllerAs","resolve","stateAccounts","abstract","mailbox","template","stateAccount","mailbox@mail","stateMailbox","stateVirtualMailbox","message","stateVirtualMailboxOfMessage","stateMessage","stateMessages","otherwise","$q","Account","accounts","$findAll","mailAccounts","promises","angular","forEach","account","i","$getMailboxes","push","then","objects","all","$stateParams","_","find","id","accountId","Mailbox","decodeUriFilter","_find","mailboxId","o","path","children","length","$virtualMode","selectedFolder","$mailboxes","$filter","reject","mailboxObject","encodeUriFilter","$state","$messages","messageObject","uid","messageId","selectedMessage","$reload","go","$account","runBlock","$rootScope","$log","$on","event","toState","toParams","fromState","fromParams","error","current","previous","rejection","module","config","run","$inject"],"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.virtualMailbox', {\n url: '/virtual',\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: stateVirtualMailbox\n }\n })\n .state('mail.account.virtualMailbox.message', {\n url: '/:mailboxId/:messageId',\n views: {\n message: {\n templateUrl: 'UIxMailViewTemplate', // UI/Templates/MailerUI/UIxMailViewTemplate.wox\n controller: 'MessageController',\n controllerAs: 'viewer'\n }\n },\n resolve: {\n stateMailbox: stateVirtualMailboxOfMessage,\n stateMessage: stateMessage\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 = ['Mailbox', '$stateParams', 'stateAccount', 'decodeUriFilter'];\n function stateMailbox(Mailbox, $stateParams, stateAccount, decodeUriFilter) {\n var mailboxId = decodeUriFilter($stateParams.mailboxId),\n _find;\n\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\n if (Mailbox.$virtualMode)\n return Mailbox.selectedFolder;\n\n return _find(stateAccount.$mailboxes);\n }\n\n /**\n * @ngInject\n */\n stateMessages.$inject = ['$q', 'Mailbox', 'stateMailbox'];\n function stateMessages($q, Mailbox, stateMailbox) {\n if (Mailbox.$virtualMode)\n return [];\n\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 * Return a VirtualMailbox instance\n * @ngInject\n */\n stateVirtualMailbox.$inject = ['$q', 'Mailbox'];\n function stateVirtualMailbox($q, Mailbox) {\n if (Mailbox.$virtualMode)\n return Mailbox.selectedFolder;\n else\n return $q.reject(\"No virtual mailbox defined\");\n }\n\n /**\n * Return a Mailbox instance from a VirtualMailbox instance\n * @ngInject\n */\n stateVirtualMailboxOfMessage.$inject = ['$q', 'Mailbox', 'decodeUriFilter', '$stateParams'];\n function stateVirtualMailboxOfMessage($q, Mailbox, decodeUriFilter, $stateParams) {\n var mailboxId = decodeUriFilter($stateParams.mailboxId);\n\n if (Mailbox.$virtualMode)\n return _.find(Mailbox.selectedFolder.$mailboxes, function(mailboxObject) {\n return mailboxObject.path == mailboxId;\n });\n else\n return $q.reject(\"No virtual mailbox defined for message\");\n }\n\n /**\n * @ngInject\n */\n stateMessage.$inject = ['Mailbox', 'encodeUriFilter', '$stateParams', '$state', 'stateMailbox'];\n function stateMessage(Mailbox, encodeUriFilter, $stateParams, $state, stateMailbox) {\n var message;\n\n 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', '$log', '$state'];\n function runBlock($rootScope, $log, $state) {\n $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {\n $log.error(error);\n $state.go('mail');\n });\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n $log.error(event, current, previous, rejection);\n });\n }\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 f656e110a..c5a679f8d 100644 --- a/UI/WebServerResources/js/Mailer.services.js +++ b/UI/WebServerResources/js/Mailer.services.js @@ -1,3 +1,3 @@ -!function(){"use strict";function Account(futureAccountData){"function"!=typeof futureAccountData.then&&(angular.extend(this,futureAccountData),_.each(this.identities,function(identity){identity.fullName?identity.full=identity.fullName+" <"+identity.email+">":identity.full="<"+identity.email+">"}),Account.$log.debug("Account: "+JSON.stringify(futureAccountData,void 0,2)))}Account.$factory=["$q","$timeout","$log","sgSettings","Resource","Mailbox","Message",function($q,$timeout,$log,Settings,Resource,Mailbox,Message){return angular.extend(Account,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser()),$Mailbox:Mailbox,$Message:Message}),Account}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",Account.$factory),Account.$findAll=function(data){return data?Account.$unwrapCollection(data):Account.$$resource.fetch("","mailAccounts").then(function(o){return Account.$unwrapCollection(o)})},Account.$unwrapCollection=function(data){var collection=[];return angular.forEach(data,function(o,i){o.id=i,collection[i]=new Account(o)}),collection},Account.prototype.$getMailboxes=function(options){var _this=this;return!this.$mailboxes||options&&options.reload?Account.$Mailbox.$find(this).then(function(data){return _this.$mailboxes=data,_this.$flattenMailboxes({reload:!0}),_this.$mailboxes}):Account.$q.when(this.$mailboxes)},Account.prototype.$flattenMailboxes=function(options){var _this=this,allMailboxes=[],_visit=function(mailboxes){_.each(mailboxes,function(o){allMailboxes.push(o),o.children&&o.children.length>0&&_visit(o.children)})};return!this.$$flattenMailboxes||options&&options.reload?(_visit(this.$mailboxes),_this.$$flattenMailboxes=allMailboxes):allMailboxes=this.$$flattenMailboxes,allMailboxes},Account.prototype.$getMailboxByType=function(type){var mailbox,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.type==type});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};mailbox=_find(this.$mailboxes),console.debug(mailbox),console.debug(this.specialMailboxes)},Account.prototype.$getMailboxByPath=function(path){var mailbox=null,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==path});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};return mailbox=_find(this.$mailboxes)},Account.prototype.$newMailbox=function(path,name){var _this=this;return Account.$$resource.post(path.toString(),"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0})})},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message (compose): "+JSON.stringify(data,void 0,2));var message=new Account.$Message(data.accountId,_this.$getMailboxByPath(data.mailboxPath),data);return message}).then(function(message){return Account.$$resource.fetch(message.$absolutePath({asDraft:!0}),"edit").then(function(data){return Account.$log.debug("New message (edit): "+JSON.stringify(data,void 0,2)),angular.extend(message.editable,data),message})})},Account.prototype.$addDelegate=function(user){var _this=this,deferred=Account.$q.defer(),param={uid:user.uid};return!user.uid||_.indexOf(_.pluck(this.delegates,"uid"),user.uid)>-1?deferred.resolve():Account.$$resource.fetch(this.id.toString(),"addDelegate",param).then(function(){_this.delegates.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Account.prototype.$removeDelegate=function(uid){var _this=this,param={uid:uid};return Account.$$resource.fetch(this.id.toString(),"removeDelegate",param).then(function(){var i=_.indexOf(_.pluck(_this.delegates,"uid"),uid);i>=0&&_this.delegates.splice(i,1)})}}(),function(){"use strict";function Mailbox(account,futureMailboxData){if(this.$account=account,"function"!=typeof futureMailboxData.then){if(this.init(futureMailboxData),this.name&&!this.path){var newMailboxData=Mailbox.$$resource.create("createFolder",this.name);this.$unwrap(newMailboxData)}}else this.$unwrap(futureMailboxData)}Mailbox.$factory=["$q","$timeout","$log","sgSettings","Resource","Message","Acl","Preferences","sgMailbox_PRELOAD",function($q,$timeout,$log,Settings,Resource,Message,Acl,Preferences,PRELOAD){return angular.extend(Mailbox,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser()),$Message:Message,$$Acl:Acl,$Preferences:Preferences,$query:{sort:"date",asc:0},selectedFolder:null,$refreshTimeout:null,PRELOAD:PRELOAD}),Preferences.ready().then(function(){Preferences.settings.Mail.SortingState&&(Mailbox.$query.sort=Preferences.settings.Mail.SortingState[0],Mailbox.$query.asc=parseInt(Preferences.settings.Mail.SortingState[1]))}),Mailbox}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").constant("sgMailbox_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("Mailbox",Mailbox.$factory),Mailbox.$find=function(account){var futureMailboxData;return futureMailboxData=this.$$resource.fetch(account.id.toString(),"view"),Mailbox.$unwrapCollection(account,futureMailboxData)},Mailbox.$unwrapCollection=function(account,futureMailboxData){var collection=[],createMailboxes=function(level,mailbox){for(var i=0;i=0&&indexstartIndex&&max>startIndex;startIndex++)angular.isDefined(this.$messages[startIndex].subject)||this.$messages[startIndex].loading?endIndex++:(uids.push(this.$messages[startIndex].uid),this.$messages[startIndex].loading=!0);Mailbox.$log.debug("Loading UIDs "+uids.join(" ")),futureHeadersData=Mailbox.$$resource.post(this.id,"headers",{uids:uids}),this.$unwrapHeaders(futureHeadersData)}return loaded},Mailbox.prototype.isEditable=function(){return"folder"==this.type},Mailbox.prototype.$rename=function(){var findParent,parent,children,i,_this=this,deferred=Mailbox.$q.defer();return this.name==this.$shadowData.name?(deferred.resolve(),deferred.promise):(findParent=function(parent,children){var parentMailbox=null,mailbox=_.find(children,function(o){return o.path==_this.path});return mailbox?parentMailbox=parent:angular.forEach(children,function(o){!parentMailbox&&o.children&&o.children.length>0&&(parentMailbox=findParent(o,o.children))}),parentMailbox},parent=findParent(null,this.$account.$mailboxes),children=null===parent?this.$account.$mailboxes:parent.children,i=_.indexOf(_.pluck(children,"id"),this.id),this.$save().then(function(data){var sibling;angular.extend(_this,data),_this.id=_this.$id(),children.splice(i,1),sibling=_.find(children,function(o){return Mailbox.$log.debug(o.name+" ? "+_this.name),"folder"==o.type&&o.name.localeCompare(_this.name)>0}),i=sibling?_.indexOf(_.pluck(children,"id"),sibling.id):children.length,children.splice(i,0,_this),deferred.resolve()},function(data){deferred.reject(data)}),deferred.promise)},Mailbox.prototype.$compact=function(){return Mailbox.$$resource.post(this.id,"expunge")},Mailbox.prototype.$setFolderAs=function(type){return Mailbox.$$resource.post(this.id,"setAs"+type+"Folder")},Mailbox.prototype.$emptyTrash=function(){var _this=this;return Mailbox.$$resource.post(this.id,"emptyTrash").then(function(){_this.$messages=[],_this.uidsMap={},_this.unseenCount=0,angular.isDefined(_this.children)&&_this.children.length&&_this.$account.$getMailboxes({reload:!0})})},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$flagMessages=function(uids,flags,operation){var data={msgUIDs:uids,flags:flags,operation:operation};return Mailbox.$$resource.post(this.id,"addOrRemoveLabel",data)},Mailbox.prototype.$delete=function(){var promise,_this=this,deferred=Mailbox.$q.defer();return promise=Mailbox.$$resource.remove(this.id),promise.then(function(){_this.$account.$getMailboxes({reload:!0}),deferred.resolve(!0)},function(data,status){deferred.reject(data)}),deferred.promise},Mailbox.prototype.$deleteMessages=function(uids){return Mailbox.$$resource.post(this.id,"batchDelete",{uids:uids})},Mailbox.prototype.$copyMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"copyMessages",{uids:uids,folder:folder})},Mailbox.prototype.$moveMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"moveMessages",{uids:uids,folder:folder})},Mailbox.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit()},Mailbox.prototype.$save=function(){var _this=this;return Mailbox.$$resource.save(this.id,this.$omit()).then(function(data){return _this.$shadowData=_this.$omit(),Mailbox.$log.debug(JSON.stringify(data,void 0,2)),data},function(data){Mailbox.$log.error(JSON.stringify(data,void 0,2)),_this.$reset()})},Mailbox.prototype.$newMailbox=function(path,name){return this.$account.$newMailbox(path,name)},Mailbox.prototype.$omit=function(){var mailbox={};return angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&(mailbox[key]=value)}),mailbox},Mailbox.prototype.$unwrap=function(futureMailboxData){var _this=this,deferred=Mailbox.$q.defer();return this.$futureMailboxData=futureMailboxData,this.$futureMailboxData.then(function(data){Mailbox.$timeout(function(){var uids,headers;_this.init(data),_this.uids&&(Mailbox.$log.debug("unwrapping "+data.uids.length+" messages"),headers=_.invoke(_this.headers[0],"toLowerCase"),_this.headers.splice(0,1),_this.threaded&&(uids=_this.uids[0],_this.uids.splice(0,1)),_.reduce(_this.uids,function(msgs,msg,i){var data;return data=_this.threaded?_.object(uids,msg):{uid:msg.toString()},_this.uidsMap[data.uid]=i,msgs.push(new Mailbox.$Message(_this.$account.id,_this,data,!0)),msgs},_this.$messages),_.each(_this.headers,function(data){var msg=_.object(headers,data),i=_this.uidsMap[msg.uid.toString()];_.extend(_this.$messages[i],msg)})),Mailbox.$log.debug("mailbox "+_this.id+" ready"),_this.$isLoading=!1,deferred.resolve(_this.$messages)})},function(data){angular.extend(_this,data),_this.isError=!0,deferred.reject()}),deferred.promise},Mailbox.prototype.$unwrapHeaders=function(futureHeadersData){var _this=this;futureHeadersData.then(function(data){Mailbox.$timeout(function(){var headers,j;data.length>0&&(headers=_.invoke(data[0],"toLowerCase"),data.splice(0,1),_.each(data,function(messageHeaders){messageHeaders=_.object(headers,messageHeaders),j=_this.uidsMap[messageHeaders.uid.toString()],angular.isDefined(j)&&_.extend(_this.$messages[j],messageHeaders)}))})})}}(),function(){"use strict";function Message(accountId,mailbox,futureMessageData,lazy){this.accountId=accountId,this.$mailbox=mailbox,this.$hasUnsafeContent=!1,this.$loadUnsafeContent=!1,this.$showDetailedRecipients=!1,this.editable={to:[],cc:[],bcc:[]},this.selected=!1,"function"!=typeof futureMessageData.then?angular.isDefined(lazy)&&lazy?this.uid=futureMessageData.uid:(angular.extend(this,futureMessageData),this.$formatFullAddresses()):this.$unwrap(futureMessageData)}Message.$factory=["$q","$timeout","$log","$sce","sgSettings","Gravatar","Resource","Preferences",function($q,$timeout,$log,$sce,Settings,Gravatar,Resource,Preferences){return angular.extend(Message,{$q:$q,$timeout:$timeout,$log:$log,$sce:$sce,$gravatar:Gravatar,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser())}),Preferences.ready().then(function(){Preferences.defaults.SOGoMailLabelsColors&&(Message.$tags=Preferences.defaults.SOGoMailLabelsColors)}),Message}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Message",Message.$factory),Message.filterTags=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Message.$tags),function(tag){var value=Message.$tags[tag];return-1!=value[0].search(re)})},Message.prototype.$absolutePath=function(options){if(angular.isUndefined(this.id)){var path;path=_.map(this.$mailbox.path.split("/"),function(component){return"folder"+component.asCSSIdentifier()}),path.splice(0,0,this.accountId),options&&options.asDraft&&this.draftId?path.push(this.draftId):path.push(this.uid),this.id=path.join("/")}return this.id},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,oldUID>-1&&this.$mailbox.uidsMap[oldUID]&&(this.$mailbox.uidsMap[uid]=this.$mailbox.uidsMap[oldUID],this.$mailbox.uidsMap[oldUID]=null))},Message.prototype.$formatFullAddresses=function(){var _this=this,identities=_.pluck(_this.$mailbox.$account.identities,"email");_.each(["from","to","cc","bcc","reply-to"],function(type){_.each(_this[type],function(data,i){data.name&&data.name!=data.email?(data.full=data.name+" <"+data.email+">",data.name.split(" ").length&&(data.shortname=data.name.split(" ")[0].replace("'",""))):(data.full="<"+data.email+">",data.shortname=data.email.split("@")[0]),data.image=Message.$gravatar(data.email,32),_.indexOf(identities,data.email)>=0&&(data.shortname=l("me"))})})},Message.prototype.$shortRecipients=function(){var _this=this,result=[];return _.each(["to","cc","bcc"],function(type){_.each(_this[type],function(data,i){result.push(data.shortname)})}),result.join(", ")},Message.prototype.$shortAddress=function(type){var address="";return this[type]&&this[type].length>0&&(address=this[type][0].name||this[type][0].email||""),address},Message.prototype.loadUnsafeContent=function(){this.$loadUnsafeContent=!0},Message.prototype.showDetailedRecipients=function(){this.$showDetailedRecipients=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){part.msgclass="msg-attachment-other","UIxMailPartAlternativeViewer"==part.type?_visit(_.find(part.content,function(alternatePart){return part.preferredPart==alternatePart.contentType})):angular.isArray(part.content)?_.each(part.content,function(mixedPart){_visit(mixedPart)}):(angular.isUndefined(part.safeContent)&&(part.safeContent=part.content,_this.$hasUnsafeContent=part.safeContent.indexOf(" unsafe-")>-1),"UIxMailPartHTMLViewer"==part.type?(part.html=!0,_this.$loadUnsafeContent?(angular.isUndefined(part.unsafeContent)&&(part.unsafeContent=document.createElement("div"),part.unsafeContent.innerHTML=part.safeContent,angular.forEach(["src","data","classid","background","style"],function(suffix){var element,value,i,elements=part.unsafeContent.querySelectorAll("[unsafe-"+suffix+"]");for(i=0;i0&&vm.accounts[0].$mailboxes.length>0&&(account=vm.accounts[0], -mailbox=account.$mailboxes[0],$state.go("mail.account.mailbox",{accountId:account.id,mailboxId:encodeUriFilter(mailbox.path)})),vm.refreshUnseenCount()}MailboxesController.$inject=["$state","$timeout","$mdDialog","sgFocus","encodeUriFilter","Dialog","sgSettings","Account","Mailbox","User","Preferences","stateAccounts"],angular.module("SOGo.MailerUI").controller("MailboxesController",MailboxesController)}(),function(){"use strict";function MessageController($scope,$state,$mdDialog,stateAccounts,stateAccount,stateMailbox,stateMessage,encodeUriFilter,focus,Dialog,Account,Mailbox,Message){function doDelete(){stateMailbox.$deleteMessages([stateMessage.uid]).then(function(){var index=_.findIndex(stateMailbox.$messages,function(o){return o.uid==stateMessage.uid});-1!=index&&stateMailbox.$messages.splice(index,1),vm.message=null,$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)})})}function showMailEditor($event,message,recipients){null===messageDialog&&(angular.isDefined(recipients)||(recipients=[]),messageDialog=$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:message,stateRecipients:recipients}})["finally"](function(){messageDialog=null}))}function close(){$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)}).then(function(){vm.message=null,delete stateMailbox.selectedMessage})}function reply($event){var message=vm.message.$reply();showMailEditor($event,message)}function replyAll($event){var message=vm.message.$replyAll();showMailEditor($event,message)}function forward($event){var message=vm.message.$forward();showMailEditor($event,message)}function edit($event){vm.message.$editableContent().then(function(){showMailEditor($event,vm.message)})}function newMessage($event,recipient){var message=vm.account.$newMessage();showMailEditor($event,message,[recipient])}function saveMessage(){window.location.href=ApplicationBaseURL+"/"+vm.mailbox.id+"/saveMessages?uid="+vm.message.uid}function viewRawSource($event){Message.$$resource.post(vm.message.id,"viewsource").then(function(data){function MessageRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:MessageRawSourceDialogController}),MessageRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this,messageDialog=null;vm.accounts=stateAccounts,vm.account=stateAccount,vm.mailbox=stateMailbox,vm.message=stateMessage,vm.service=Message,vm.tags={searchText:"",selected:""},vm.doDelete=doDelete,vm.close=close,vm.reply=reply,vm.replyAll=replyAll,vm.forward=forward,vm.edit=edit,vm.newMessage=newMessage,vm.saveMessage=saveMessage,vm.viewRawSource=viewRawSource,$scope.$watchCollection("viewer.message.flags",function(oldTags,newTags){_.each(_.difference(newTags,oldTags),function(tag){vm.message.removeTag(tag)})})}MessageController.$inject=["$scope","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","stateMessage","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","Message"],angular.module("SOGo.MailerUI").controller("MessageController",MessageController)}(),function(){"use strict";function MessageEditorController($stateParams,$state,$q,$mdDialog,FileUploader,stateAccounts,stateMessage,stateRecipients,$timeout,encodeUriFilter,focus,Dialog,Account,Mailbox,AddressBook,Preferences){function cancel(){vm.autosave&&$timeout.cancel(vm.autosave),$mdDialog.cancel()}function send(){vm.autosave&&$timeout.cancel(vm.autosave),vm.message.$send().then(function(data){$mdDialog.hide()},function(data){Dialog.alert(l(data.status),l(data.message))})}function contactFilter($query){return AddressBook.$filterAll($query)}function addRecipient(user){var recipient=[];return angular.isString(user)?user:(user.$$fullname&&recipient.push(user.$$fullname),user.$$email&&recipient.push("<"+user.$$email+">"),recipient.join(" "))}function autosaveDrafts(){vm.message.$save(),Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60))}var vm=this;vm.addRecipient=addRecipient,vm.autocomplete={to:{},cc:{},bcc:{}},vm.autosave=null,vm.autosaveDrafts=autosaveDrafts,vm.hideCc=!0,vm.hideBcc=!0,vm.cancel=cancel,vm.send=send,vm.contactFilter=contactFilter,vm.identities=_.pluck(_.flatten(_.pluck(stateAccounts,"identities")),"full"),vm.uploader=new FileUploader({url:stateMessage.$absolutePath({asDraft:!0})+"/save",autoUpload:!0,alias:"attachments",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){stateMessage.$setUID(response.uid),stateMessage.$reload(),console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2))},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2)),stateMessage.$deleteAttachment(item.file.name),this.removeFromQueue(item)},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),"reply"==$stateParams.actionName?stateMessage.$reply().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"replyall"==$stateParams.actionName?stateMessage.$replyAll().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"forward"==$stateParams.actionName?stateMessage.$forward().then(function(msgObject){vm.message=msgObject}):angular.isDefined(stateMessage)&&(vm.message=stateMessage),angular.isDefined(stateRecipients)&&(vm.message.editable.to=_.union(vm.message.editable.to,_.pluck(stateRecipients,"full"))),Preferences.ready().then(function(){Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60)),vm.localeCode=Preferences.defaults.LocaleCode})}MessageEditorController.$inject=["$stateParams","$state","$q","$mdDialog","FileUploader","stateAccounts","stateMessage","stateRecipients","$timeout","encodeUriFilter","sgFocus","Dialog","Account","Mailbox","AddressBook","Preferences"],angular.module("SOGo.MailerUI").controller("MessageEditorController",MessageEditorController)}(); +!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.activeUser("folderURL")+"Mail",Settings.activeUser()),$Mailbox:Mailbox,$Message:Message}),Account}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",Account.$factory),Account.$findAll=function(data){return data?Account.$unwrapCollection(data):Account.$$resource.fetch("","mailAccounts").then(function(o){return Account.$unwrapCollection(o)})},Account.$unwrapCollection=function(data){var collection=[];return angular.forEach(data,function(o,i){o.id=i,collection[i]=new Account(o)}),collection},Account.prototype.$getMailboxes=function(options){var _this=this;return!this.$mailboxes||options&&options.reload?Account.$Mailbox.$find(this).then(function(data){return _this.$mailboxes=data,_this.$flattenMailboxes({reload:!0}),_this.$mailboxes}):Account.$q.when(this.$mailboxes)},Account.prototype.$flattenMailboxes=function(options){var _this=this,allMailboxes=[],_visit=function(mailboxes){_.each(mailboxes,function(o){allMailboxes.push(o),o.children&&o.children.length>0&&_visit(o.children)})};return!this.$$flattenMailboxes||options&&options.reload?(_visit(this.$mailboxes),_this.$$flattenMailboxes=allMailboxes):allMailboxes=this.$$flattenMailboxes,allMailboxes},Account.prototype.$getMailboxByType=function(type){var mailbox,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.type==type});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};mailbox=_find(this.$mailboxes),console.debug(mailbox),console.debug(this.specialMailboxes)},Account.prototype.$getMailboxByPath=function(path){var mailbox=null,_find=function(mailboxes){var mailbox=_.find(mailboxes,function(o){return o.path==path});return mailbox||angular.forEach(mailboxes,function(o){!mailbox&&o.children&&o.children.length>0&&(mailbox=_find(o.children))}),mailbox};return mailbox=_find(this.$mailboxes)},Account.prototype.$newMailbox=function(path,name){var _this=this;return Account.$$resource.post(path.toString(),"createFolder",{name:name}).then(function(){_this.$getMailboxes({reload:!0})})},Account.prototype.$newMessage=function(){var _this=this;return Account.$$resource.fetch(this.id.toString(),"compose").then(function(data){Account.$log.debug("New message (compose): "+JSON.stringify(data,void 0,2));var message=new Account.$Message(data.accountId,_this.$getMailboxByPath(data.mailboxPath),data);return message}).then(function(message){return Account.$$resource.fetch(message.$absolutePath({asDraft:!0}),"edit").then(function(data){return Account.$log.debug("New message (edit): "+JSON.stringify(data,void 0,2)),angular.extend(message.editable,data),message})})},Account.prototype.$addDelegate=function(user){var _this=this,deferred=Account.$q.defer(),param={uid:user.uid};return!user.uid||_.indexOf(_.pluck(this.delegates,"uid"),user.uid)>-1?deferred.resolve():Account.$$resource.fetch(this.id.toString(),"addDelegate",param).then(function(){_this.delegates.push(user),deferred.resolve(_this.users)},function(data,status){deferred.reject(l("An error occured please try again."))}),deferred.promise},Account.prototype.$removeDelegate=function(uid){var _this=this,param={uid:uid};return Account.$$resource.fetch(this.id.toString(),"removeDelegate",param).then(function(){var i=_.indexOf(_.pluck(_this.delegates,"uid"),uid);i>=0&&_this.delegates.splice(i,1)})}}(),function(){"use strict";function Mailbox(account,futureMailboxData){if(this.$account=account,"function"!=typeof futureMailboxData.then){if(this.init(futureMailboxData),this.name&&!this.path){var newMailboxData=Mailbox.$$resource.create("createFolder",this.name);this.$unwrap(newMailboxData)}}else this.$unwrap(futureMailboxData)}Mailbox.$factory=["$q","$timeout","$log","sgSettings","Resource","Message","Acl","Preferences","sgMailbox_PRELOAD",function($q,$timeout,$log,Settings,Resource,Message,Acl,Preferences,PRELOAD){return angular.extend(Mailbox,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser()),$Message:Message,$$Acl:Acl,$Preferences:Preferences,$query:{sort:"date",asc:0},selectedFolder:null,$refreshTimeout:null,$virtualMode:!1,PRELOAD:PRELOAD}),Preferences.ready().then(function(){Preferences.settings.Mail.SortingState&&(Mailbox.$query.sort=Preferences.settings.Mail.SortingState[0],Mailbox.$query.asc=parseInt(Preferences.settings.Mail.SortingState[1]))}),Mailbox}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").constant("sgMailbox_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("Mailbox",Mailbox.$factory),Mailbox.$find=function(account){var futureMailboxData;return futureMailboxData=this.$$resource.fetch(account.id.toString(),"view"),Mailbox.$unwrapCollection(account,futureMailboxData)},Mailbox.$unwrapCollection=function(account,futureMailboxData){var collection=[],createMailboxes=function(level,mailbox){for(var i=0;i=0&&indexstartIndex&&max>startIndex;startIndex++)angular.isDefined(this.$messages[startIndex].subject)||this.$messages[startIndex].loading?endIndex++:(uids.push(this.$messages[startIndex].uid),this.$messages[startIndex].loading=!0);Mailbox.$log.debug("Loading UIDs "+uids.join(" ")),futureHeadersData=Mailbox.$$resource.post(this.id,"headers",{uids:uids}),this.$unwrapHeaders(futureHeadersData)}return loaded},Mailbox.prototype.isEditable=function(){return"folder"==this.type},Mailbox.prototype.$rename=function(){var findParent,parent,children,i,_this=this,deferred=Mailbox.$q.defer();return this.name==this.$shadowData.name?(deferred.resolve(),deferred.promise):(findParent=function(parent,children){var parentMailbox=null,mailbox=_.find(children,function(o){return o.path==_this.path});return mailbox?parentMailbox=parent:angular.forEach(children,function(o){!parentMailbox&&o.children&&o.children.length>0&&(parentMailbox=findParent(o,o.children))}),parentMailbox},parent=findParent(null,this.$account.$mailboxes),children=null===parent?this.$account.$mailboxes:parent.children,i=_.indexOf(_.pluck(children,"id"),this.id),this.$save().then(function(data){var sibling;angular.extend(_this,data),_this.id=_this.$id(),children.splice(i,1),sibling=_.find(children,function(o){return Mailbox.$log.debug(o.name+" ? "+_this.name),"folder"==o.type&&o.name.localeCompare(_this.name)>0}),i=sibling?_.indexOf(_.pluck(children,"id"),sibling.id):children.length,children.splice(i,0,_this),deferred.resolve()},function(data){deferred.reject(data)}),deferred.promise)},Mailbox.prototype.$compact=function(){return Mailbox.$$resource.post(this.id,"expunge")},Mailbox.prototype.$setFolderAs=function(type){return Mailbox.$$resource.post(this.id,"setAs"+type+"Folder")},Mailbox.prototype.$emptyTrash=function(){var _this=this;return Mailbox.$$resource.post(this.id,"emptyTrash").then(function(){_this.$messages=[],_this.uidsMap={},_this.unseenCount=0,angular.isDefined(_this.children)&&_this.children.length&&_this.$account.$getMailboxes({reload:!0})})},Mailbox.prototype.$markAsRead=function(){return Mailbox.$$resource.post(this.id,"markRead")},Mailbox.prototype.$flagMessages=function(uids,flags,operation){var data={msgUIDs:uids,flags:flags,operation:operation};return Mailbox.$$resource.post(this.id,"addOrRemoveLabel",data)},Mailbox.prototype.$delete=function(){var promise,_this=this,deferred=Mailbox.$q.defer();return promise=Mailbox.$$resource.remove(this.id),promise.then(function(){_this.$account.$getMailboxes({reload:!0}),deferred.resolve(!0)},function(data,status){deferred.reject(data)}),deferred.promise},Mailbox.prototype.$deleteMessages=function(uids){return Mailbox.$$resource.post(this.id,"batchDelete",{uids:uids})},Mailbox.prototype.$copyMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"copyMessages",{uids:uids,folder:folder})},Mailbox.prototype.$moveMessages=function(uids,folder){return Mailbox.$$resource.post(this.id,"moveMessages",{uids:uids,folder:folder})},Mailbox.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&delete _this[key]}),angular.extend(this,this.$shadowData),this.$shadowData=this.$omit()},Mailbox.prototype.$save=function(){var _this=this;return Mailbox.$$resource.save(this.id,this.$omit()).then(function(data){return _this.$shadowData=_this.$omit(),Mailbox.$log.debug(JSON.stringify(data,void 0,2)),data},function(data){Mailbox.$log.error(JSON.stringify(data,void 0,2)),_this.$reset()})},Mailbox.prototype.$newMailbox=function(path,name){return this.$account.$newMailbox(path,name)},Mailbox.prototype.$omit=function(){var mailbox={};return angular.forEach(this,function(value,key){"constructor"!=key&&"children"!=key&&"$"!=key[0]&&(mailbox[key]=value)}),mailbox},Mailbox.prototype.$unwrap=function(futureMailboxData){var _this=this,deferred=Mailbox.$q.defer();return this.$futureMailboxData=futureMailboxData,this.$futureMailboxData.then(function(data){Mailbox.$timeout(function(){var uids,headers;_this.init(data),_this.uids&&(Mailbox.$log.debug("unwrapping "+data.uids.length+" messages"),headers=_.invoke(_this.headers[0],"toLowerCase"),_this.headers.splice(0,1),_this.threaded&&(uids=_this.uids[0],_this.uids.splice(0,1)),_.reduce(_this.uids,function(msgs,msg,i){var data;return data=_this.threaded?_.object(uids,msg):{uid:msg.toString()},_this.uidsMap[data.uid]=i,msgs.push(new Mailbox.$Message(_this.$account.id,_this,data,!0)),msgs},_this.$messages),_.each(_this.headers,function(data){var msg=_.object(headers,data),i=_this.uidsMap[msg.uid.toString()];_.extend(_this.$messages[i],msg)})),Mailbox.$log.debug("mailbox "+_this.id+" ready"),_this.$isLoading=!1,deferred.resolve(_this.$messages)})},function(data){angular.extend(_this,data),_this.isError=!0,deferred.reject()}),deferred.promise},Mailbox.prototype.$unwrapHeaders=function(futureHeadersData){var _this=this;futureHeadersData.then(function(data){Mailbox.$timeout(function(){var headers,j;data.length>0&&(headers=_.invoke(data[0],"toLowerCase"),data.splice(0,1),_.each(data,function(messageHeaders){messageHeaders=_.object(headers,messageHeaders),j=_this.uidsMap[messageHeaders.uid.toString()],angular.isDefined(j)&&_.extend(_this.$messages[j],messageHeaders)}))})})}}(),function(){"use strict";function Message(accountId,mailbox,futureMessageData,lazy){this.accountId=accountId,this.$mailbox=mailbox,this.$hasUnsafeContent=!1,this.$loadUnsafeContent=!1,this.$showDetailedRecipients=!1,this.editable={to:[],cc:[],bcc:[]},this.selected=!1,"function"!=typeof futureMessageData.then?angular.isDefined(lazy)&&lazy?this.uid=futureMessageData.uid:(angular.extend(this,futureMessageData),this.$formatFullAddresses()):this.$unwrap(futureMessageData)}Message.$factory=["$q","$timeout","$log","$sce","sgSettings","Gravatar","Resource","Preferences",function($q,$timeout,$log,$sce,Settings,Gravatar,Resource,Preferences){return angular.extend(Message,{$q:$q,$timeout:$timeout,$log:$log,$sce:$sce,$gravatar:Gravatar,$$resource:new Resource(Settings.activeUser("folderURL")+"Mail",Settings.activeUser())}),Preferences.ready().then(function(){Preferences.defaults.SOGoMailLabelsColors&&(Message.$tags=Preferences.defaults.SOGoMailLabelsColors),Preferences.defaults.SOGoMailDisplayRemoteInlineImages&&"always"==Preferences.defaults.SOGoMailDisplayRemoteInlineImages&&(Message.$displayRemoteInlineImages=!0)}),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"),results=[];return _.forEach(_.keys(Message.$tags),function(tag){var pair=Message.$tags[tag];-1!=pair[0].search(re)&&results.push({name:tag,description:pair[0],color:pair[1]})}),results},Message.prototype.$absolutePath=function(options){if(angular.isUndefined(this.id)||options){var path;path=_.map(this.$mailbox.path.split("/"),function(component){return"folder"+component.asCSSIdentifier()}),path.splice(0,0,this.accountId),options&&options.asDraft&&this.draftId?path.push(this.draftId):path.push(this.uid),this.id=path.join("/")}return this.id},Message.prototype.$setUID=function(uid){var oldUID=this.uid||-1;oldUID!=uid&&(this.uid=uid,oldUID>-1&&this.$mailbox.uidsMap[oldUID]&&(this.$mailbox.uidsMap[uid]=this.$mailbox.uidsMap[oldUID],this.$mailbox.uidsMap[oldUID]=null))},Message.prototype.$formatFullAddresses=function(){var _this=this,identities=_.pluck(_this.$mailbox.$account.identities,"email");_.each(["from","to","cc","bcc","reply-to"],function(type){_.each(_this[type],function(data,i){data.name&&data.name!=data.email?(data.full=data.name+" <"+data.email+">",data.name.split(" ").length&&(data.shortname=data.name.split(" ")[0].replace("'",""))):(data.full="<"+data.email+">",data.shortname=data.email.split("@")[0]),data.image=Message.$gravatar(data.email,32),_.indexOf(identities,data.email)>=0&&(data.shortname=l("me"))})})},Message.prototype.$shortRecipients=function(){var _this=this,result=[];return _.each(["to","cc","bcc"],function(type){_.each(_this[type],function(data,i){result.push(data.shortname)})}),result.join(", ")},Message.prototype.$shortAddress=function(type){var address="";return this[type]&&this[type].length>0&&(address=this[type][0].name||this[type][0].email||""),address},Message.prototype.loadUnsafeContent=function(){this.$loadUnsafeContent=!0},Message.prototype.showDetailedRecipients=function(){this.$showDetailedRecipients=!0},Message.prototype.$content=function(){var _this=this,parts=[],_visit=function(part){part.msgclass="msg-attachment-other","UIxMailPartAlternativeViewer"==part.type?_visit(_.find(part.content,function(alternatePart){return part.preferredPart==alternatePart.contentType})):angular.isArray(part.content)?_.each(part.content,function(mixedPart){_visit(mixedPart)}):(angular.isUndefined(part.safeContent)&&(part.safeContent=part.content,_this.$hasUnsafeContent|=part.safeContent.indexOf(" unsafe-")>-1),"UIxMailPartHTMLViewer"==part.type?(part.html=!0,_this.$loadUnsafeContent||Message.$displayRemoteInlineImages?(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=0)for(i=0,j=0;j0&&_visit(o.children)})};vm.virtualMailbox=new VirtualMailbox(vm.accounts[0]),Mailbox.$virtualMode||(vm.searchPreviousMailbox=Mailbox.selectedFolder),Mailbox.selectedFolder=vm.virtualMailbox,Mailbox.$virtualMode=!0,angular.isDefined(vm.search.mailbox)?(root=vm.accounts[0].$getMailboxByPath(vm.search.mailbox),mailboxes.push(root),vm.search.subfolders&&root.children.length&&_visit(root.children)):mailboxes=vm.accounts[0].$flattenMailboxes(),vm.virtualMailbox.setMailboxes(mailboxes),vm.virtualMailbox.startSearch(vm.search.match,vm.search.params),$state.go("mail.account.virtualMailbox",{accountId:vm.accounts[0].id})}}function addSearchParam(v){vm.currentSearchParam=v,focus("advancedSearch")}function newSearchParam(v){if(v.length&&vm.currentSearchParam.length){var n=0;v.startsWith("!")&&(n=1,v=v.substring(1).trim()),vm.search.params.push({searchBy:vm.currentSearchParam, +searchInput:v,negative:n}),vm.currentSearchParam=""}}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,vm.showingAdvancedSearch=!1,vm.service.$virtualMode=!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,vm.showingAdvancedSearch=!1,vm.currentSearchParam="",vm.addSearchParam=addSearchParam,vm.newSearchParam=newSearchParam,vm.showAdvancedSearch=showAdvancedSearch,vm.hideAdvancedSearch=hideAdvancedSearch,vm.toggleAdvancedSearch=toggleAdvancedSearch,vm.search={options:{"":l("Select a criteria"),subject:l("Enter Subject"),from:l("Enter From"),to:l("Enter To"),cc:l("Enter Cc"),body:l("Enter Body")},mailbox:"INBOX",subfolders:1,match:"AND",params:[]},"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","VirtualMailbox","User","Preferences","stateAccounts"],angular.module("SOGo.MailerUI").controller("MailboxesController",MailboxesController)}(),function(){"use strict";function MessageController($window,$scope,$state,$mdDialog,stateAccounts,stateAccount,stateMailbox,stateMessage,encodeUriFilter,sgSettings,focus,Dialog,Account,Mailbox,Message){function doDelete(){stateMailbox.$deleteMessages([stateMessage.uid]).then(function(){var index=_.findIndex(stateMailbox.$messages,function(o){return o.uid==stateMessage.uid});-1!=index&&stateMailbox.$messages.splice(index,1),vm.message=null,$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)})})}function showMailEditor($event,message,recipients){null===messageDialog&&(angular.isDefined(recipients)||(recipients=[]),messageDialog=$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:vm.accounts,stateMessage:message,stateRecipients:recipients}})["finally"](function(){messageDialog=null}))}function close(){$state.go("mail.account.mailbox",{accountId:stateAccount.id,mailboxId:encodeUriFilter(stateMailbox.path)}).then(function(){vm.message=null,delete stateMailbox.selectedMessage})}function reply($event){var message=vm.message.$reply();showMailEditor($event,message)}function replyAll($event){var message=vm.message.$replyAll();showMailEditor($event,message)}function forward($event){var message=vm.message.$forward();showMailEditor($event,message)}function edit($event){vm.message.$editableContent().then(function(){showMailEditor($event,vm.message)})}function openPopup(){var url=[sgSettings.baseURL(),"UIxMailPopupView#/Mail",vm.message.accountId,encodeUriFilter(encodeUriFilter(vm.message.$mailbox.path)),vm.message.uid].join("/"),wId=vm.message.$absolutePath();popupWindow=$window.open(url,wId,["width=680","height=520","resizable=1","scrollbars=1","toolbar=0","location=0","directories=0","status=0","menubar=0","copyhistory=0"].join(","))}function closePopup(){$window.close()}function newMessage($event,recipient){var message=vm.account.$newMessage();showMailEditor($event,message,[recipient])}function saveMessage(){window.location.href=ApplicationBaseURL+"/"+vm.mailbox.id+"/saveMessages?uid="+vm.message.uid}function viewRawSource($event){Message.$$resource.post(vm.message.id,"viewsource").then(function(data){function MessageRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:!0,escapeToClose:!0,template:[''," ","
",data,"    
","
",'
',' '+l("Close")+"","
","
"].join(""),controller:MessageRawSourceDialogController}),MessageRawSourceDialogController.$inject=["scope","$mdDialog"]})}var vm=this,messageDialog=null,popupWindow=null;vm.accounts=stateAccounts,vm.account=stateAccount,vm.mailbox=stateMailbox,vm.message=stateMessage,vm.service=Message,vm.tags={searchText:"",selected:""},vm.doDelete=doDelete,vm.close=close,vm.reply=reply,vm.replyAll=replyAll,vm.forward=forward,vm.edit=edit,vm.openPopup=openPopup,vm.closePopup=closePopup,vm.newMessage=newMessage,vm.saveMessage=saveMessage,vm.viewRawSource=viewRawSource,$scope.$watchCollection("viewer.message.flags",function(oldTags,newTags){_.each(_.difference(newTags,oldTags),function(tag){vm.message.removeTag(tag)})})}MessageController.$inject=["$window","$scope","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","stateMessage","encodeUriFilter","sgSettings","sgFocus","Dialog","Account","Mailbox","Message"],angular.module("SOGo.MailerUI").controller("MessageController",MessageController)}(),function(){"use strict";function MessageEditorController($stateParams,$mdDialog,FileUploader,stateAccounts,stateMessage,stateRecipients,$timeout,focus,Dialog,AddressBook,Preferences){function cancel(){vm.autosave&&$timeout.cancel(vm.autosave),$mdDialog.cancel()}function send(){vm.autosave&&$timeout.cancel(vm.autosave),vm.message.$send().then(function(data){$mdDialog.hide()},function(data){Dialog.alert(l(data.status),l(data.message))})}function contactFilter($query){return AddressBook.$filterAll($query)}function addRecipient(user){var recipient=[];return angular.isString(user)?user:(user.$$fullname&&recipient.push(user.$$fullname),user.$$email&&recipient.push("<"+user.$$email+">"),recipient.join(" "))}function autosaveDrafts(){vm.message.$save(),Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60))}var vm=this;vm.addRecipient=addRecipient,vm.autocomplete={to:{},cc:{},bcc:{}},vm.autosave=null,vm.autosaveDrafts=autosaveDrafts,vm.hideCc=!0,vm.hideBcc=!0,vm.cancel=cancel,vm.send=send,vm.contactFilter=contactFilter,vm.identities=_.pluck(_.flatten(_.pluck(stateAccounts,"identities")),"full"),vm.uploader=new FileUploader({url:stateMessage.$absolutePath({asDraft:!0})+"/save",autoUpload:!0,alias:"attachments",onProgressItem:function(item,progress){console.debug(item),console.debug(progress)},onSuccessItem:function(item,response,status,headers){stateMessage.$setUID(response.uid),stateMessage.$reload(),console.debug(item),console.debug("success = "+JSON.stringify(response,void 0,2))},onCancelItem:function(item,response,status,headers){console.debug(item),console.debug("cancel = "+JSON.stringify(response,void 0,2)),stateMessage.$deleteAttachment(item.file.name),this.removeFromQueue(item)},onErrorItem:function(item,response,status,headers){console.debug(item),console.debug("error = "+JSON.stringify(response,void 0,2))}}),"reply"==$stateParams.actionName?stateMessage.$reply().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"replyall"==$stateParams.actionName?stateMessage.$replyAll().then(function(msgObject){vm.message=msgObject,vm.hideCc=!msgObject.editable.cc||0===msgObject.editable.cc.length,vm.hideBcc=!msgObject.editable.bcc||0===msgObject.editable.bcc.length}):"forward"==$stateParams.actionName?stateMessage.$forward().then(function(msgObject){vm.message=msgObject}):angular.isDefined(stateMessage)&&(vm.message=stateMessage),angular.isDefined(stateRecipients)&&(vm.message.editable.to=_.union(vm.message.editable.to,_.pluck(stateRecipients,"full"))),Preferences.ready().then(function(){Preferences.defaults.SOGoMailAutoSave&&(vm.autosave=$timeout(vm.autosaveDrafts,1e3*Preferences.defaults.SOGoMailAutoSave*60)),vm.localeCode=Preferences.defaults.LocaleCode})}MessageEditorController.$inject=["$stateParams","$mdDialog","FileUploader","stateAccounts","stateMessage","stateRecipients","$timeout","sgFocus","Dialog","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.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Mailer.services.js.map b/UI/WebServerResources/js/Mailer.services.js.map index ec96ddcf8..cf17ad663 100644 --- a/UI/WebServerResources/js/Mailer.services.js.map +++ b/UI/WebServerResources/js/Mailer.services.js.map @@ -1 +1 @@ -{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js"],"names":["Account","futureAccountData","then","angular","extend","this","_","each","identities","identity","fullName","full","email","$log","debug","JSON","stringify","undefined","$factory","$q","$timeout","Settings","Resource","Mailbox","Message","$$resource","activeUser","$Mailbox","$Message","module","e","factory","$findAll","data","$unwrapCollection","fetch","o","collection","forEach","i","id","prototype","$getMailboxes","options","_this","$mailboxes","reload","$find","$flattenMailboxes","when","allMailboxes","_visit","mailboxes","push","children","length","$$flattenMailboxes","$getMailboxByType","type","mailbox","_find","find","console","specialMailboxes","$getMailboxByPath","path","$newMailbox","name","post","toString","$newMessage","message","accountId","mailboxPath","$absolutePath","asDraft","editable","$addDelegate","user","deferred","defer","param","uid","indexOf","pluck","delegates","resolve","users","status","reject","l","promise","$removeDelegate","splice","account","futureMailboxData","$account","init","newMailboxData","create","$unwrap","Acl","Preferences","PRELOAD","$$Acl","$Preferences","$query","sort","asc","selectedFolder","$refreshTimeout","ready","settings","Mail","SortingState","parseInt","constant","LOOKAHEAD","SIZE","createMailboxes","level","index","map","split","component","asCSSIdentifier","join","$isLoading","$messages","uidsMap","$id","$acl","$isEditable","isEditable","isUndefined","$shadowData","$omit","getLength","getItemAtIndex","$loadMessage","$selectedCount","count","filter","selected","$filter","sortingAttributes","filters","isDefined","unseenCount","cancel","searchInput","secondFilter","match","searchBy","copy","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","timeInterval","messageId","endIndex","uids","futureHeadersData","startIndex","max","loaded","subject","Math","min","loading","$unwrapHeaders","$rename","findParent","parent","parentMailbox","$save","sibling","localeCompare","$compact","$setFolderAs","$emptyTrash","$markAsRead","$flagMessages","flags","operation","msgUIDs","$delete","remove","$deleteMessages","$copyMessages","folder","$moveMessages","$reset","value","key","save","error","$futureMailboxData","headers","invoke","threaded","reduce","msgs","msg","object","isError","j","messageHeaders","futureMessageData","lazy","$mailbox","$hasUnsafeContent","$loadUnsafeContent","$showDetailedRecipients","to","cc","bcc","$formatFullAddresses","$sce","Gravatar","$gravatar","SOGoMailLabelsColors","$tags","filterTags","query","re","RegExp","keys","tag","search","draftId","$setUID","oldUID","shortname","replace","image","$shortRecipients","result","$shortAddress","address","loadUnsafeContent","showDetailedRecipients","$content","parts","part","msgclass","content","alternatePart","preferredPart","contentType","isArray","mixedPart","safeContent","html","unsafeContent","document","createElement","innerHTML","suffix","element","elements","querySelectorAll","attr","removeAttr","trustAs","participants","participant","compile","$editableContent","text","addTag","$addOrRemoveTag","removeTag","$imipAction","action","$reload","$sendMDN","shouldAskReceipt","$deleteAttachment","filename","attachmentAttrs","attachment","toggleFlag","isflagged","$reply","$newDraft","$replyAll","$forward","origin","response","$send","startsWith","isanswered","isforwarded","$futureMessageData","isread","MailboxController","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","encodeUriFilter","focus","Dialog","selectMessage","go","mailboxId","unselectMessages","vm","confirmDeleteSelectedMessages","confirm","selectedMessages","selectedUIDs","difference","alert","copySelectedMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","selectAll","markSelectedMessagesAsFlagged","d","markSelectedMessagesAsUnread","field","sortedBy","cancelSearch","mode","newMessage","$event","messageDialog","show","body","targetEvent","clickOutsideToClose","escapeToClose","templateUrl","controller","controllerAs","locals","accounts","stateMessage","stateRecipients","service","$inject","MailboxesController","User","newFolder","parentFolder","prompt","delegate","MailboxDelegationController","$scope","userFilter","closeModal","hide","removeUser","addUser","userToAdd","searchText","editFolder","editMode","revertEditing","selectFolder","saveFolder","compactFolder","emptyTrashFolder","exportMails","confirmDelete","markFolderRead","share","$users","usersWithACL","metadataForFolder","icon","setFolderAs","refreshUnseenCount","unseenCountFolders","includes","current","MessageController","doDelete","findIndex","showMailEditor","recipients","close","selectedMessage","reply","replyAll","forward","edit","recipient","saveMessage","viewRawSource","MessageRawSourceDialogController","scope","template","tags","$watchCollection","oldTags","newTags","MessageEditorController","$stateParams","FileUploader","AddressBook","autosave","send","contactFilter","$filterAll","addRecipient","isString","$$fullname","$$email","autosaveDrafts","SOGoMailAutoSave","autocomplete","hideCc","hideBcc","flatten","uploader","url","autoUpload","alias","onProgressItem","item","progress","onSuccessItem","onCancelItem","file","removeFromQueue","onErrorItem","actionName","msgObject","union","localeCode","LocaleCode"],"mappings":"CAEA,WACE,YAOA,SAASA,SAAQC,mBAEuB,kBAA3BA,mBAAkBC,OAC3BC,QAAQC,OAAOC,KAAMJ,mBACrBK,EAAEC,KAAKF,KAAKG,WAAY,SAASC,UAC3BA,SAASC,SACXD,SAASE,KAAOF,SAASC,SAAW,KAAOD,SAASG,MAAQ,IAE5DH,SAASE,KAAO,IAAMF,SAASG,MAAQ,MAE3CZ,QAAQa,KAAKC,MAAM,YAAcC,KAAKC,UAAUf,kBAAmBgB,OAAW,KAalFjB,QAAQkB,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,UAAW,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUC,QAASC,SAUtJ,MATArB,SAAQC,OAAOJ,SACbmB,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,cAC7EC,SAAUJ,QACVK,SAAUJ,UAGLxB,SAOT,KACEG,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZE,QAAQ,UAAW/B,QAAQkB,UAQ9BlB,QAAQgC,SAAW,SAASC,MAC1B,MAAKA,MAKEjC,QAAQkC,kBAAkBD,MAJxBjC,QAAQyB,WAAWU,MAAM,GAAI,gBAAgBjC,KAAK,SAASkC,GAChE,MAAOpC,SAAQkC,kBAAkBE,MAYvCpC,QAAQkC,kBAAoB,SAASD,MACnC,GAAII,cAMJ,OAJAlC,SAAQmC,QAAQL,KAAM,SAASG,EAAGG,GAChCH,EAAEI,GAAKD,EACPF,WAAWE,GAAK,GAAIvC,SAAQoC,KAEvBC,YAUTrC,QAAQyC,UAAUC,cAAgB,SAASC,SACzC,GAAIC,OAAQvC,IAEZ,QAAIA,KAAKwC,YAAgBF,SAAWA,QAAQG,OAInC9C,QAAQ2B,SAASoB,MAAM1C,MAAMH,KAAK,SAAS+B,MAGhD,MAFAW,OAAMC,WAAaZ,KACnBW,MAAMI,mBAAmBF,QAAQ,IAC1BF,MAAMC,aANR7C,QAAQmB,GAAG8B,KAAK5C,KAAKwC,aAkBhC7C,QAAQyC,UAAUO,kBAAoB,SAASL,SAC7C,GAAIC,OAAQvC,KACR6C,gBACAC,OAAS,SAASC,WAChB9C,EAAEC,KAAK6C,UAAW,SAAShB,GACzBc,aAAaG,KAAKjB,GACdA,EAAEkB,UAAYlB,EAAEkB,SAASC,OAAS,GACpCJ,OAAOf,EAAEkB,YAanB,QARIjD,KAAKmD,oBAAwBb,SAAWA,QAAQG,QAIlDK,OAAO9C,KAAKwC,YACZD,MAAMY,mBAAqBN,cAJ3BA,aAAe7C,KAAKmD,mBAOfN,cAGTlD,QAAQyC,UAAUgB,kBAAoB,SAASC,MAC7C,GAAIC,SAEAC,MAAQ,SAASR,WACf,GAAIO,SAAUrD,EAAEuD,KAAKT,UAAW,SAAShB,GACvC,MAAOA,GAAEsB,MAAQA,MASnB,OAPKC,UACHxD,QAAQmC,QAAQc,UAAW,SAAShB,IAC7BuB,SAAWvB,EAAEkB,UAAYlB,EAAEkB,SAASC,OAAS,IAChDI,QAAUC,MAAMxB,EAAEkB,aAIjBK,QAEbA,SAAUC,MAAMvD,KAAKwC,YAErBiB,QAAQhD,MAAM6C,SACdG,QAAQhD,MAAMT,KAAK0D,mBASrB/D,QAAQyC,UAAUuB,kBAAoB,SAASC,MAC7C,GAAIN,SAAU,KAEVC,MAAQ,SAASR,WACf,GAAIO,SAAUrD,EAAEuD,KAAKT,UAAW,SAAShB,GACvC,MAAOA,GAAE6B,MAAQA,MASnB,OAPKN,UACHxD,QAAQmC,QAAQc,UAAW,SAAShB,IAC7BuB,SAAWvB,EAAEkB,UAAYlB,EAAEkB,SAASC,OAAS,IAChDI,QAAUC,MAAMxB,EAAEkB,aAIjBK,QAIb,OAFAA,SAAUC,MAAMvD,KAAKwC,aAWvB7C,QAAQyC,UAAUyB,YAAc,SAASD,KAAME,MAC7C,GAAIvB,OAAQvC,IAEZ,OAAOL,SAAQyB,WAAW2C,KAAKH,KAAKI,WAAY,gBAAiBF,KAAMA,OAAOjE,KAAK,WACjF0C,MAAMF,eAAeI,QAAQ,OAUjC9C,QAAQyC,UAAU6B,YAAc,WAC9B,GAAI1B,OAAQvC,IAGZ,OAAOL,SAAQyB,WAAWU,MAAM9B,KAAKmC,GAAG6B,WAAY,WAAWnE,KAAK,SAAS+B,MAC3EjC,QAAQa,KAAKC,MAAM,0BAA4BC,KAAKC,UAAUiB,KAAMhB,OAAW,GAC/E,IAAIsD,SAAU,GAAIvE,SAAQ4B,SAASK,KAAKuC,UAAW5B,MAAMoB,kBAAkB/B,KAAKwC,aAAcxC,KAC9F,OAAOsC,WACNrE,KAAK,SAASqE,SAEf,MAAOvE,SAAQyB,WAAWU,MAAMoC,QAAQG,eAAeC,SAAS,IAAQ,QAAQzE,KAAK,SAAS+B,MAG5F,MAFAjC,SAAQa,KAAKC,MAAM,uBAAyBC,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5Ed,QAAQC,OAAOmE,QAAQK,SAAU3C,MAC1BsC,aAYbvE,QAAQyC,UAAUoC,aAAe,SAASC,MACxC,GAAIlC,OAAQvC,KACR0E,SAAW/E,QAAQmB,GAAG6D,QACtBC,OAASC,IAAKJ,KAAKI,IAavB,QAZKJ,KAAKI,KAAO5E,EAAE6E,QAAQ7E,EAAE8E,MAAM/E,KAAKgF,UAAW,OAAQP,KAAKI,KAAO,GAErEH,SAASO,UAGTtF,QAAQyB,WAAWU,MAAM9B,KAAKmC,GAAG6B,WAAY,cAAeY,OAAO/E,KAAK,WACtE0C,MAAMyC,UAAUhC,KAAKyB,MACrBC,SAASO,QAAQ1C,MAAM2C,QACtB,SAAStD,KAAMuD,QAChBT,SAASU,OAAOC,EAAE,yCAGfX,SAASY,SAUlB3F,QAAQyC,UAAUmD,gBAAkB,SAASV,KAC3C,GAAItC,OAAQvC,KACR4E,OAASC,IAAKA,IAClB,OAAOlF,SAAQyB,WAAWU,MAAM9B,KAAKmC,GAAG6B,WAAY,iBAAkBY,OAAO/E,KAAK,WAChF,GAAIqC,GAAIjC,EAAE6E,QAAQ7E,EAAE8E,MAAMxC,MAAMyC,UAAW,OAAQH,IAC/C3C,IAAK,GACPK,MAAMyC,UAAUQ,OAAOtD,EAAG,SC1QlC,WACE,YAOA,SAAShB,SAAQuE,QAASC,mBAGxB,GAFA1F,KAAK2F,SAAWF,QAEsB,kBAA3BC,mBAAkB7F,MAE3B,GADAG,KAAK4F,KAAKF,mBACN1F,KAAK8D,OAAS9D,KAAK4D,KAAM,CAE3B,GAAIiC,gBAAiB3E,QAAQE,WAAW0E,OAAO,eAAgB9F,KAAK8D,KACpE9D,MAAK+F,QAAQF,qBAMf7F,MAAK+F,QAAQL,mBASjBxE,QAAQL,UAAY,KAAM,WAAY,OAAQ,aAAc,WAAY,UAAW,MAAO,cAAe,oBAAqB,SAASC,GAAIC,SAAUP,KAAMQ,SAAUC,SAAUE,QAAS6E,IAAKC,YAAaC,SAsBxM,MArBApG,SAAQC,OAAOmB,SACbJ,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACNY,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,cAC7EE,SAAUJ,QACVgF,MAAOH,IACPI,aAAcH,YACdI,QAAUC,KAAM,OAAQC,IAAK,GAC7BC,eAAgB,KAChBC,gBAAiB,KACjBP,QAASA,UAGXD,YAAYS,QAAQ7G,KAAK,WACnBoG,YAAYU,SAASC,KAAKC,eAC5B3F,QAAQmF,OAAOC,KAAOL,YAAYU,SAASC,KAAKC,aAAa,GAC7D3F,QAAQmF,OAAOE,IAAMO,SAASb,YAAYU,SAASC,KAAKC,aAAa,OAIlE3F,SAOT,KACEpB,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZuF,SAAS,qBACRC,UAAW,GACXC,KAAM,MAEPvF,QAAQ,UAAWR,QAAQL,UAS9BK,QAAQwB,MAAQ,SAAS+C,SACvB,GAAUC,kBAIV,OAFAA,mBAAoB1F,KAAKoB,WAAWU,MAAM2D,QAAQtD,GAAG6B,WAAY,QAE1D9C,QAAQW,kBAAkB4D,QAASC,oBAU5CxE,QAAQW,kBAAoB,SAAS4D,QAASC,mBAC5C,GAAI1D,eAEAkF,gBAAkB,SAASC,MAAO7D,SAChC,IAAK,GAAIpB,GAAI,EAAGA,EAAIoB,QAAQL,SAASC,OAAQhB,IAC3CoB,QAAQL,SAASf,GAAGiF,MAAQA,MAC5B7D,QAAQL,SAASf,GAAK,GAAIhB,SAAQuE,QAASnC,QAAQL,SAASf,IAC5DgF,gBAAgBC,MAAM,EAAG7D,QAAQL,SAASf,IAKlD,OAAOwD,mBAAkB7F,KAAK,SAAS+B,MACrC,MAAOV,SAAQH,SAAS,WAQtB,MANAjB,SAAQmC,QAAQL,KAAKmB,UAAW,SAASnB,KAAMwF,OAC7CxF,KAAKuF,MAAQ,CACb,IAAI7D,SAAU,GAAIpC,SAAQuE,QAAS7D,KACnCsF,iBAAgB,EAAG5D,SACnBtB,WAAWgB,KAAKM,WAEXtB,gBAYbd,QAAQmD,cAAgB,SAASF,UAAWC,aAC1C,GAAIR,QAUJ,OARIQ,eACFR,KAAO3D,EAAEoH,IAAIjD,YAAYkD,MAAM,KAAM,SAASC,WAC5C,MAAO,SAAWA,UAAUC,qBAIhC5D,KAAK4B,OAAO,EAAG,EAAGrB,WAEXP,KAAK6D,KAAK,MASnBvG,QAAQkB,UAAUwD,KAAO,SAAShE,MAEhC5B,KAAK0H,YAAa,EAClB1H,KAAK2H,aACL3H,KAAK4H,WACL9H,QAAQC,OAAOC,KAAM4B,MACjB5B,KAAK4D,OACP5D,KAAKmC,GAAKnC,KAAK6H,MACf7H,KAAK8H,KAAO,GAAI5G,SAAQiF,MAAM,QAAUnG,KAAKmC,KAE3CnC,KAAKqD,OACPrD,KAAK+H,YAAc/H,KAAKgI,cAEtBlI,QAAQmI,YAAYjI,KAAKkI,eAE3BlI,KAAKkI,YAAclI,KAAKmI,UAU5BjH,QAAQkB,UAAUgG,UAAY,WAC5B,MAAOpI,MAAK2H,UAAUzE,QASxBhC,QAAQkB,UAAUiG,eAAiB,SAASjB,OAC1C,GAAIlD,QAEJ,OAAIkD,QAAS,GAAKA,MAAQpH,KAAK2H,UAAUzE,SACvCgB,QAAUlE,KAAK2H,UAAUP,OAErBpH,KAAKsI,aAAapE,QAAQW,MACrBX,QAGJ,MASThD,QAAQkB,UAAUyF,IAAM,WACtB,MAAO3G,SAAQmD,cAAcrE,KAAK2F,SAASxD,GAAInC,KAAK4D,OAStD1C,QAAQkB,UAAUmG,eAAiB,WACjC,GAAIC,MAMJ,OAJAA,OAAQ,EACJxI,KAAK2H,YACPa,MAASvI,EAAEwI,OAAOzI,KAAK2H,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAAcxF,QAE9EsF,OAiBTtH,QAAQkB,UAAUuG,QAAU,SAASC,kBAAmBC,SACtD,GAAItG,OAAQvC,KAAMsC,UAOlB,OALKxC,SAAQgJ,UAAU9I,KAAK+I,eAC1B/I,KAAK+I,YAAc,GAErB/I,KAAK0H,YAAa,EAEXxG,QAAQkF,aAAaM,QAAQ7G,KAAK,WAEnCqB,QAAQuF,iBACVvF,QAAQH,SAASiI,OAAO9H,QAAQuF,iBAE9BmC,mBAEF9I,QAAQC,OAAOmB,QAAQmF,OAAQuC,mBAEjC9I,QAAQC,OAAOuC,SAAWsG,kBAAmB1H,QAAQmF,SACjDvG,QAAQgJ,UAAUD,WACpBvG,QAAQuG,QAAU5I,EAAEmF,OAAOyD,QAAS,SAASJ,QAC3C,MAAO3I,SAAQmI,YAAYQ,OAAOQ,cAA8C,IAA9BR,OAAOQ,YAAY/F,SAEvEjD,EAAEC,KAAKoC,QAAQuG,QAAS,SAASJ,QAC/B,GAAIS,cACAC,MAAQV,OAAOW,SAASD,MAAM,iBAC9BA,SACF7G,QAAQsG,kBAAkBO,MAAQ,KAClCV,OAAOW,SAAWD,MAAM,GACxBD,aAAepJ,QAAQuJ,KAAKZ,QAC5BS,aAAaE,SAAWD,MAAM,GAC9B7G,QAAQuG,QAAQ7F,KAAKkG,iBAM3B,IAAII,kBAAmBpI,QAAQkF,aAAamD,SAASC,oBACrD,IAAIF,kBAAwC,YAApBA,iBAAgC,CACtD,GAAIG,GAAI3J,QAAQ4J,KAAKnH,MAAOrB,QAAQkB,UAAUuG,QAC9CzH,SAAQuF,gBAAkBvF,QAAQH,SAAS0I,EAAmC,IAAhCH,iBAAiBK,gBAGjE,GAAIjE,mBAAoBxE,QAAQE,WAAW2C,KAAKxB,MAAMJ,GAAI,OAAQG,QAClE,OAAOC,OAAMwD,QAAQL,sBAUzBxE,QAAQkB,UAAUkG,aAAe,SAASsB,WACxC,GACIC,UAGAC,KACAC,kBALAC,WAAahK,KAAK4H,QAAQgC,WAE1BK,IAAMjK,KAAK2H,UAAUzE,OACrBgH,QAAS,CAGb,IAAIpK,QAAQgJ,UAAU9I,KAAK4H,QAAQgC,aAAeI,WAAahK,KAAK2H,UAAUzE,SAExEpD,QAAQgJ,UAAU9I,KAAK2H,UAAUqC,YAAYG,WAE/CD,QAAS,GAIXL,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQgF,QAAQc,UAAWiD,IAAM,IAC7DnK,QAAQgJ,UAAU9I,KAAK2H,UAAUkC,UAAUM,WAC3CrK,QAAQgJ,UAAU9I,KAAK2H,UAAUkC,UAAUS,UAAU,CAExD,IADAT,SAAWO,KAAKC,IAAIL,WAAa9I,QAAQgF,QAAQe,KAAMgD,KAClDH,QAAwBD,SAAbG,YAAsCC,IAAbD,WAAkBA,aACrDlK,QAAQgJ,UAAU9I,KAAK2H,UAAUqC,YAAYG,UAAYnK,KAAK2H,UAAUqC,YAAYM,QAEtFT,YAIAC,KAAK9G,KAAKhD,KAAK2H,UAAUqC,YAAYnF,KACrC7E,KAAK2H,UAAUqC,YAAYM,SAAU,EAIzCpJ,SAAQV,KAAKC,MAAM,gBAAkBqJ,KAAKrC,KAAK,MAC/CsC,kBAAoB7I,QAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,WAAY2H,KAAMA,OACvE9J,KAAKuK,eAAeR,mBAGxB,MAAOG,SASThJ,QAAQkB,UAAU4F,WAAa,WAC7B,MAAoB,UAAbhI,KAAKqD,MAUdnC,QAAQkB,UAAUoI,QAAU,WAC1B,GACIC,YAEAC,OACAzH,SACAf,EALAK,MAAQvC,KAER0E,SAAWxD,QAAQJ,GAAG6D,OAK1B,OAAI3E,MAAK8D,MAAQ9D,KAAKkI,YAAYpE,MAEhCY,SAASO,UACFP,SAASY,UAIlBmF,WAAa,SAASC,OAAQzH,UAC5B,GAAI0H,eAAgB,KAChBrH,QAAUrD,EAAEuD,KAAKP,SAAU,SAASlB,GAClC,MAAOA,GAAE6B,MAAQrB,MAAMqB,MAY7B,OAVIN,SACFqH,cAAgBD,OAGhB5K,QAAQmC,QAAQgB,SAAU,SAASlB,IAC5B4I,eAAiB5I,EAAEkB,UAAYlB,EAAEkB,SAASC,OAAS,IACtDyH,cAAgBF,WAAW1I,EAAGA,EAAEkB,aAI/B0H,eAITD,OAASD,WAAW,KAAMzK,KAAK2F,SAASnD,YAEtCS,SADa,OAAXyH,OACS1K,KAAK2F,SAASnD,WAEdkI,OAAOzH,SAGpBf,EAAIjC,EAAE6E,QAAQ7E,EAAE8E,MAAM9B,SAAU,MAAOjD,KAAKmC,IAE5CnC,KAAK4K,QAAQ/K,KAAK,SAAS+B,MACzB,GAAIiJ,QACJ/K,SAAQC,OAAOwC,MAAOX,MACtBW,MAAMJ,GAAKI,MAAMsF,MAGjB5E,SAASuC,OAAOtD,EAAG,GACnB2I,QAAU5K,EAAEuD,KAAKP,SAAU,SAASlB,GAElC,MADAb,SAAQV,KAAKC,MAAMsB,EAAE+B,KAAO,MAAQvB,MAAMuB,MACxB,UAAV/B,EAAEsB,MAAoBtB,EAAE+B,KAAKgH,cAAcvI,MAAMuB,MAAQ,IAGjE5B,EADE2I,QACE5K,EAAE6E,QAAQ7E,EAAE8E,MAAM9B,SAAU,MAAO4H,QAAQ1I,IAG3Cc,SAASC,OAEfD,SAASuC,OAAOtD,EAAG,EAAGK,OAEtBmC,SAASO,WACR,SAASrD,MACV8C,SAASU,OAAOxD,QAGX8C,SAASY,UASlBpE,QAAQkB,UAAU2I,SAAW,WAC3B,MAAO7J,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,YAS1CjB,QAAQkB,UAAU4I,aAAe,SAAS3H,MACxC,MAAOnC,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,QAAUkB,KAAO,WAS3DnC,QAAQkB,UAAU6I,YAAc,WAC9B,GAAI1I,OAAQvC,IAEZ,OAAOkB,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,cAActC,KAAK,WAEzD0C,MAAMoF,aACNpF,MAAMqF,WACNrF,MAAMwG,YAAc,EAGhBjJ,QAAQgJ,UAAUvG,MAAMU,WAAaV,MAAMU,SAASC,QACtDX,MAAMoD,SAAStD,eAAeI,QAAQ,OAU5CvB,QAAQkB,UAAU8I,YAAc,WAC9B,MAAOhK,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,aAS1CjB,QAAQkB,UAAU+I,cAAgB,SAASrB,KAAMsB,MAAOC,WACtD,GAAIzJ,OAAQ0J,QAASxB,KACTsB,MAAOA,MACPC,UAAWA,UAEvB,OAAOnK,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,mBAAoBP,OAS9DV,QAAQkB,UAAUmJ,QAAU,WAC1B,GAEIjG,SAFA/C,MAAQvC,KACR0E,SAAWxD,QAAQJ,GAAG6D,OAW1B,OARAW,SAAUpE,QAAQE,WAAWoK,OAAOxL,KAAKmC,IAEzCmD,QAAQzF,KAAK,WACX0C,MAAMoD,SAAStD,eAAeI,QAAQ,IACtCiC,SAASO,SAAQ,IAChB,SAASrD,KAAMuD,QAChBT,SAASU,OAAOxD,QAEX8C,SAASY,SASlBpE,QAAQkB,UAAUqJ,gBAAkB,SAAS3B,MAC3C,MAAO5I,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,eAAgB2H,KAAMA,QAShE5I,QAAQkB,UAAUsJ,cAAgB,SAAS5B,KAAM6B,QAC/C,MAAOzK,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,gBAAiB2H,KAAMA,KAAM6B,OAAQA,UAS/EzK,QAAQkB,UAAUwJ,cAAgB,SAAS9B,KAAM6B,QAC/C,MAAOzK,SAAQE,WAAW2C,KAAK/D,KAAKmC,GAAI,gBAAiB2H,KAAMA,KAAM6B,OAAQA,UAQ/EzK,QAAQkB,UAAUyJ,OAAS,WACzB,GAAItJ,OAAQvC,IACZF,SAAQmC,QAAQjC,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KAA+B,YAAPA,KAA+B,KAAVA,IAAI,UAC5CxJ,OAAMwJ,OAGjBjM,QAAQC,OAAOC,KAAMA,KAAKkI,aAC1BlI,KAAKkI,YAAclI,KAAKmI,SAS1BjH,QAAQkB,UAAUwI,MAAQ,WACxB,GAAIrI,OAAQvC,IAEZ,OAAOkB,SAAQE,WAAW4K,KAAKhM,KAAKmC,GAAInC,KAAKmI,SAAStI,KAAK,SAAS+B,MAIlE,MAFAW,OAAM2F,YAAc3F,MAAM4F,QAC1BjH,QAAQV,KAAKC,MAAMC,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5CgB,MACN,SAASA,MACVV,QAAQV,KAAKyL,MAAMvL,KAAKC,UAAUiB,KAAMhB,OAAW,IAEnD2B,MAAMsJ,YAUV3K,QAAQkB,UAAUyB,YAAc,SAASD,KAAME,MAC7C,MAAO9D,MAAK2F,SAAS9B,YAAYD,KAAME,OASzC5C,QAAQkB,UAAU+F,MAAQ,WACxB,GAAI7E,WAQJ,OAPAxD,SAAQmC,QAAQjC,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KACO,YAAPA,KACU,KAAVA,IAAI,KACNzI,QAAQyI,KAAOD,SAGZxI,SAUTpC,QAAQkB,UAAU2D,QAAU,SAASL,mBACnC,GAAInD,OAAQvC,KACR0E,SAAWxD,QAAQJ,GAAG6D,OAuD1B,OArDA3E,MAAKkM,mBAAqBxG,kBAC1B1F,KAAKkM,mBAAmBrM,KAAK,SAAS+B,MACpCV,QAAQH,SAAS,WACf,GAAI+I,MAAMqC,OAEV5J,OAAMqD,KAAKhE,MAEPW,MAAMuH,OACR5I,QAAQV,KAAKC,MAAM,cAAgBmB,KAAKkI,KAAK5G,OAAS,aAGtDiJ,QAAUlM,EAAEmM,OAAO7J,MAAM4J,QAAQ,GAAI,eACrC5J,MAAM4J,QAAQ3G,OAAO,EAAG,GAGpBjD,MAAM8J,WACRvC,KAAOvH,MAAMuH,KAAK,GAClBvH,MAAMuH,KAAKtE,OAAO,EAAG,IAIvBvF,EAAEqM,OAAO/J,MAAMuH,KAAM,SAASyC,KAAMC,IAAKtK,GACvC,GAAIN,KAWJ,OATEA,MADEW,MAAM8J,SACDpM,EAAEwM,OAAO3C,KAAM0C,MAEd3H,IAAK2H,IAAIxI,YAGnBzB,MAAMqF,QAAQhG,KAAKiD,KAAO3C,EAE1BqK,KAAKvJ,KAAK,GAAI9B,SAAQK,SAASgB,MAAMoD,SAASxD,GAAII,MAAOX,MAAM,IAExD2K,MACNhK,MAAMoF,WAGT1H,EAAEC,KAAKqC,MAAM4J,QAAS,SAASvK,MAC7B,GAAI4K,KAAMvM,EAAEwM,OAAON,QAASvK,MACxBM,EAAIK,MAAMqF,QAAQ4E,IAAI3H,IAAIb,WAC9B/D,GAAEF,OAAOwC,MAAMoF,UAAUzF,GAAIsK,QAGjCtL,QAAQV,KAAKC,MAAM,WAAa8B,MAAMJ,GAAK,UAC3CI,MAAMmF,YAAa,EACnBhD,SAASO,QAAQ1C,MAAMoF,cAExB,SAAS/F,MACV9B,QAAQC,OAAOwC,MAAOX,MACtBW,MAAMmK,SAAU,EAChBhI,SAASU,WAGJV,SAASY,SASlBpE,QAAQkB,UAAUmI,eAAiB,SAASR,mBAC1C,GAAIxH,OAAQvC,IAEZ+J,mBAAkBlK,KAAK,SAAS+B,MAC9BV,QAAQH,SAAS,WACf,GAAIoL,SAASQ,CACT/K,MAAKsB,OAAS,IAEhBiJ,QAAUlM,EAAEmM,OAAOxK,KAAK,GAAI,eAC5BA,KAAK4D,OAAO,EAAG,GACfvF,EAAEC,KAAK0B,KAAM,SAASgL,gBACpBA,eAAiB3M,EAAEwM,OAAON,QAASS,gBACnCD,EAAIpK,MAAMqF,QAAQgF,eAAe/H,IAAIb,YACjClE,QAAQgJ,UAAU6D,IACpB1M,EAAEF,OAAOwC,MAAMoF,UAAUgF,GAAIC,2BC5qB3C,WACE,YAUA,SAASzL,SAAQgD,UAAWb,QAASuJ,kBAAmBC,MACtD9M,KAAKmE,UAAYA,UACjBnE,KAAK+M,SAAWzJ,QAChBtD,KAAKgN,mBAAoB,EACzBhN,KAAKiN,oBAAqB,EAC1BjN,KAAKkN,yBAA0B,EAC/BlN,KAAKuE,UAAY4I,MAAQC,MAAQC,QACjCrN,KAAK0I,UAAW,EAGsB,kBAA3BmE,mBAAkBhN,KAEvBC,QAAQgJ,UAAUgE,OAASA,KAC7B9M,KAAK6E,IAAMgI,kBAAkBhI,KAG7B/E,QAAQC,OAAOC,KAAM6M,mBACrB7M,KAAKsN,wBAKPtN,KAAK+F,QAAQ8G,mBASjB1L,QAAQN,UAAY,KAAM,WAAY,OAAQ,OAAQ,aAAc,WAAY,WAAY,cAAe,SAASC,GAAIC,SAAUP,KAAM+M,KAAMvM,SAAUwM,SAAUvM,SAAUgF,aAgB1K,MAfAnG,SAAQC,OAAOoB,SACbL,GAAIA,GACJC,SAAUA,SACVP,KAAMA,KACN+M,KAAMA,KACNE,UAAWD,SACXpM,WAAY,GAAIH,UAASD,SAASK,WAAW,aAAe,OAAQL,SAASK,gBAG/E4E,YAAYS,QAAQ7G,KAAK,WACnBoG,YAAYsD,SAASmE,uBACvBvM,QAAQwM,MAAQ1H,YAAYsD,SAASmE,wBAIlCvM,SAOT,KACErB,QAAQ0B,OAAO,iBAEjB,MAAMC,GACJ3B,QAAQ0B,OAAO,iBAAkB,gBAEnC1B,QAAQ0B,OAAO,iBACZE,QAAQ,UAAWP,QAAQN,UAS9BM,QAAQyM,WAAa,SAASC,OAC5B,GAAIC,IAAK,GAAIC,QAAOF,MAAO,IAC3B,OAAO5N,GAAEwI,OAAOxI,EAAE+N,KAAK7M,QAAQwM,OAAQ,SAASM,KAC9C,GAAInC,OAAQ3K,QAAQwM,MAAMM,IAC1B,OAA8B,IAAvBnC,MAAM,GAAGoC,OAAOJ,OAU3B3M,QAAQiB,UAAUiC,cAAgB,SAAS/B,SACzC,GAAIxC,QAAQmI,YAAYjI,KAAKmC,IAAK,CAChC,GAAIyB,KACJA,MAAO3D,EAAEoH,IAAIrH,KAAK+M,SAASnJ,KAAK0D,MAAM,KAAM,SAASC,WACnD,MAAO,SAAWA,UAAUC,oBAE9B5D,KAAK4B,OAAO,EAAG,EAAGxF,KAAKmE,WACnB7B,SAAWA,QAAQgC,SAAWtE,KAAKmO,QACrCvK,KAAKZ,KAAKhD,KAAKmO,SAGfvK,KAAKZ,KAAKhD,KAAK6E,KAGjB7E,KAAKmC,GAAKyB,KAAK6D,KAAK,KAGtB,MAAOzH,MAAKmC,IASdhB,QAAQiB,UAAUgM,QAAU,SAASvJ,KACnC,GAAIwJ,QAASrO,KAAK6E,KAAO,EAErBwJ,SAAUxJ,MACZ7E,KAAK6E,IAAMA,IACPwJ,OAAS,IAAMrO,KAAK+M,SAASnF,QAAQyG,UACvCrO,KAAK+M,SAASnF,QAAQ/C,KAAO7E,KAAK+M,SAASnF,QAAQyG,QACnDrO,KAAK+M,SAASnF,QAAQyG,QAAU,QAWtClN,QAAQiB,UAAUkL,qBAAuB,WACvC,GAAI/K,OAAQvC,KACRG,WAAaF,EAAE8E,MAAMxC,MAAMwK,SAASpH,SAASxF,WAAY,QAG7DF,GAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASmD,MACvDpD,EAAEC,KAAKqC,MAAMc,MAAO,SAASzB,KAAMM,GAC7BN,KAAKkC,MAAQlC,KAAKkC,MAAQlC,KAAKrB,OACjCqB,KAAKtB,KAAOsB,KAAKkC,KAAO,KAAOlC,KAAKrB,MAAQ,IAGxCqB,KAAKkC,KAAKwD,MAAM,KAAKpE,SACvBtB,KAAK0M,UAAY1M,KAAKkC,KAAKwD,MAAM,KAAK,GAAGiH,QAAQ,IAAK,OAGxD3M,KAAKtB,KAAO,IAAMsB,KAAKrB,MAAQ,IAC/BqB,KAAK0M,UAAY1M,KAAKrB,MAAM+G,MAAM,KAAK,IAIzC1F,KAAK4M,MAAQrN,QAAQsM,UAAU7L,KAAKrB,MAAO,IAIvCN,EAAE6E,QAAQ3E,WAAYyB,KAAKrB,QAAU,IACvCqB,KAAK0M,UAAYjJ,EAAE,YAW3BlE,QAAQiB,UAAUqM,iBAAmB,WACnC,GAAIlM,OAAQvC,KACR0O,SASJ,OANAzO,GAAEC,MAAM,KAAM,KAAM,OAAQ,SAASmD,MACnCpD,EAAEC,KAAKqC,MAAMc,MAAO,SAASzB,KAAMM,GACjCwM,OAAO1L,KAAKpB,KAAK0M,eAIdI,OAAOjH,KAAK,OASrBtG,QAAQiB,UAAUuM,cAAgB,SAAStL,MACzC,GAAIuL,SAAU,EAKd,OAJI5O,MAAKqD,OAASrD,KAAKqD,MAAMH,OAAS,IACpC0L,QAAU5O,KAAKqD,MAAM,GAAGS,MAAQ9D,KAAKqD,MAAM,GAAG9C,OAAS,IAGlDqO,SAQTzN,QAAQiB,UAAUyM,kBAAoB,WACpC7O,KAAKiN,oBAAqB,GAQ5B9L,QAAQiB,UAAU0M,uBAAyB,WACzC9O,KAAKkN,yBAA0B,GASjC/L,QAAQiB,UAAU2M,SAAW,WAC3B,GAAIxM,OAAQvC,KACRgP,SACAlM,OAAS,SAASmM,MAChBA,KAAKC,SAAW,uBACC,gCAAbD,KAAK5L,KACPP,OAAO7C,EAAEuD,KAAKyL,KAAKE,QAAS,SAASC,eACnC,MAAOH,MAAKI,eAAiBD,cAAcE,eAItCxP,QAAQyP,QAAQN,KAAKE,SAC5BlP,EAAEC,KAAK+O,KAAKE,QAAS,SAASK,WAC5B1M,OAAO0M,cAIL1P,QAAQmI,YAAYgH,KAAKQ,eAE3BR,KAAKQ,YAAcR,KAAKE,QACxB5M,MAAMyK,kBAAqBiC,KAAKQ,YAAY3K,QAAQ,YAAc,IAEnD,yBAAbmK,KAAK5L,MACP4L,KAAKS,MAAO,EACRnN,MAAM0K,oBACJnN,QAAQmI,YAAYgH,KAAKU,iBAC3BV,KAAKU,cAAgBC,SAASC,cAAc,OAC5CZ,KAAKU,cAAcG,UAAYb,KAAKQ,YACpC3P,QAAQmC,SAAS,MAAO,OAAQ,UAAW,aAAc,SAAU,SAAS8N,QAC1E,GACIC,SACAlE,MACA5J,EAHA+N,SAAWhB,KAAKU,cAAcO,iBAAiB,WAAaH,OAAS,IAIzE,KAAK7N,EAAI,EAAGA,EAAI+N,SAAS/M,OAAQhB,IAC/B8N,QAAUlQ,QAAQkQ,QAAQC,SAAS/N,IACnC4J,MAAQkE,QAAQG,KAAK,UAAYJ,QACjCC,QAAQG,KAAKJ,OAAQjE,OACrBkE,QAAQI,WAAW,UAAYL,WAIrCd,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKU,cAAcG,YAG/Db,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aAEnDT,MAAMhM,KAAKiM,OAES,yBAAbA,KAAK5L,MACQ,0BAAb4L,KAAK5L,MACQ,yBAAb4L,KAAK5L,MAGR4L,KAAKqB,cACPrQ,EAAEC,KAAK+O,KAAKqB,aAAc,SAASC,aACjCA,YAAY/B,MAAQrN,QAAQsM,UAAU8C,YAAYhQ,MAAO,MAI5C,0BAAb0O,KAAK5L,OACP4L,KAAKC,SAAW,wBAGlBD,KAAKuB,SAAU,EACfxB,MAAMhM,KAAKiM,QAGXA,KAAKS,MAAO,EACZT,KAAKE,QAAUhO,QAAQoM,KAAK8C,QAAQ,OAAQpB,KAAKQ,aACjDT,MAAMhM,KAAKiM,QAMrB,OAFAnM,QAAO9C,KAAKgP,OAELA,OAUT7N,QAAQiB,UAAUqO,iBAAmB,WACnC,GAAIlO,OAAQvC,IAEZ,OAAOmB,SAAQC,WAAWU,MAAM9B,KAAKqE,gBAAiB,QAAQxE,KAAK,SAAS+B,MAE1E,MADA9B,SAAQC,OAAOwC,MAAOX,MACfT,QAAQC,WAAWU,MAAMS,MAAM8B,eAAeC,SAAS,IAAQ,QAAQzE,KAAK,SAAS+B,MAG1F,MAFAT,SAAQX,KAAKC,MAAM,cAAgBC,KAAKC,UAAUiB,KAAMhB,OAAW,IACnEd,QAAQC,OAAOwC,MAAMgC,SAAU3C,MACxBA,KAAK8O,UAYlBvP,QAAQiB,UAAUuO,OAAS,SAAS1C,KAClC,MAAOjO,MAAK4Q,gBAAgB,MAAO3C,MAUrC9M,QAAQiB,UAAUyO,UAAY,SAAS5C,KACrC,MAAOjO,MAAK4Q,gBAAgB,SAAU3C,MAWxC9M,QAAQiB,UAAUwO,gBAAkB,SAASvF,UAAW4C,KACtD,GAAIrM,OACFyJ,UAAWA,UACXC,SAAUtL,KAAK6E,KACfuG,MAAO6C,IAGT,OAAIA,KACK9M,QAAQC,WAAW2C,KAAK/D,KAAK+M,SAASlF,MAAO,mBAAoBjG,MAD1E,QAYFT,QAAQiB,UAAU0O,YAAc,SAASlN,KAAMmN,OAAQnP,MACrD,GAAIW,OAAQvC,IACZmB,SAAQC,WAAW2C,MAAM/D,KAAKqE,gBAAiBT,MAAM6D,KAAK,KAAMsJ,OAAQnP,MAAM/B,KAAK,SAAS+B,MAC1FT,QAAQJ,SAAS,WACfwB,MAAMyO,WACL,iBAWP7P,QAAQiB,UAAU6O,SAAW,WAE3B,MADAjR,MAAKkR,iBAAmB,EACjB/P,QAAQC,WAAW2C,KAAK/D,KAAKqE,gBAAiB,YASvDlD,QAAQiB,UAAU+O,kBAAoB,SAASC,UAC7C,GAAIL,QAAS,6BAA+BK,SACxC7O,MAAQvC,IACZmB,SAAQC,WAAW2C,KAAK/D,KAAKqE,eAAeC,SAAS,IAAQyM,QAAQlR,KAAK,SAAS+B,MACjFT,QAAQJ,SAAS,WACfwB,MAAMgC,SAAS8M,gBAAkBpR,EAAEwI,OAAOlG,MAAMgC,SAAS8M,gBAAiB,SAASC,YACjF,MAAOA,YAAWF,UAAYA,YAE/B,iBAYPjQ,QAAQiB,UAAUmP,WAAa,WAC7B,GAAIhP,OAAQvC,KACR+Q,OAAS,oBAKb,OAHI/Q,MAAKwR,YACPT,OAAS,wBAEJ5P,QAAQC,WAAW2C,KAAK/D,KAAKqE,gBAAiB0M,QAAQlR,KAAK,SAAS+B,MACzET,QAAQJ,SAAS,WACfwB,MAAMiP,WAAajP,MAAMiP,eAW/BrQ,QAAQiB,UAAU4O,QAAU,WAC1B,GAAInE,kBAIJ,OAFAA,mBAAoB1L,QAAQC,WAAWU,MAAM9B,KAAKqE,gBAAiB,QAE5DrE,KAAK+F,QAAQ8G,oBAStB1L,QAAQiB,UAAUqP,OAAS,WACzB,MAAOzR,MAAK0R,UAAU,UASxBvQ,QAAQiB,UAAUuP,UAAY,WAC5B,MAAO3R,MAAK0R,UAAU,aASxBvQ,QAAQiB,UAAUwP,SAAW,WAC3B,MAAO5R,MAAK0R,UAAU,YAgBxBvQ,QAAQiB,UAAUsP,UAAY,SAASX,QACrC,GAAIxO,OAAQvC,IAGZ,OAAOmB,SAAQC,WAAWU,MAAM9B,KAAKqE,gBAAiB0M,QAAQlR,KAAK,SAAS+B,MAC1E,GAAI0B,SAASY,OAKb,OAJA/C,SAAQX,KAAKC,MAAM,OAASsQ,OAAS,KAAOrQ,KAAKC,UAAUiB,KAAMhB,OAAW,IAC5E0C,QAAUf,MAAMwK,SAASpH,SAAShC,kBAAkB/B,KAAKwC,aACzDF,QAAU,GAAI/C,SAAQS,KAAKuC,UAAWb,QAAS1B,MAExCT,QAAQC,WAAWU,MAAMoC,QAAQG,eAAeC,SAAS,IAAQ,QAAQzE,KAAK,SAAS+B,MAM5F,MALAT,SAAQX,KAAKC,MAAM,OAASsQ,OAAS,KAAOrQ,KAAKC,UAAUiB,KAAMhB,OAAW,GAAK,kBAAoB2B,MAAMsC,KAC3G/E,QAAQC,OAAOmE,QAAQK,SAAU3C,MAGjCsC,QAAQ2N,QAAU3N,QAAS3B,MAAOwO,OAAQA,QACnC7M,aAWb/C,QAAQiB,UAAUwI,MAAQ,WACxB,GAAIrI,OAAQvC,KACR4B,KAAO5B,KAAKuE,QAIhB,OAFApD,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUiB,KAAMhB,OAAW,IAExDO,QAAQC,WAAW4K,KAAKhM,KAAKqE,eAAeC,SAAS,IAAQ1C,MAAM/B,KAAK,SAASiS,UACtF3Q,QAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUmR,SAAUlR,OAAW,IACnE2B,MAAM6L,QAAQ0D,SAASjN,KACvBtC,MAAMyO,aAUV7P,QAAQiB,UAAU2P,MAAQ,WACxB,GAAIxP,OAAQvC,KACR4B,KAAO9B,QAAQuJ,KAAKrJ,KAAKuE,UACzBG,SAAWvD,QAAQL,GAAG6D,OAmB1B,OAjBAxD,SAAQX,KAAKC,MAAM,UAAYC,KAAKC,UAAUiB,KAAMhB,OAAW,IAE/DO,QAAQC,WAAW2C,KAAK/D,KAAKqE,eAAeC,SAAS,IAAQ,OAAQ1C,MAAM/B,KAAK,SAAS+B,MACpE,WAAfA,KAAKuD,QACPT,SAASO,QAAQrD,MACb9B,QAAQgJ,UAAUvG,MAAMsP,UACtBtP,MAAMsP,OAAOd,OAAOiB,WAAW,SACjCzP,MAAMsP,OAAO3N,QAAQ+N,YAAa,EACJ,WAAvB1P,MAAMsP,OAAOd,SACpBxO,MAAMsP,OAAO3N,QAAQgO,aAAc,KAIvCxN,SAASU,OAAOxD,QAIb8C,SAASY,SASlBnE,QAAQiB,UAAU2D,QAAU,SAAS8G,mBACnC,GAAItK,OAAQvC,IAqBZ,OAlBAA,MAAKmS,mBAAqBtF,kBAAkBhN,KAAK,SAAS+B,MAUxD,MARqB,KAAjBW,MAAM6P,QACRjR,QAAQC,WAAWU,MAAMS,MAAM8B,gBAAiB,mBAAmBxE,KAAK,WACtEsB,QAAQJ,SAAS,WACfwB,MAAM6P,QAAS,EACf7P,MAAMwK,SAAShE,kBAId5H,QAAQJ,SAAS,WAItB,MAHAjB,SAAQC,OAAOwC,MAAOX,MACtBW,MAAM+K,uBACN/K,MAAM0K,oBAAqB,EACpB1K,UAIJvC,KAAKmS,oBASdhR,QAAQiB,UAAU+F,MAAQ,WACxB,GAAIjE,WAcJ,OAbApE,SAAQmC,QAAQjC,KAAM,SAAS8L,MAAOC,KACzB,eAAPA,KAAkC,KAAVA,IAAI,KAC9B7H,QAAQ6H,KAAOD,SAKnB7L,EAAEC,MAAM,OAAQ,KAAM,KAAM,MAAO,YAAa,SAASmD,MACnDa,QAAQb,QACVa,QAAQb,MAAQpD,EAAEmM,OAAOlI,QAAQb,MAAMiE,MAAM,KAAM,WAIhDpD,YCxmBX,WACE,YAMA,SAASmO,mBAAkBC,OAAQvR,SAAUwR,UAAWC,cAAeC,aAAcC,aAAcC,gBAAiBC,MAAOC,OAAQlT,QAASuB,SAwB1I,QAAS4R,eAAc5O,SACrBoO,OAAOS,GAAG,gCAAiC5O,UAAWsO,aAAatQ,GAAI6Q,UAAWL,gBAAgBD,aAAa9O,MAAOgG,UAAW1F,QAAQW,MAG3I,QAASoO,oBACPhT,EAAEC,KAAKgT,GAAG1M,eAAemB,UAAW,SAASzD,SAAWA,QAAQwE,UAAW,IAG7E,QAASyK,iCACPN,OAAOO,QAAQ/N,EAAE,WACFA,EAAE,2DACdxF,KAAK,WAEJ,GAAIwT,kBAAmBpT,EAAEwI,OAAOyK,GAAG1M,eAAemB,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAC5F4K,aAAerT,EAAE8E,MAAMsO,iBAAkB,MAC7CH,IAAG1M,eAAeiF,gBAAgB6H,cAAczT,KAAK,WAEnD,GAAIkJ,aAAc9I,EAAEwI,OAAO4K,iBAAkB,SAASnP,SAAW,OAAQA,QAAQkO,QACjFc,IAAG1M,eAAemB,UAAY1H,EAAEsT,WAAWL,GAAG1M,eAAemB,UAAW0L,kBACxEH,GAAG1M,eAAeuC,aAAeA,aAC/B,SAASkD,OACX4G,OAAOW,MAAMnO,EAAE,SAAU4G,WAKjC,QAASwH,sBAAqB9H,QAC5B,GAAI0H,kBAAmBpT,EAAEwI,OAAOyK,GAAG1M,eAAemB,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAC5F4K,aAAerT,EAAE8E,MAAMsO,iBAAkB,MAC7CH,IAAG1M,eAAekF,cAAc4H,aAAc,IAAM3H,QAAQ9L,KAAK,aAE9D,SAASoM,OACV4G,OAAOW,MAAMnO,EAAE,SAAU4G,SAa7B,QAASyH,wBACP,GAAIL,kBAAmBpT,EAAEwI,OAAOyK,GAAG1M,eAAemB,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAC5F4K,aAAerT,EAAE8E,MAAMsO,iBAAkB,MAC7CM,QAAOC,SAASC,KAAOC,mBAAqB,IAAMZ,GAAG1M,eAAerE,GAAK,qBAAuBmR,aAAa7L,KAAK,KAGpH,QAASsM,aACP9T,EAAEC,KAAKgT,GAAG1M,eAAemB,UAAW,SAASzD,SAC3CA,QAAQwE,UAAW,IAIvB,QAASsL,iCACP,GAAIX,kBAAmBpT,EAAEwI,OAAOyK,GAAG1M,eAAemB,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAC5F4K,aAAerT,EAAE8E,MAAMsO,iBAAkB,MAE7CH,IAAG1M,eAAe2E,cAAcmI,aAAc,YAAa,OAAOzT,KAAK,SAASoU,GAE9EhU,EAAEgC,QAAQoR,iBAAkB,SAASnP,SACnCA,QAAQsN,WAAY,MAK1B,QAAS0C,gCACP,GAAIb,kBAAmBpT,EAAEwI,OAAOyK,GAAG1M,eAAemB,UAAW,SAASzD,SAAW,MAAOA,SAAQwE,WAC5F4K,aAAerT,EAAE8E,MAAMsO,iBAAkB,MAE7CH,IAAG1M,eAAe2E,cAAcmI,aAAc,OAAQ,UAAUzT,KAAK,SAASoU,GAE5EhU,EAAEgC,QAAQoR,iBAAkB,SAASnP,SACnCA,QAAQkO,QAAS,EACjBc,GAAG1M,eAAeuC,kBAKxB,QAASzC,MAAK6N,OACZjB,GAAG1M,eAAemC,SAAUrC,KAAM6N,QAGpC,QAASC,UAASD,OAChB,MAAOjT,SAAQmF,OAAOC,MAAQ6N,MAGhC,QAASE,gBACPnB,GAAGoB,KAAKpG,QAAS,EACjBgF,GAAG1M,eAAemC,UAGpB,QAAS4L,YAAWC,QAClB,GAAItQ,QAEkB,QAAlBuQ,gBACFvQ,QAAUgP,GAAGzN,QAAQxB,cACrBwQ,cAAgBlC,UACbmC,MACChK,OAAQ5K,QAAQkQ,QAAQJ,SAAS+E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACfC,YAAa,gBACbC,WAAY,0BACZC,aAAc,SACdC,QACE1C,cAAeU,GAAGiC,SAClBC,aAAclR,QACdmR,sBAZU9C,WAeL,WACPkC,cAAgB,QA3IxB,GAAIvB,IAAKlT,KAAMyU,cAAgB,IAE/BvT,SAAQsF,eAAiBkM,aAEzBQ,GAAGoC,QAAUpU,QACbgS,GAAGiC,SAAW3C,cACdU,GAAGzN,QAAUgN,aACbS,GAAG1M,eAAiBkM,aACpBQ,GAAGJ,cAAgBA,cACnBI,GAAGD,iBAAmBA,iBACtBC,GAAGC,8BAAgCA,8BACnCD,GAAGO,qBAAuBA,qBAE1BP,GAAGQ,qBAAuBA,qBAC1BR,GAAGc,8BAAgCA,8BACnCd,GAAGgB,6BAA+BA,6BAClChB,GAAGa,UAAYA,UACfb,GAAG5M,KAAOA,KACV4M,GAAGkB,SAAWA,SACdlB,GAAGmB,aAAeA,aAClBnB,GAAGqB,WAAaA,WAChBrB,GAAGoB,MAASpG,QAAQ,GAvBtBmE,kBAAkBkD,SAAW,SAAU,WAAY,YAAa,gBAAiB,eAAgB,eAAgB,kBAAmB,UAAW,SAAU,UAAW,WAmJpKzV,QACG0B,OAAO,iBACPwT,WAAW,oBAAqB3C,sBC3JrC,WACE,YAMA,SAASmD,qBAAoBlD,OAAQvR,SAAUwR,UAAWK,MAAOD,gBAAiBE,OAAQ7R,SAAUrB,QAASuB,QAASuU,KAAMxP,YAAauM,eA8BvI,QAASkD,WAAUC,cACjB9C,OAAO+C,OAAOvQ,EAAE,cACFA,EAAE,wCACbxF,KAAK,SAASiE,MACb6R,aAAa9R,YAAY8R,aAAaxT,GAAI2B,MACvCjE,KAAK,aAEH,SAAS+B,KAAMuD,QAChB0N,OAAOW,MAAMnO,EAAE,sDAAuDvB,MACzDuB,EAAEzD,KAAKqK,YAK9B,QAAS4J,UAASpQ,SAiBhB,QAASqQ,6BAA4BC,OAAQxD,UAAWkD,KAAMhQ,SAY5D,QAASuQ,YAAW3P,QAClB,MAAOoP,MAAK9M,QAAQtC,OAAQZ,QAAQT,WAGtC,QAASiR,cACP1D,UAAU2D,OAGZ,QAASC,YAAW1R,MAClBgB,QAAQF,gBAAgBd,KAAKI,KAA7BY,SAAwC,SAAS7D,KAAMuD,QACrD0N,OAAOW,MAAMnO,EAAE,WAAYA,EAAE,yCAIjC,QAAS+Q,SAAQxU,MACXA,MACF6D,QAAQjB,aAAa5C,MAAM/B,KAAK,WAC9BqT,GAAGmD,UAAY,GACfnD,GAAGoD,WAAa,IACf,SAASrK,OACV4G,OAAOW,MAAMnO,EAAE,WAAY4G,SA/BjC,GAAIiH,IAAKlT,IAETkT,IAAGhO,MAAQO,QAAQT,UACnBkO,GAAGzN,QAAUA,QACbyN,GAAGmD,UAAY,GACfnD,GAAGoD,WAAa,GAChBpD,GAAG8C,WAAaA,WAChB9C,GAAG+C,WAAaA,WAChB/C,GAAGiD,WAAaA,WAChBjD,GAAGkD,QAAUA,QA1Bf7D,UAAUmC,MACRK,YAAatP,QAAQtD,GAAK,cAC1B6S,WAAYc,4BACZb,aAAc,WACdJ,qBAAqB,EACrBC,eAAe,EACfI,QACEO,KAAMA,KACNhQ,QAASA,WAObqQ,4BAA4BP,SAAW,SAAU,YAAa,OAAQ,WAwCxE,QAASgB,YAAW5K,QAClBuH,GAAGsD,SAAW7K,OAAO/H,KACrBgP,MAAM,eAAiBjH,OAAO/H,MAGhC,QAAS6S,eAAc9K,QACrBA,OAAOE,SACPqH,GAAGsD,UAAW,EAGhB,QAASE,cAAajR,QAASkG,QACzBuH,GAAGsD,UAAY7K,OAAO/H,OAE1BsP,GAAGsD,UAAW,EACdlE,OAAOS,GAAG,wBAA0B5O,UAAWsB,QAAQtD,GAAI6Q,UAAWL,gBAAgBhH,OAAO/H,SAG/F,QAAS+S,YAAWhL,QAClBA,OAAOnB,UAGT,QAASoM,eAAcjL,QACrBA,OAAOZ,WAAWlL,KAAK,aAEpB,SAASoM,OACV4G,OAAOW,MAAMnO,EAAE,WAAY4G,SAI/B,QAAS4K,kBAAiBlL,QACxBA,OAAOV,cAAcpL,KAAK,aAEvB,SAASoM,OACV4G,OAAOW,MAAMnO,EAAE,WAAY4G,SAI/B,QAAS6K,aAAYnL,QACnBgI,OAAOC,SAASC,KAAOC,mBAAqB,IAAMnI,OAAOxJ,GAAK,gBAGhE,QAAS4U,eAAcpL,QACrBkH,OAAOO,QAAQ/N,EAAE,gBAAiBA,EAAE,4DACjCxF,KAAK,WACJ8L,OAAOJ,UACJ1L,KAAK,WACJyS,OAAOS,GAAG,SACT,SAASnR,KAAMuD,QAChB0N,OAAOW,MAAMnO,EAAE,sDAAuDsG,OAAO7H,MAChEuB,EAAEzD,KAAKqK,YAK9B,QAAS+K,gBAAerL,QACtBA,OAAOT,cAGT,QAAS+L,OAAMtL,QAEbA,OAAO7D,KAAKoP,SAASrX,KAAK,WAExB0S,UAAUmC,MACRK,YAAapJ,OAAOxJ,GAAK,gBACzB6S,WAAY,gBACZC,aAAc,MACdJ,qBAAqB,EACrBC,eAAe,EACfI,QACEiC,aAAcxL,OAAO7D,KAAK5C,MAC1BuQ,KAAMA,KACN9J,OAAQA,YAMhB,QAASyL,mBAAkBzL,QACzB,MAAmB,SAAfA,OAAOtI,MACDS,KAAM6H,OAAO7H,KAAMuT,KAAK,SACV,SAAf1L,OAAOtI,MACNS,KAAMuB,EAAE,oBAAqBgS,KAAM,UACrB,QAAf1L,OAAOtI,MACNS,KAAMuB,EAAE,kBAAmBgS,KAAM,QACnB,SAAf1L,OAAOtI,MACNS,KAAMuB,EAAE,mBAAoBgS,KAAM,UACpB,cAAf1L,OAAOtI,MACNS,KAAM6H,OAAO7H,KAAMuT,KAAM,kBAK3BvT,KAAM6H,OAAO7H,KAAMuT,KAAM,UAGnC,QAASC,aAAY3L,OAAQtI,MAC3BsI,OAAOX,aAAa3H,MAAMxD,KAAK,WAC7B8L,OAAOhG,SAAStD,eAAeI,QAAQ,KACtC,SAASwJ,OACV4G,OAAOW,MAAMnO,EAAE,WAAY4G,SAI/B,QAASsL,sBACP,GAAIC,oBAAqB7D,OAAO6D,kBAEhCvX,GAAEgC,QAAQiR,GAAGiC,SAAU,SAAS1P,SAGzBxF,EAAEwX,SAASD,mBAAoB/R,QAAQtD,GAAK,iBAC/CqV,mBAAmBxU,KAAKyC,QAAQtD,GAAK,gBAEvClC,EAAEgC,QAAQwD,QAAQtC,mBAAoB,SAASG,SACzCxD,QAAQgJ,UAAUxF,QAAQyF,eACzB9I,EAAEwX,SAASD,mBAAoBlU,QAAQnB,KAC1CqV,mBAAmBxU,KAAKM,QAAQnB,QAItCxC,QAAQyB,WAAW2C,KAAK,GAAI,eAAgBhB,UAAWyU,qBAAqB3X,KAAK,SAAS+B,MACxF3B,EAAEgC,QAAQiR,GAAGiC,SAAU,SAAS1P,SAC9BxF,EAAEgC,QAAQwD,QAAQtC,mBAAoB,SAASG,SACzC1B,KAAK0B,QAAQnB,MACfmB,QAAQyF,YAAcnH,KAAK0B,QAAQnB,WAK3C8D,YAAYS,QAAQ7G,KAAK,WACvB,GAAIyJ,kBAAmBrD,YAAYsD,SAASC,oBACxCF,mBAAwC,YAApBA,kBACtBvI,SAASmS,GAAGqE,mBAAoD,IAAhCjO,iBAAiBK,kBAtOvD,GACIlE,SACAnC,QAFA4P,GAAKlT,IAITkT,IAAGoC,QAAUpU,QACbgS,GAAGiC,SAAW3C,cACdU,GAAGwC,UAAYA,UACfxC,GAAG2C,SAAWA,SACd3C,GAAGqD,WAAaA,WAChBrD,GAAGuD,cAAgBA,cACnBvD,GAAGwD,aAAeA,aAClBxD,GAAGyD,WAAaA,WAChBzD,GAAG0D,cAAgBA,cACnB1D,GAAG2D,iBAAmBA,iBACtB3D,GAAG4D,YAAcA,YACjB5D,GAAG6D,cAAgBA,cACnB7D,GAAG8D,eAAiBA,eACpB9D,GAAG+D,MAAQA,MACX/D,GAAGkE,kBAAoBA,kBACvBlE,GAAGoE,YAAcA,YACjBpE,GAAGqE,mBAAqBA,mBAEG,QAAvBjF,OAAOoF,QAAQ5T,MAAkBoP,GAAGiC,SAASjS,OAAS,GAAKgQ,GAAGiC,SAAS,GAAG3S,WAAWU,OAAS,IAEhGuC,QAAUyN,GAAGiC,SAAS;AACtB7R,QAAUmC,QAAQjD,WAAW,GAC7B8P,OAAOS,GAAG,wBAA0B5O,UAAWsB,QAAQtD,GAAI6Q,UAAWL,gBAAgBrP,QAAQM,SAgNhGsP,GAAGqE,qBA5OL/B,oBAAoBD,SAAW,SAAU,WAAY,YAAa,UAAW,kBAAmB,SAAU,aAAc,UAAW,UAAW,OAAQ,cAAe,iBA+OrKzV,QACG0B,OAAO,iBACPwT,WAAW,sBAAuBQ,wBCvPvC,WACE,YAMA,SAASmC,mBAAkB5B,OAAQzD,OAAQC,UAAWC,cAAeC,aAAcC,aAAc0C,aAAczC,gBAAiBC,MAAOC,OAAQlT,QAASuB,QAASC,SA4B/J,QAASyW,YACPlF,aAAajH,iBAAiB2J,aAAavQ,MAAMhF,KAAK,WAEpD,GAAIuH,OAAQnH,EAAE4X,UAAUnF,aAAa/K,UAAW,SAAS5F,GACvD,MAAOA,GAAE8C,KAAOuQ,aAAavQ,KAElB,KAATuC,OACFsL,aAAa/K,UAAUnC,OAAO4B,MAAO,GAEvC8L,GAAGhP,QAAU,KACboO,OAAOS,GAAG,wBAA0B5O,UAAWsO,aAAatQ,GAAI6Q,UAAWL,gBAAgBD,aAAa9O,UAI5G,QAASkU,gBAAetD,OAAQtQ,QAAS6T,YACjB,OAAlBtD,gBACG3U,QAAQgJ,UAAUiP,cACrBA,eAEFtD,cAAgBlC,UACbmC,MACChK,OAAQ5K,QAAQkQ,QAAQJ,SAAS+E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACfC,YAAa,gBACbC,WAAY,0BACZC,aAAc,SACdC,QACE1C,cAAeU,GAAGiC,SAClBC,aAAclR,QACdmR,gBAAiB0C,cAZPxF,WAeL,WACPkC,cAAgB,QAKxB,QAASuD,SACP1F,OAAOS,GAAG,wBAA0B5O,UAAWsO,aAAatQ,GAAI6Q,UAAWL,gBAAgBD,aAAa9O,QAAS/D,KAAK,WACpHqT,GAAGhP,QAAU,WACNwO,cAAauF,kBAIxB,QAASC,OAAM1D,QACb,GAAItQ,SAAUgP,GAAGhP,QAAQuN,QACzBqG,gBAAetD,OAAQtQ,SAGzB,QAASiU,UAAS3D,QAChB,GAAItQ,SAAUgP,GAAGhP,QAAQyN,WACzBmG,gBAAetD,OAAQtQ,SAGzB,QAASkU,SAAQ5D,QACf,GAAItQ,SAAUgP,GAAGhP,QAAQ0N,UACzBkG,gBAAetD,OAAQtQ,SAGzB,QAASmU,MAAK7D,QACZtB,GAAGhP,QAAQuM,mBAAmB5Q,KAAK,WACjCiY,eAAetD,OAAQtB,GAAGhP,WAI9B,QAASqQ,YAAWC,OAAQ8D,WAC1B,GAAIpU,SAAUgP,GAAGzN,QAAQxB,aACzB6T,gBAAetD,OAAQtQ,SAAUoU,YAGnC,QAASC,eACP5E,OAAOC,SAASC,KAAOC,mBAAqB,IAAMZ,GAAG5P,QAAQnB,GAAK,qBAAuB+Q,GAAGhP,QAAQW,IAGtG,QAAS2T,eAAchE,QACrBrT,QAAQC,WAAW2C,KAAKmP,GAAGhP,QAAQ/B,GAAI,cAActC,KAAK,SAAS+B,MAyBjE,QAAS6W,kCAAiCC,MAAOnG,WAC/CmG,MAAMV,MAAQ,WACZzF,UAAU2D,QA1Bd3D,UAAUmC,MACRhK,OAAQ5K,QAAQkQ,QAAQJ,SAAS+E,MACjCC,YAAaJ,OACbK,qBAAqB,EACrBC,eAAe,EACf6D,UACE,kDAAoDtT,EAAE,uBAAyB,KAC/E,wBACA,YACAzD,KACA,aACA,yBACA,6BACA,qCAAuCyD,EAAE,SAAW,eACpD,WACA,gBACAoC,KAAK,IACPuN,WAAYyD,mCAMdA,iCAAiClD,SAAW,QAAS,eAjIzD,GAAIrC,IAAKlT,KAAMyU,cAAgB,IAE/BvB,IAAGiC,SAAW3C,cACdU,GAAGzN,QAAUgN,aACbS,GAAG5P,QAAUoP,aACbQ,GAAGhP,QAAUkR,aACblC,GAAGoC,QAAUnU,QACb+R,GAAG0F,MAAStC,WAAY,GAAI5N,SAAU,IACtCwK,GAAG0E,SAAWA,SACd1E,GAAG8E,MAAQA,MACX9E,GAAGgF,MAAQA,MACXhF,GAAGiF,SAAWA,SACdjF,GAAGkF,QAAUA,QACblF,GAAGmF,KAAOA,KACVnF,GAAGqB,WAAaA,WAChBrB,GAAGqF,YAAcA,YACjBrF,GAAGsF,cAAgBA,cAKnBzC,OAAO8C,iBAAiB,uBAAwB,SAASC,QAASC,SAChE9Y,EAAEC,KAAKD,EAAEsT,WAAWwF,QAASD,SAAU,SAAS7K,KAC9CiF,GAAGhP,QAAQ2M,UAAU5C,SAzB3B0J,kBAAkBpC,SAAW,SAAU,SAAU,YAAa,gBAAiB,eAAgB,eAAgB,eAAgB,kBAAmB,UAAW,SAAU,UAAW,UAAW,WA6I7LzV,QACG0B,OAAO,iBACPwT,WAAW,oBAAqB2C,sBCrJrC,WACE,YAMA,SAASqB,yBAAwBC,aAAc3G,OAAQxR,GAAIyR,UAAW2G,aAAc1G,cAAe4C,aAAcC,gBAAiBtU,SAAU4R,gBAAiBC,MAAOC,OAAQlT,QAASuB,QAASiY,YAAalT,aAgEzM,QAAS+C,UAEHkK,GAAGkG,UACLrY,SAASiI,OAAOkK,GAAGkG,UAErB7G,UAAUvJ,SAGZ,QAASqQ,QACHnG,GAAGkG,UACLrY,SAASiI,OAAOkK,GAAGkG,UAErBlG,GAAGhP,QAAQ6N,QAAQlS,KAAK,SAAS+B,MAC/B2Q,UAAU2D,QACT,SAAStU,MACViR,OAAOW,MAAMnO,EAAEzD,KAAKuD,QAASE,EAAEzD,KAAKsC,YAIxC,QAASoV,eAAcjT,QACrB,MAAO8S,aAAYI,WAAWlT,QAGhC,QAASmT,cAAa/U,MACpB,GAAI6T,aAEJ,OAAIxY,SAAQ2Z,SAAShV,MACZA,MACLA,KAAKiV,YACPpB,UAAUtV,KAAKyB,KAAKiV,YAClBjV,KAAKkV,SACPrB,UAAUtV,KAAK,IAAMyB,KAAKkV,QAAU,KAE/BrB,UAAU7Q,KAAK,MAIxB,QAASmS,kBACP1G,GAAGhP,QAAQ0G,QACP3E,YAAYsD,SAASsQ,mBACvB3G,GAAGkG,SAAWrY,SAASmS,GAAG0G,eAAsD,IAAtC3T,YAAYsD,SAASsQ,iBAAsB,KAvGzF,GAAI3G,IAAKlT,IAETkT,IAAGsG,aAAeA,aAClBtG,GAAG4G,cAAgB3M,MAAQC,MAAQC,QACnC6F,GAAGkG,SAAW,KACdlG,GAAG0G,eAAiBA,eACpB1G,GAAG6G,QAAS,EACZ7G,GAAG8G,SAAU,EACb9G,GAAGlK,OAASA,OACZkK,GAAGmG,KAAOA,KACVnG,GAAGoG,cAAgBA,cACnBpG,GAAG/S,WAAaF,EAAE8E,MAAM9E,EAAEga,QAAQha,EAAE8E,MAAMyN,cAAe,eAAgB,QACzEU,GAAGgH,SAAW,GAAIhB,eAChBiB,IAAK/E,aAAa/Q,eAAeC,SAAS,IAAS,QACnD8V,YAAY,EACZC,MAAO,cACPC,eAAgB,SAASC,KAAMC,UAC7B/W,QAAQhD,MAAM8Z,MAAO9W,QAAQhD,MAAM+Z,WAErCC,cAAe,SAASF,KAAMzI,SAAU3M,OAAQgH,SAC9CiJ,aAAahH,QAAQ0D,SAASjN,KAC9BuQ,aAAapE,UACbvN,QAAQhD,MAAM8Z,MAAO9W,QAAQhD,MAAM,aAAeC,KAAKC,UAAUmR,SAAUlR,OAAW,KAExF8Z,aAAc,SAASH,KAAMzI,SAAU3M,OAAQgH,SAC7C1I,QAAQhD,MAAM8Z,MAAO9W,QAAQhD,MAAM,YAAcC,KAAKC,UAAUmR,SAAUlR,OAAW,IAGrFwU,aAAajE,kBAAkBoJ,KAAKI,KAAK7W,MACzC9D,KAAK4a,gBAAgBL,OAEvBM,YAAa,SAASN,KAAMzI,SAAU3M,OAAQgH,SAC5C1I,QAAQhD,MAAM8Z,MAAO9W,QAAQhD,MAAM,WAAaC,KAAKC,UAAUmR,SAAUlR,OAAW,OAIzD,SAA3BqY,aAAa6B,WACf1F,aAAa3D,SAAS5R,KAAK,SAASkb,WAClC7H,GAAGhP,QAAU6W,UACb7H,GAAG6G,QAAWgB,UAAUxW,SAAS6I,IAAuC,IAAjC2N,UAAUxW,SAAS6I,GAAGlK,OAC7DgQ,GAAG8G,SAAYe,UAAUxW,SAAS8I,KAAyC,IAAlC0N,UAAUxW,SAAS8I,IAAInK,SAGhC,YAA3B+V,aAAa6B,WACpB1F,aAAazD,YAAY9R,KAAK,SAASkb,WACrC7H,GAAGhP,QAAU6W,UACb7H,GAAG6G,QAAWgB,UAAUxW,SAAS6I,IAAuC,IAAjC2N,UAAUxW,SAAS6I,GAAGlK,OAC7DgQ,GAAG8G,SAAYe,UAAUxW,SAAS8I,KAAyC,IAAlC0N,UAAUxW,SAAS8I,IAAInK,SAGhC,WAA3B+V,aAAa6B,WACpB1F,aAAaxD,WAAW/R,KAAK,SAASkb,WACpC7H,GAAGhP,QAAU6W,YAGRjb,QAAQgJ,UAAUsM,gBACzBlC,GAAGhP,QAAUkR,cAGXtV,QAAQgJ,UAAUuM,mBACpBnC,GAAGhP,QAAQK,SAAS4I,GAAKlN,EAAE+a,MAAM9H,GAAGhP,QAAQK,SAAS4I,GAAIlN,EAAE8E,MAAMsQ,gBAAiB,UA+CpFpP,YAAYS,QAAQ7G,KAAK,WACnBoG,YAAYsD,SAASsQ,mBACvB3G,GAAGkG,SAAWrY,SAASmS,GAAG0G,eAAsD,IAAtC3T,YAAYsD,SAASsQ,iBAAsB,KACvF3G,GAAG+H,WAAahV,YAAYsD,SAAS2R,aAhHzClC,wBAAwBzD,SAAW,eAAgB,SAAU,KAAM,YAAa,eAAgB,gBAAiB,eAAgB,kBAAmB,WAAY,kBAAmB,UAAW,SAAU,UAAW,UAAW,cAAe,eAoH7OzV,QACG0B,OAAO,iBACPwT,WAAW,0BAA2BgE","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Account\n * @constructor\n * @param {object} futureAccountData\n */\n function Account(futureAccountData) {\n // Data is immediately available\n if (typeof futureAccountData.then !== 'function') {\n angular.extend(this, futureAccountData);\n _.each(this.identities, function(identity) {\n if (identity.fullName)\n identity.full = identity.fullName + ' <' + identity.email + '>';\n else\n identity.full = '<' + identity.email + '>';\n });\n Account.$log.debug('Account: ' + JSON.stringify(futureAccountData, undefined, 2));\n }\n else {\n // The promise will be unwrapped first\n //this.$unwrap(futureAccountData);\n }\n }\n\n /**\n * @memberof Account\n * @desc The factory we'll use to register with Angular\n * @returns the Account constructor\n */\n Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Mailbox, Message) {\n angular.extend(Account, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Mailbox: Mailbox,\n $Message: Message\n });\n\n return Account; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Account in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Account', Account.$factory);\n\n /**\n * @memberof Account\n * @desc Set the list of accounts and instanciate a new Account object for each item.\n * @param {array} [data] - the metadata of the accounts\n * @returns the list of accounts\n */\n Account.$findAll = function(data) {\n if (!data) {\n return Account.$$resource.fetch('', 'mailAccounts').then(function(o) {\n return Account.$unwrapCollection(o);\n });\n }\n return Account.$unwrapCollection(data);\n };\n\n /**\n * @memberof Account\n * @desc Unwrap to a collection of Account instances.\n * @param {object} data - the accounts information\n * @returns a collection of Account objects\n */\n Account.$unwrapCollection = function(data) {\n var collection = [];\n\n angular.forEach(data, function(o, i) {\n o.id = i;\n collection[i] = new Account(o);\n });\n return collection;\n };\n\n /**\n * @function $getMailboxes\n * @memberof Account.prototype\n * @desc Fetch the list of mailboxes for the current account.\n * @param {object} [options] - force a reload by setting 'reload' to true\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxes = function(options) {\n var _this = this;\n\n if (this.$mailboxes && !(options && options.reload)) {\n return Account.$q.when(this.$mailboxes);\n }\n else {\n return Account.$Mailbox.$find(this).then(function(data) {\n _this.$mailboxes = data;\n _this.$flattenMailboxes({reload: true});\n return _this.$mailboxes;\n });\n }\n };\n\n /**\n * @function $flattenMailboxes\n * @memberof Account.prototype\n * @desc Get a flatten array of the mailboxes.\n * @param {object} [options] - force a reload\n * @returns an array of Mailbox instances\n */\n Account.prototype.$flattenMailboxes = function(options) {\n var _this = this,\n allMailboxes = [],\n _visit = function(mailboxes) {\n _.each(mailboxes, function(o) {\n allMailboxes.push(o);\n if (o.children && o.children.length > 0) {\n _visit(o.children);\n }\n });\n };\n\n if (this.$$flattenMailboxes && !(options && options.reload)) {\n allMailboxes = this.$$flattenMailboxes;\n }\n else {\n _visit(this.$mailboxes);\n _this.$$flattenMailboxes = allMailboxes;\n }\n\n return allMailboxes;\n };\n\n Account.prototype.$getMailboxByType = function(type) {\n var mailbox,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.type == type;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n console.debug(mailbox);\n console.debug(this.specialMailboxes);\n };\n\n /**\n * @function $getMailboxByPath\n * @memberof Account.prototype\n * @desc Recursively find a mailbox using its path\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxByPath = function(path) {\n var mailbox = null,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == path;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n return mailbox;\n };\n\n /**\n * @function $newMailbox\n * @memberof Account.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMailbox = function(path, name) {\n var _this = this;\n\n return Account.$$resource.post(path.toString(), 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n });\n };\n\n /**\n * @function $newMessage\n * @memberof Account.prototype\n * @desc Prepare a new Message object associated to the appropriate mailbox.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMessage = function() {\n var _this = this;\n\n // Query account for draft folder and draft UID\n return Account.$$resource.fetch(this.id.toString(), 'compose').then(function(data) {\n Account.$log.debug('New message (compose): ' + JSON.stringify(data, undefined, 2));\n var message = new Account.$Message(data.accountId, _this.$getMailboxByPath(data.mailboxPath), data);\n return message;\n }).then(function(message) {\n // Fetch draft initial data\n return Account.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Account.$log.debug('New message (edit): ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $addDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @see {@link User.$filter}\n */\n Account.prototype.$addDelegate = function(user) {\n var _this = this,\n deferred = Account.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.delegates, 'uid'), user.uid) > -1) {\n // No UID specified or user already in delegates\n deferred.resolve();\n }\n else {\n Account.$$resource.fetch(this.id.toString(), 'addDelegate', param).then(function() {\n _this.delegates.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @return a promise of the server call to remove the user from the account's delegates\n */\n Account.prototype.$removeDelegate = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Account.$$resource.fetch(this.id.toString(), 'removeDelegate', param).then(function() {\n var i = _.indexOf(_.pluck(_this.delegates, 'uid'), uid);\n if (i >= 0) {\n _this.delegates.splice(i, 1);\n }\n });\n };\n \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Mailbox\n * @constructor\n * @param {object} futureMailboxData - either an object literal or a promise\n */\n function Mailbox(account, futureMailboxData) {\n this.$account = account;\n // Data is immediately available\n if (typeof futureMailboxData.then !== 'function') {\n this.init(futureMailboxData);\n if (this.name && !this.path) {\n // Create a new mailbox on the server\n var newMailboxData = Mailbox.$$resource.create('createFolder', this.name);\n this.$unwrap(newMailboxData);\n }\n }\n else {\n // The promise will be unwrapped first\n // NOTE: this condition never happen for the moment\n this.$unwrap(futureMailboxData);\n }\n }\n\n /**\n * @memberof Mailbox\n * @desc The factory we'll use to register with Angular\n * @returns the Mailbox constructor\n */\n Mailbox.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Message', 'Acl', 'Preferences', 'sgMailbox_PRELOAD', function($q, $timeout, $log, Settings, Resource, Message, Acl, Preferences, PRELOAD) {\n angular.extend(Mailbox, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Message: Message,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: { sort: 'date', asc: 0 },\n selectedFolder: null,\n $refreshTimeout: null,\n PRELOAD: PRELOAD\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Mail.SortingState) {\n Mailbox.$query.sort = Preferences.settings.Mail.SortingState[0];\n Mailbox.$query.asc = parseInt(Preferences.settings.Mail.SortingState[1]);\n }\n });\n\n return Mailbox; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Mailbox in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .constant('sgMailbox_PRELOAD', {\n LOOKAHEAD: 50,\n SIZE: 100\n })\n .factory('Mailbox', Mailbox.$factory);\n\n /**\n * @memberof Mailbox\n * @desc Fetch list of mailboxes of a specific account\n * @param {string} accountId - the account\n * @return a promise of the HTTP operation\n * @see {@link Account.$getMailboxes}\n */\n Mailbox.$find = function(account) {\n var path, futureMailboxData;\n\n futureMailboxData = this.$$resource.fetch(account.id.toString(), 'view');\n\n return Mailbox.$unwrapCollection(account, futureMailboxData); // a collection of mailboxes\n };\n\n /**\n * @memberof Mailbox\n * @desc Unwrap to a collection of Mailbox instances.\n * @param {string} account - the account\n * @param {promise} futureMailboxData - a promise of the mailboxes metadata\n * @returns a promise of a collection of Mailbox objects\n */\n Mailbox.$unwrapCollection = function(account, futureMailboxData) {\n var collection = [],\n // Local recursive function\n createMailboxes = function(level, mailbox) {\n for (var i = 0; i < mailbox.children.length; i++) {\n mailbox.children[i].level = level;\n mailbox.children[i] = new Mailbox(account, mailbox.children[i]);\n createMailboxes(level+1, mailbox.children[i]);\n }\n };\n //collection.$futureMailboxData = futureMailboxData;\n\n return futureMailboxData.then(function(data) {\n return Mailbox.$timeout(function() {\n // Each entry is spun up as a Mailbox instance\n angular.forEach(data.mailboxes, function(data, index) {\n data.level = 0;\n var mailbox = new Mailbox(account, data);\n createMailboxes(1, mailbox); // recursively create all sub-mailboxes\n collection.push(mailbox);\n });\n return collection;\n });\n });\n };\n\n /**\n * @memberof Mailbox\n * @desc Build the path of the mailbox (or account only).\n * @param {string} accountId - the account ID\n * @param {string} [mailboxPath] - the mailbox path\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.$absolutePath = function(accountId, mailboxPath) {\n var path = [];\n\n if (mailboxPath) {\n path = _.map(mailboxPath.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n }\n\n path.splice(0, 0, accountId); // insert account ID\n\n return path.join('/');\n };\n\n /**\n * @function init\n * @memberof Mailbox.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of mailbox\n */\n Mailbox.prototype.init = function(data) {\n var _this = this;\n this.$isLoading = true;\n this.$messages = [];\n this.uidsMap = {};\n angular.extend(this, data);\n if (this.path) {\n this.id = this.$id();\n this.$acl = new Mailbox.$$Acl('Mail/' + this.id);\n }\n if (this.type) {\n this.$isEditable = this.isEditable();\n }\n if (angular.isUndefined(this.$shadowData)) {\n // Make a copy of the data for an eventual reset\n this.$shadowData = this.$omit();\n }\n };\n\n /**\n * @function getLength\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the number of items in the mailbox\n */\n Mailbox.prototype.getLength = function() {\n return this.$messages.length;\n };\n\n /**\n * @function getItemAtIndex\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the message as the specified index\n */\n Mailbox.prototype.getItemAtIndex = function(index) {\n var message;\n\n if (index >= 0 && index < this.$messages.length) {\n message = this.$messages[index];\n\n if (this.$loadMessage(message.uid))\n return message;\n }\n\n return null;\n };\n\n /**\n * @function $id\n * @memberof Mailbox.prototype\n * @desc Build the unique ID to identified the mailbox.\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.prototype.$id = function() {\n return Mailbox.$absolutePath(this.$account.id, this.path);\n };\n\n /**\n * @function $selectedCount\n * @memberof Mailbox.prototype\n * @desc Return the number of messages selected by the user.\n * @returns the number of selected messages\n */\n Mailbox.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.$messages) {\n count = (_.filter(this.$messages, function(message) { return message.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Mailbox.prototype\n * @desc Fetch the messages metadata of the mailbox\n * @param {object} [sort] - sort preferences. Defaults to descendent by date.\n * @param {string} sort.match - either AND or OR\n * @param {string} sort.sort - either arrival, subject, from, to, date, or size\n * @param {boolean} sort.asc - sort is ascendant if true\n * @param {object[]} [filters] - list of filters for the query\n * @param {string} filters.searchBy - either subject, from, to, cc, or body\n * @param {string} filters.searchInput - the search string to match\n * @param {boolean} filters.negative - negate the condition\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$filter = function(sortingAttributes, filters) {\n var _this = this, options = {};\n\n if (!angular.isDefined(this.unseenCount))\n this.unseenCount = 0;\n\n this.$isLoading = true;\n\n return Mailbox.$Preferences.ready().then(function() {\n\n if (Mailbox.$refreshTimeout)\n Mailbox.$timeout.cancel(Mailbox.$refreshTimeout);\n\n if (sortingAttributes)\n // Sorting preferences are common to all mailboxes\n angular.extend(Mailbox.$query, sortingAttributes);\n\n angular.extend(options, { sortingAttributes: Mailbox.$query });\n if (angular.isDefined(filters)) {\n options.filters = _.reject(filters, function(filter) {\n return angular.isUndefined(filter.searchInput) || filter.searchInput.length === 0;\n });\n _.each(options.filters, function(filter) {\n var secondFilter,\n match = filter.searchBy.match(/(\\w+)_or_(\\w+)/);\n if (match) {\n options.sortingAttributes.match = 'OR';\n filter.searchBy = match[1];\n secondFilter = angular.copy(filter);\n secondFilter.searchBy = match[2];\n options.filters.push(secondFilter);\n }\n });\n }\n\n // Restart the refresh timer, if needed\n var refreshViewCheck = Mailbox.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, Mailbox.prototype.$filter);\n Mailbox.$refreshTimeout = Mailbox.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n\n var futureMailboxData = Mailbox.$$resource.post(_this.id, 'view', options);\n return _this.$unwrap(futureMailboxData);\n });\n };\n\n /**\n * @function $loadMessage\n * @memberof Mailbox.prototype\n * @desc Check if the message is loaded and in any case, fetch more messages headers from the server.\n * @returns true if the message metadata are already fetched\n */\n Mailbox.prototype.$loadMessage = function(messageId) {\n var startIndex = this.uidsMap[messageId],\n endIndex,\n max = this.$messages.length,\n loaded = false,\n uids,\n futureHeadersData;\n if (angular.isDefined(this.uidsMap[messageId]) && startIndex < this.$messages.length) {\n // Index is valid\n if (angular.isDefined(this.$messages[startIndex].subject)) {// || this.$messages[startIndex].loading) {\n // Message headers are loaded or data is coming\n loaded = true;\n }\n\n // Preload more headers if possible\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.LOOKAHEAD, max - 1);\n if (!angular.isDefined(this.$messages[endIndex].subject) &&\n !angular.isDefined(this.$messages[endIndex].loading)) {\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.SIZE, max);\n for (uids = []; startIndex < endIndex && startIndex < max; startIndex++) {\n if (angular.isDefined(this.$messages[startIndex].subject) || this.$messages[startIndex].loading) {\n // Message at this index is already loaded; increase the end index\n endIndex++;\n }\n else {\n // Message at this index will be loaded\n uids.push(this.$messages[startIndex].uid);\n this.$messages[startIndex].loading = true;\n }\n }\n\n Mailbox.$log.debug('Loading UIDs ' + uids.join(' '));\n futureHeadersData = Mailbox.$$resource.post(this.id, 'headers', {uids: uids});\n this.$unwrapHeaders(futureHeadersData);\n }\n }\n return loaded;\n };\n\n /**\n * @function isEditable\n * @memberof Mailbox.prototype\n * @desc Checks if the mailbox is editable based on its type.\n * @returns true if the mailbox is not a special folder.\n */\n Mailbox.prototype.isEditable = function() {\n return this.type == 'folder';\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$rename = function() {\n var _this = this,\n findParent,\n deferred = Mailbox.$q.defer(),\n parent,\n children,\n i;\n\n if (this.name == this.$shadowData.name) {\n // Name hasn't changed\n deferred.resolve();\n return deferred.promise;\n }\n\n // Local recursive function\n findParent = function(parent, children) {\n var parentMailbox = null,\n mailbox = _.find(children, function(o) {\n return o.path == _this.path;\n });\n if (mailbox) {\n parentMailbox = parent;\n }\n else {\n angular.forEach(children, function(o) {\n if (!parentMailbox && o.children && o.children.length > 0) {\n parentMailbox = findParent(o, o.children);\n }\n });\n }\n return parentMailbox;\n };\n\n // Find mailbox parent\n parent = findParent(null, this.$account.$mailboxes);\n if (parent === null)\n children = this.$account.$mailboxes;\n else\n children = parent.children;\n\n // Find index of mailbox among siblings\n i = _.indexOf(_.pluck(children, 'id'), this.id);\n\n this.$save().then(function(data) {\n var sibling;\n angular.extend(_this, data); // update the path attribute\n _this.id = _this.$id();\n\n // Move mailbox among its siblings according to its new name\n children.splice(i, 1);\n sibling = _.find(children, function(o) {\n Mailbox.$log.debug(o.name + ' ? ' + _this.name);\n return (o.type == 'folder' && o.name.localeCompare(_this.name) > 0);\n });\n if (sibling) {\n i = _.indexOf(_.pluck(children, 'id'), sibling.id);\n }\n else {\n i = children.length;\n }\n children.splice(i, 0, _this);\n\n deferred.resolve();\n }, function(data) {\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $compact\n * @memberof Mailbox.prototype\n * @desc Compact the mailbox\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$compact = function() {\n return Mailbox.$$resource.post(this.id, 'expunge');\n };\n\n /**\n * @function $setFolderAs\n * @memberof Mailbox.prototype\n * @desc Set a folder as Drafts/Sent/Trash\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$setFolderAs = function(type) {\n return Mailbox.$$resource.post(this.id, 'setAs' + type + 'Folder');\n };\n\n /**\n * @function $emptyTrash\n * @memberof Mailbox.prototype\n * @desc Empty the Trash folder.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$emptyTrash = function() {\n var _this = this;\n\n return Mailbox.$$resource.post(this.id, 'emptyTrash').then(function() {\n // Remove all messages from the mailbox\n _this.$messages = [];\n _this.uidsMap = {};\n _this.unseenCount = 0;\n\n // If we had any submailboxes, lets do a refresh of the mailboxes list\n if (angular.isDefined(_this.children) && _this.children.length)\n _this.$account.$getMailboxes({reload: true});\n });\n };\n\n /**\n * @function $markAsRead\n * @memberof Mailbox.prototype\n * @desc Mark all messages from folder as read\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$markAsRead = function() {\n return Mailbox.$$resource.post(this.id, 'markRead');\n };\n\n /**\n * @function $flagMessages\n * @memberof Mailbox.prototype\n * @desc Add or remove a flag on a message set\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$flagMessages = function(uids, flags, operation) {\n var data = {msgUIDs: uids,\n flags: flags,\n operation: operation};\n\n return Mailbox.$$resource.post(this.id, 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $delete\n * @memberof Mailbox.prototype\n * @desc Delete the mailbox from the server\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$delete = function() {\n var _this = this,\n deferred = Mailbox.$q.defer(),\n promise;\n\n promise = Mailbox.$$resource.remove(this.id);\n\n promise.then(function() {\n _this.$account.$getMailboxes({reload: true});\n deferred.resolve(true);\n }, function(data, status) {\n deferred.reject(data);\n });\n return deferred.promise;\n };\n\n /**\n * @function $deleteMessages\n * @memberof Mailbox.prototype\n * @desc Delete multiple messages from mailbox.\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$deleteMessages = function(uids) {\n return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});\n };\n\n /**\n * @function $copyMessages\n * @memberof Mailbox.prototype\n * @desc Copy multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$copyMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'copyMessages', {uids: uids, folder: folder});\n };\n\n /**\n * @function $moveMessages\n * @memberof Mailbox.prototype\n * @desc Move multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$moveMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'moveMessages', {uids: uids, folder: folder});\n };\n \n /**\n * @function $reset\n * @memberof Mailbox.prototype\n * @desc Reset the original state the mailbox's data.\n */\n Mailbox.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key != 'children' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit();\n };\n\n /**\n * @function $save\n * @memberof Mailbox.prototype\n * @desc Save the mailbox to the server. This currently can only affect the name of the mailbox.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$save = function() {\n var _this = this;\n\n return Mailbox.$$resource.save(this.id, this.$omit()).then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n Mailbox.$log.debug(JSON.stringify(data, undefined, 2));\n return data;\n }, function(data) {\n Mailbox.$log.error(JSON.stringify(data, undefined, 2));\n // Restore previous version\n _this.$reset();\n });\n };\n\n /**\n * @function $newMailbox\n * @memberof Mailbox.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Mailbox.prototype.$newMailbox = function(path, name) {\n return this.$account.$newMailbox(path, name);\n };\n\n /**\n * @function $omit\n * @memberof Mailbox.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Mailbox instance\n */\n Mailbox.prototype.$omit = function() {\n var mailbox = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'children' &&\n key[0] != '$') {\n mailbox[key] = value;\n }\n });\n return mailbox;\n };\n\n /**\n * @function $unwrap\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and instanciate new Message objects using received data.\n * @param {promise} futureMailboxData - a promise of the Mailbox's metadata\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$unwrap = function(futureMailboxData) {\n var _this = this,\n deferred = Mailbox.$q.defer();\n\n this.$futureMailboxData = futureMailboxData;\n this.$futureMailboxData.then(function(data) {\n Mailbox.$timeout(function() {\n var uids, headers;\n\n _this.init(data);\n\n if (_this.uids) {\n Mailbox.$log.debug('unwrapping ' + data.uids.length + ' messages');\n\n // First entry of 'headers' are keys\n headers = _.invoke(_this.headers[0], 'toLowerCase');\n _this.headers.splice(0, 1);\n\n // First entry of 'uids' are keys when threaded view is enabled\n if (_this.threaded) {\n uids = _this.uids[0];\n _this.uids.splice(0, 1);\n }\n\n // Instanciate Message objects\n _.reduce(_this.uids, function(msgs, msg, i) {\n var data;\n if (_this.threaded)\n data = _.object(uids, msg);\n else\n data = {uid: msg.toString()};\n\n // Build map of UID <=> index\n _this.uidsMap[data.uid] = i;\n\n msgs.push(new Mailbox.$Message(_this.$account.id, _this, data, true));\n\n return msgs;\n }, _this.$messages);\n\n // Extend Message objects with received headers\n _.each(_this.headers, function(data) {\n var msg = _.object(headers, data),\n i = _this.uidsMap[msg.uid.toString()];\n _.extend(_this.$messages[i], msg);\n });\n }\n Mailbox.$log.debug('mailbox ' + _this.id + ' ready');\n _this.$isLoading = false;\n deferred.resolve(_this.$messages);\n });\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapHeaders\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and extend matching Message objects using received data.\n * @param {promise} futureHeadersData - a promise of some messages metadata\n */\n Mailbox.prototype.$unwrapHeaders = function(futureHeadersData) {\n var _this = this;\n\n futureHeadersData.then(function(data) {\n Mailbox.$timeout(function() {\n var headers, j;\n if (data.length > 0) {\n // First entry of 'headers' are keys\n headers = _.invoke(data[0], 'toLowerCase');\n data.splice(0, 1);\n _.each(data, function(messageHeaders) {\n messageHeaders = _.object(headers, messageHeaders);\n j = _this.uidsMap[messageHeaders.uid.toString()];\n if (angular.isDefined(j)) {\n _.extend(_this.$messages[j], messageHeaders);\n }\n });\n }\n });\n });\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Message\n * @constructor\n * @param {string} accountId - the account ID\n * @param {string} mailboxPath - an array of the mailbox path components\n * @param {object} futureAddressBookData - either an object literal or a promise\n * @param {bool} lazy - do \"lazy loading\" so we are very quick at initializing message instances\n */\n function Message(accountId, mailbox, futureMessageData, lazy) {\n this.accountId = accountId;\n this.$mailbox = mailbox;\n this.$hasUnsafeContent = false;\n this.$loadUnsafeContent = false;\n this.$showDetailedRecipients = false;\n this.editable = {to: [], cc: [], bcc: []};\n this.selected = false;\n\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n if (angular.isDefined(lazy) && lazy) {\n this.uid = futureMessageData.uid;\n }\n else {\n angular.extend(this, futureMessageData);\n this.$formatFullAddresses();\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\n }\n\n /**\n * @memberof Message\n * @desc The factory we'll use to register with Angular\n * @returns the Message constructor\n */\n Message.$factory = ['$q', '$timeout', '$log', '$sce', 'sgSettings', 'Gravatar', 'Resource', 'Preferences', function($q, $timeout, $log, $sce, Settings, Gravatar, Resource, Preferences) {\n angular.extend(Message, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $sce: $sce,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser())\n });\n // Initialize tags form user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailLabelsColors) {\n Message.$tags = Preferences.defaults.SOGoMailLabelsColors;\n }\n });\n\n return Message; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Message in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Message', Message.$factory);\n\n /**\n * @function filterTags\n * @memberof Message.prototype\n * @desc Search for tags (ie., mail labels) matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Message.filterTags = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Message.$tags), function(tag) {\n var value = Message.$tags[tag];\n return value[0].search(re) != -1;\n });\n };\n\n /**\n * @function $absolutePath\n * @memberof Message.prototype\n * @desc Build the path of the message\n * @returns a string representing the path relative to the mail module\n */\n Message.prototype.$absolutePath = function(options) {\n if (angular.isUndefined(this.id)) {\n var path;\n path = _.map(this.$mailbox.path.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n path.splice(0, 0, this.accountId); // insert account ID\n if (options && options.asDraft && this.draftId) {\n path.push(this.draftId); // add draft ID\n }\n else {\n path.push(this.uid); // add message UID\n }\n\n this.id = path.join('/');\n }\n\n return this.id;\n };\n\n /**\n * @function $setUID\n * @memberof Message.prototype\n * @desc Change the UID of the message. This happens when saving a draft.\n * @param {number} uid - the new message UID\n */\n Message.prototype.$setUID = function(uid) {\n var oldUID = this.uid || -1;\n\n if (oldUID != uid) {\n this.uid = uid;\n if (oldUID > -1 && this.$mailbox.uidsMap[oldUID]) {\n this.$mailbox.uidsMap[uid] = this.$mailbox.uidsMap[oldUID];\n this.$mailbox.uidsMap[oldUID] = null;\n }\n }\n };\n\n /**\n * @function $formatFullAddresses\n * @memberof Message.prototype\n * @desc Format all sender and recipients addresses with a complete description (name ).\n * This function also generates a gravatar for each email address, and a short name\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n var identities = _.pluck(_this.$mailbox.$account.identities, 'email');\n\n // Build long representation of email addresses\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n _.each(_this[type], function(data, i) {\n if (data.name && data.name != data.email) {\n data.full = data.name + ' <' + data.email + '>';\n\n // If we have \"Alice Foo\" as name, we grab \"Alice\"\n if (data.name.split(' ').length)\n data.shortname = data.name.split(' ')[0].replace('\\'','');\n }\n else {\n data.full = '<' + data.email + '>';\n data.shortname = data.email.split('@')[0];\n }\n\n // Generate the gravatar\n data.image = Message.$gravatar(data.email, 32);\n\n // If the current user is the recepient, overwrite\n // the short name with 'me'\n if (_.indexOf(identities, data.email) >= 0)\n data.shortname = l('me');\n });\n });\n };\n\n /**\n * @function $shortRecipients\n * @memberof Message.prototype\n * @desc Format all recipients into a very compact string\n * @returns a compacted string of all recipients\n */\n Message.prototype.$shortRecipients = function() {\n var _this = this;\n var result = [];\n\n // Build long representation of email addresses\n _.each(['to', 'cc', 'bcc'], function(type) {\n _.each(_this[type], function(data, i) {\n result.push(data.shortname);\n });\n });\n\n return result.join(', ');\n };\n\n /**\n * @function $shortAddress\n * @memberof Message.prototype\n * @desc Format the first address of a specific type with a short description.\n * @returns a string of the name or the email of the envelope address type\n */\n Message.prototype.$shortAddress = function(type) {\n var address = '';\n if (this[type] && this[type].length > 0) {\n address = this[type][0].name || this[type][0].email || '';\n }\n\n return address;\n };\n\n /**\n * @function loadUnsafeContent\n * @memberof Message.prototype\n * @desc Mark the message to load unsafe resources when calling $content().\n */\n Message.prototype.loadUnsafeContent = function() {\n this.$loadUnsafeContent = true;\n };\n\n /**\n * @function showDetailedRecipients\n * @memberof Message.prototype\n * @desc Mark the message to show all to/cc recipients.\n */\n Message.prototype.showDetailedRecipients = function() {\n this.$showDetailedRecipients = true;\n };\n\n /**\n * @function $content\n * @memberof Message.prototype\n * @desc Get the message body as accepted by SCE (Angular Strict Contextual Escaping).\n * @returns the HTML representation of the body\n */\n Message.prototype.$content = function() {\n var _this = this,\n parts = [],\n _visit = function(part) {\n part.msgclass = 'msg-attachment-other';\n if (part.type == 'UIxMailPartAlternativeViewer') {\n _visit(_.find(part.content, function(alternatePart) {\n return part.preferredPart == alternatePart.contentType;\n }));\n }\n // Can be used for UIxMailPartMixedViewer and UIxMailPartMessageViewer\n else if (angular.isArray(part.content)) {\n _.each(part.content, function(mixedPart) {\n _visit(mixedPart);\n });\n }\n else {\n if (angular.isUndefined(part.safeContent)) {\n // Keep a copy of the original content\n part.safeContent = part.content;\n _this.$hasUnsafeContent = (part.safeContent.indexOf(' unsafe-') > -1);\n }\n if (part.type == 'UIxMailPartHTMLViewer') {\n part.html = true;\n if (_this.$loadUnsafeContent) {\n if (angular.isUndefined(part.unsafeContent)) {\n part.unsafeContent = document.createElement('div');\n part.unsafeContent.innerHTML = part.safeContent;\n angular.forEach(['src', 'data', 'classid', 'background', 'style'], function(suffix) {\n var elements = part.unsafeContent.querySelectorAll('[unsafe-' + suffix + ']'),\n element,\n value,\n i;\n for (i = 0; i < elements.length; i++) {\n element = angular.element(elements[i]);\n value = element.attr('unsafe-' + suffix);\n element.attr(suffix, value);\n element.removeAttr('unsafe-' + suffix);\n }\n });\n }\n part.content = Message.$sce.trustAs('html', part.unsafeContent.innerHTML);\n }\n else {\n part.content = Message.$sce.trustAs('html', part.safeContent);\n }\n parts.push(part);\n }\n else if (part.type == 'UIxMailPartICalViewer' ||\n part.type == 'UIxMailPartImageViewer' ||\n part.type == 'UIxMailPartLinkViewer') {\n\n // UIxMailPartICalViewer injects 'participants'\n if (part.participants) {\n _.each(part.participants, function(participant) {\n participant.image = Message.$gravatar(participant.email, 32);\n });\n }\n\n if (part.type == 'UIxMailPartImageViewer')\n part.msgclass = 'msg-attachment-image';\n\n // Trusted content that can be compiled (Angularly-speaking)\n part.compile = true;\n parts.push(part);\n }\n else {\n part.html = true;\n part.content = Message.$sce.trustAs('html', part.safeContent);\n parts.push(part);\n }\n }\n };\n _visit(this.parts);\n\n return parts;\n };\n\n /**\n * @function $editableContent\n * @memberof Message.prototype\n * @desc First, fetch the draft ID that corresponds to the temporary draft object on the SOGo server.\n * Secondly, fetch the editable message body along with other metadata such as the recipients.\n * @returns the HTML representation of the body\n */\n Message.prototype.$editableContent = function() {\n var _this = this;\n\n return Message.$$resource.fetch(this.$absolutePath(), 'edit').then(function(data) {\n angular.extend(_this, data);\n return Message.$$resource.fetch(_this.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('editable = ' + JSON.stringify(data, undefined, 2));\n angular.extend(_this.editable, data);\n return data.text;\n });\n });\n };\n\n /**\n * @function addTag\n * @memberof Message.prototype\n * @desc Add a mail tag on the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.addTag = function(tag) {\n return this.$addOrRemoveTag('add', tag);\n };\n\n /**\n * @function removeTag\n * @memberof Message.prototype\n * @desc Remove a mail tag from the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.removeTag = function(tag) {\n return this.$addOrRemoveTag('remove', tag);\n };\n\n /**\n * @function $addOrRemoveTag\n * @memberof Message.prototype\n * @desc Add or remove a mail tag on the current message.\n * @param {string} operation - the operation name to perform\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$addOrRemoveTag = function(operation, tag) {\n var data = {\n operation: operation,\n msgUIDs: [this.uid],\n flags: tag\n };\n\n if (tag)\n return Message.$$resource.post(this.$mailbox.$id(), 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $imipAction\n * @memberof Message.prototype\n * @desc Perform IMIP actions on the current message.\n * @param {string} path - the path of the IMIP calendar part \n * @param {string} action - the the IMIP action to perform\n * @param {object} data - the delegation info \n */\n Message.prototype.$imipAction = function(path, action, data) {\n var _this = this;\n Message.$$resource.post([this.$absolutePath(), path].join('/'), action, data).then(function(data) {\n Message.$timeout(function() {\n _this.$reload();\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $sendMDN\n * @memberof Message.prototype\n * @desc Send MDN response for current email message\n */\n Message.prototype.$sendMDN = function() {\n this.shouldAskReceipt = 0;\n return Message.$$resource.post(this.$absolutePath(), 'sendMDN');\n };\n\n /**\n * @function $deleteAttachment\n * @memberof Message.prototype\n * @desc Delete an attachment from a message being composed\n * @param {string} filename - the filename of the attachment to delete\n */\n Message.prototype.$deleteAttachment = function(filename) {\n var action = 'deleteAttachment?filename=' + filename;\n var _this = this;\n Message.$$resource.post(this.$absolutePath({asDraft: true}), action).then(function(data) {\n Message.$timeout(function() {\n _this.editable.attachmentAttrs = _.filter(_this.editable.attachmentAttrs, function(attachment) {\n return attachment.filename != filename;\n });\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $markAsFlaggedOrUnflagged\n * @memberof Message.prototype\n * @desc Add or remove a the \\\\Flagged flag on the current message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.toggleFlag = function() {\n var _this = this,\n action = 'markMessageFlagged';\n\n if (this.isflagged)\n action = 'markMessageUnflagged';\n\n return Message.$$resource.post(this.$absolutePath(), action).then(function(data) {\n Message.$timeout(function() {\n _this.isflagged = !_this.isflagged;\n });\n });\n };\n\n /**\n * @function $reload\n * @memberof Message.prototype\n * @desc Fetch the viewable message body along with other metadata such as the list of attachments.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$reload = function() {\n var futureMessageData;\n\n futureMessageData = Message.$$resource.fetch(this.$absolutePath(), 'view');\n\n return this.$unwrap(futureMessageData);\n };\n\n /**\n * @function $reply\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$reply = function() {\n return this.$newDraft('reply');\n };\n\n /**\n * @function $replyAll\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender and all recipients.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$replyAll = function() {\n return this.$newDraft('replyall');\n };\n\n /**\n * @function $forward\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a forward.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$forward = function() {\n return this.$newDraft('forward');\n };\n\n /**\n * @function $newDraft\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply or a forward of the current message and associated\n * to the draft mailbox.\n * @see {@link Account.$newMessage}\n * @see {@link Message.$editableContent}\n * @see {@link Message.$reply}\n * @see {@link Message.$replyAll}\n * @see {@link Message.$forwad}\n * @param {string} action - the HTTP action to perform on the message\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$newDraft = function(action) {\n var _this = this;\n\n // Query server for draft folder and draft UID\n return Message.$$resource.fetch(this.$absolutePath(), action).then(function(data) {\n var mailbox, message;\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n mailbox = _this.$mailbox.$account.$getMailboxByPath(data.mailboxPath);\n message = new Message(data.accountId, mailbox, data);\n // Fetch draft initial data\n return Message.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2) + ' original UID: ' + _this.uid);\n angular.extend(message.editable, data);\n\n // We keep a reference to our original message in order to update the flags\n message.origin = {message: _this, action: action};\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 _this = this,\n 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 if (angular.isDefined(_this.origin)) {\n if (_this.origin.action.startsWith('reply'))\n _this.origin.message.isanswered = true;\n else if (_this.origin.action == 'forward')\n _this.origin.message.isforwarded = true;\n }\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\n // Resolve and expose the promise\n this.$futureMessageData = futureMessageData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n if (_this.isread === 0) {\n Message.$$resource.fetch(_this.$absolutePath(), 'markMessageRead').then(function() {\n Message.$timeout(function() {\n _this.isread = true;\n _this.$mailbox.unseenCount--;\n });\n });\n }\n return Message.$timeout(function() {\n angular.extend(_this, data);\n _this.$formatFullAddresses();\n _this.$loadUnsafeContent = false;\n return _this;\n });\n });\n\n return this.$futureMessageData;\n };\n\n /**\n * @function $omit\n * @memberof Message.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Message instance\n */\n Message.prototype.$omit = function() {\n var message = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n message[key] = value;\n }\n });\n\n // Format addresses as arrays\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n if (message[type])\n message[type] = _.invoke(message[type].split(','), 'trim');\n });\n\n //Message.$log.debug(JSON.stringify(message, undefined, 2));\n return message;\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxController.$inject = ['$state', '$timeout', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox'];\n function MailboxController($state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, focus, Dialog, Account, Mailbox) {\n var vm = this, messageDialog = null;\n\n Mailbox.selectedFolder = stateMailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.selectedFolder = stateMailbox;\n vm.selectMessage = selectMessage;\n vm.unselectMessages = unselectMessages;\n vm.confirmDeleteSelectedMessages = confirmDeleteSelectedMessages;\n vm.copySelectedMessages = copySelectedMessages;\n // vm.moveSelectedMessages = moveSelectedMessages;\n vm.saveSelectedMessages = saveSelectedMessages;\n vm.markSelectedMessagesAsFlagged = markSelectedMessagesAsFlagged;\n vm.markSelectedMessagesAsUnread = markSelectedMessagesAsUnread;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.mode = { search: false };\n\n function selectMessage(message) {\n $state.go('mail.account.mailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path), messageId: message.uid});\n }\n\n function unselectMessages() {\n _.each(vm.selectedFolder.$messages, function(message) { message.selected = false; });\n }\n\n function confirmDeleteSelectedMessages() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected messages?'))\n .then(function() {\n // User confirmed the deletion\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$deleteMessages(selectedUIDs).then(function() {\n // Decrement the unseenCount accordingly\n var unseenCount = _.filter(selectedMessages, function(message) { return !message.isread; });\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n vm.selectedFolder.unseenCount =- unseenCount;\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n });\n }\n\n function copySelectedMessages(folder) {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder).then(function() {\n // TODO: refresh target mailbox?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n // function moveSelectedMessages(folder) {\n // var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected });\n // var selectedUIDs = _.pluck(selectedMessages, 'uid');\n // vm.selectedFolder.$moveMessages(selectedUIDs, '/' + folder).then(function() {\n // // TODO: refresh target mailbox?\n // vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n // });\n // }\n\n function saveSelectedMessages() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/saveMessages?uid=' + selectedUIDs.join(\",\");\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.$messages, function(message) {\n message.selected = true;\n });\n }\n\n function markSelectedMessagesAsFlagged() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, '\\\\Flagged', 'add').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isflagged = true;\n });\n });\n }\n\n function markSelectedMessagesAsUnread() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, 'seen', 'remove').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isread = false;\n vm.selectedFolder.unseenCount++;\n });\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter({ sort: field });\n }\n\n function sortedBy(field) {\n return Mailbox.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter();\n }\n\n function newMessage($event) {\n var message;\n\n if (messageDialog === null) {\n message = vm.account.$newMessage();\n messageDialog = $mdDialog\n .show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message,\n stateRecipients: []\n }\n })\n .finally(function() {\n messageDialog = null;\n });\n }\n }\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxController', MailboxController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxesController.$inject = ['$state', '$timeout', '$mdDialog', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Account', 'Mailbox', 'User', 'Preferences', 'stateAccounts'];\n function MailboxesController($state, $timeout, $mdDialog, focus, encodeUriFilter, Dialog, Settings, Account, Mailbox, User, Preferences, stateAccounts) {\n var vm = this,\n account,\n mailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.newFolder = newFolder;\n vm.delegate = delegate;\n vm.editFolder = editFolder;\n vm.revertEditing = revertEditing;\n vm.selectFolder = selectFolder;\n vm.saveFolder = saveFolder;\n vm.compactFolder = compactFolder;\n vm.emptyTrashFolder = emptyTrashFolder;\n vm.exportMails = exportMails;\n vm.confirmDelete = confirmDelete;\n vm.markFolderRead = markFolderRead;\n vm.share = share;\n vm.metadataForFolder = metadataForFolder;\n vm.setFolderAs = setFolderAs;\n vm.refreshUnseenCount = refreshUnseenCount;\n\n if ($state.current.name == 'mail' && vm.accounts.length > 0 && vm.accounts[0].$mailboxes.length > 0) {\n // Redirect to first mailbox of first account if no mailbox is selected\n account = vm.accounts[0];\n mailbox = account.$mailboxes[0];\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(mailbox.path) });\n }\n\n function newFolder(parentFolder) {\n Dialog.prompt(l('New folder'),\n l('Enter the new name of your folder :'))\n .then(function(name) {\n parentFolder.$newMailbox(parentFolder.id, name)\n .then(function() {\n // success\n }, function(data, status) {\n Dialog.alert(l('An error occured while creating the mailbox \"%{0}\".', name),\n l(data.error));\n });\n });\n }\n\n function delegate(account) {\n $mdDialog.show({\n templateUrl: account.id + '/delegation', // UI/Templates/MailerUI/UIxMailUserDelegation.wox\n controller: MailboxDelegationController,\n controllerAs: 'delegate',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n User: User,\n account: account\n }\n });\n\n /**\n * @ngInject\n */\n MailboxDelegationController.$inject = ['$scope', '$mdDialog', 'User', 'account'];\n function MailboxDelegationController($scope, $mdDialog, User, account) {\n var vm = this;\n\n vm.users = account.delegates;\n vm.account = account;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n\n function userFilter($query) {\n return User.$filter($query, account.delegates);\n }\n\n function closeModal() {\n $mdDialog.hide();\n }\n\n function removeUser(user) {\n account.$removeDelegate(user.uid).catch(function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function addUser(data) {\n if (data) {\n account.$addDelegate(data).then(function() {\n vm.userToAdd = '';\n vm.searchText = '';\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n }\n }\n } // delegate\n\n function editFolder(folder) {\n vm.editMode = folder.path;\n focus('mailboxName_' + folder.path);\n }\n\n function revertEditing(folder) {\n folder.$reset();\n vm.editMode = false;\n }\n\n function selectFolder(account, folder) {\n if (vm.editMode == folder.path)\n return;\n vm.editMode = false;\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(folder.path) });\n }\n\n function saveFolder(folder) {\n folder.$rename();\n }\n\n function compactFolder(folder) {\n folder.$compact().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function emptyTrashFolder(folder) {\n folder.$emptyTrash().then(function() {\n // Success\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function exportMails(folder) {\n window.location.href = ApplicationBaseURL + '/' + folder.id + '/exportFolder';\n }\n\n function confirmDelete(folder) {\n Dialog.confirm(l('Confirmation'), l('Do you really want to move this folder into the trash ?'))\n .then(function() {\n folder.$delete()\n .then(function() {\n $state.go('mail');\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the mailbox \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n\n function markFolderRead(folder) {\n folder.$markAsRead();\n }\n\n function share(folder) {\n // Fetch list of ACL users\n folder.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: folder.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: folder.$acl.users,\n User: User,\n folder: folder\n }\n });\n });\n } // share\n\n function metadataForFolder(folder) {\n if (folder.type == 'inbox')\n return {name: folder.name, icon:'inbox'};\n else if (folder.type == 'draft')\n return {name: l('DraftsFolderName'), icon: 'drafts'};\n else if (folder.type == 'sent')\n return {name: l('SentFolderName'), icon: 'send'};\n else if (folder.type == 'trash')\n return {name: l('TrashFolderName'), icon: 'delete'};\n else if (folder.type == 'additional')\n return {name: folder.name, icon: 'folder_shared'};\n\n //if ($rootScope.currentFolder == folder)\n // return 'folder_open';\n\n return {name: folder.name, icon: 'folder'};\n }\n\n function setFolderAs(folder, type) {\n folder.$setFolderAs(type).then(function() {\n folder.$account.$getMailboxes({reload: true});\n }, function(error) {\n Dialog.alert(l('Warning'), error);\n });\n }\n\n function refreshUnseenCount() {\n var unseenCountFolders = window.unseenCountFolders;\n\n _.forEach(vm.accounts, function(account) {\n\n // Always include the INBOX\n if (!_.includes(unseenCountFolders, account.id + '/folderINBOX'))\n unseenCountFolders.push(account.id + '/folderINBOX');\n\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (angular.isDefined(mailbox.unseenCount) &&\n !_.includes(unseenCountFolders, mailbox.id))\n unseenCountFolders.push(mailbox.id);\n });\n });\n\n Account.$$resource.post('', 'unseenCount', {mailboxes: unseenCountFolders}).then(function(data) {\n _.forEach(vm.accounts, function(account) {\n _.forEach(account.$$flattenMailboxes, function(mailbox) {\n if (data[mailbox.id])\n mailbox.unseenCount = data[mailbox.id];\n });\n });\n });\n\n Preferences.ready().then(function() {\n var refreshViewCheck = Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually')\n $timeout(vm.refreshUnseenCount, refreshViewCheck.timeInterval()*1000);\n });\n }\n\n vm.refreshUnseenCount();\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MailboxesController', MailboxesController); \n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageController.$inject = ['$scope', '$state', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'stateMessage', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'Message'];\n function MessageController($scope, $state, $mdDialog, stateAccounts, stateAccount, stateMailbox, stateMessage, encodeUriFilter, focus, Dialog, Account, Mailbox, Message) {\n var vm = this, messageDialog = null;\n\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.mailbox = stateMailbox;\n vm.message = stateMessage;\n vm.service = Message;\n vm.tags = { searchText: '', selected: '' };\n vm.doDelete = doDelete;\n vm.close = close;\n vm.reply = reply;\n vm.replyAll = replyAll;\n vm.forward = forward;\n vm.edit = edit;\n vm.newMessage = newMessage;\n vm.saveMessage = saveMessage;\n vm.viewRawSource = viewRawSource;\n\n // Watch the message model \"flags\" attribute to remove on-the-fly a tag from the IMAP message\n // when removed from the message viewer.\n // TODO: this approach should be reviewed once md-chips supports ng-change.\n $scope.$watchCollection('viewer.message.flags', function(oldTags, newTags) {\n _.each(_.difference(newTags, oldTags), function(tag) {\n vm.message.removeTag(tag);\n });\n });\n\n function doDelete() {\n stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {\n // Remove message from list of messages\n var index = _.findIndex(stateMailbox.$messages, function(o) {\n return o.uid == stateMessage.uid;\n });\n if (index != -1)\n stateMailbox.$messages.splice(index, 1);\n // Remove message object from scope\n vm.message = null;\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n });\n }\n\n function showMailEditor($event, message, recipients) {\n if (messageDialog === null) {\n if (!angular.isDefined(recipients))\n recipients = [];\n\n messageDialog = $mdDialog\n .show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n })\n .finally(function() {\n messageDialog = null;\n });\n }\n }\n\n function close() {\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) }).then(function() {\n vm.message = null;\n delete stateMailbox.selectedMessage;\n });\n }\n\n function reply($event) {\n var message = vm.message.$reply();\n showMailEditor($event, message);\n }\n\n function replyAll($event) {\n var message = vm.message.$replyAll();\n showMailEditor($event, message);\n }\n\n function forward($event) {\n var message = vm.message.$forward();\n showMailEditor($event, message);\n }\n\n function edit($event) {\n vm.message.$editableContent().then(function() {\n showMailEditor($event, vm.message);\n });\n }\n\n function newMessage($event, recipient) {\n var message = vm.account.$newMessage();\n showMailEditor($event, message, [recipient]);\n }\n\n function saveMessage() {\n window.location.href = ApplicationBaseURL + '/' + vm.mailbox.id + '/saveMessages?uid=' + vm.message.uid;\n }\n\n function viewRawSource($event) {\n Message.$$resource.post(vm.message.id, \"viewsource\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: MessageRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n MessageRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function MessageRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n \n angular\n .module('SOGo.MailerUI') \n .controller('MessageController', MessageController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageEditorController.$inject = ['$stateParams', '$state', '$q', '$mdDialog', 'FileUploader', 'stateAccounts', 'stateMessage', 'stateRecipients', '$timeout', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $state, $q, $mdDialog, FileUploader, stateAccounts, stateMessage, stateRecipients, $timeout, encodeUriFilter, focus, Dialog, Account, Mailbox, AddressBook, Preferences) {\n var vm = this;\n\n vm.addRecipient = addRecipient;\n vm.autocomplete = {to: {}, cc: {}, bcc: {}};\n vm.autosave = null;\n vm.autosaveDrafts = autosaveDrafts;\n vm.hideCc = true;\n vm.hideBcc = true;\n vm.cancel = cancel;\n vm.send = send;\n vm.contactFilter = contactFilter;\n vm.identities = _.pluck(_.flatten(_.pluck(stateAccounts, 'identities')), 'full');\n vm.uploader = new FileUploader({\n url: stateMessage.$absolutePath({asDraft: true}) + '/save',\n autoUpload: true,\n alias: 'attachments',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n stateMessage.$setUID(response.uid);\n stateMessage.$reload();\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n\n // We remove the attachment\n stateMessage.$deleteAttachment(item.file.name);\n this.removeFromQueue(item);\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n if ($stateParams.actionName == 'reply') {\n stateMessage.$reply().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'replyall') {\n stateMessage.$replyAll().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'forward') {\n stateMessage.$forward().then(function(msgObject) {\n vm.message = msgObject;\n });\n }\n else if (angular.isDefined(stateMessage)) {\n vm.message = stateMessage;\n }\n\n if (angular.isDefined(stateRecipients)) {\n vm.message.editable.to = _.union(vm.message.editable.to, _.pluck(stateRecipients, 'full'));\n }\n\n function cancel() {\n // TODO: delete draft?\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n $mdDialog.cancel();\n }\n\n function send() {\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n vm.message.$send().then(function(data) {\n $mdDialog.hide();\n }, function(data) {\n Dialog.alert(l(data.status), l(data.message));\n });\n }\n\n function contactFilter($query) {\n return AddressBook.$filterAll($query);\n }\n\n function addRecipient(user) {\n var recipient = [];\n\n if (angular.isString(user))\n return user;\n if (user.$$fullname)\n recipient.push(user.$$fullname);\n if (user.$$email)\n recipient.push('<' + user.$$email + '>');\n\n return recipient.join(' ');\n }\n\n // Drafts autosaving\n function autosaveDrafts() {\n vm.message.$save();\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n }\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n vm.localeCode = Preferences.defaults.LocaleCode;\n });\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MessageEditorController', MessageEditorController); \n})();\n"]} \ No newline at end of file +{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js","Mailer/VirtualMailbox.service.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js","Mailer/sgIMIP.directive.js"],"names":["Account","futureAccountData","then","angular","extend","this","_","each","identities","identity","fullName","full","email","$log","debug","JSON","stringify","undefined","$factory","$q","$timeout","Settings","Resource","Mailbox","Message","$$resource","activeUser","$Mailbox","$Message","module","e","factory","$findAll","data","$unwrapCollection","fetch","o","collection","forEach","i","id","prototype","$getMailboxes","options","_this","$mailboxes","reload","$find","$flattenMailboxes","when","allMailboxes","_visit","mailboxes","push","children","length","$$flattenMailboxes","$getMailboxByType","type","mailbox","_find","find","console","specialMailboxes","$getMailboxByPath","path","$newMailbox","name","post","toString","$newMessage","message","accountId","mailboxPath","$absolutePath","asDraft","editable","$addDelegate","user","deferred","defer","param","uid","indexOf","pluck","delegates","resolve","users","status","reject","l","promise","$removeDelegate","splice","account","futureMailboxData","$account","init","newMailboxData","create","$unwrap","Acl","Preferences","PRELOAD","$$Acl","$Preferences","$query","sort","asc","selectedFolder","$refreshTimeout","$virtualMode","ready","settings","Mail","SortingState","parseInt","constant","LOOKAHEAD","SIZE","createMailboxes","level","index","map","split","component","asCSSIdentifier","join","$isLoading","$messages","uidsMap","$id","$acl","$isEditable","isEditable","isUndefined","$shadowData","$omit","getLength","getItemAtIndex","$loadMessage","$selectedCount","count","filter","selected","$filter","sortingAttributes","filters","isDefined","unseenCount","cancel","searchInput","secondFilter","match","searchBy","copy","refreshViewCheck","defaults","SOGoRefreshViewCheck","f","bind","timeInterval","messageId","endIndex","uids","futureHeadersData","startIndex","max","loaded","subject","Math","min","loading","$unwrapHeaders","$rename","findParent","parent","parentMailbox","$save","sibling","localeCompare","$compact","$setFolderAs","$emptyTrash","$markAsRead","$flagMessages","flags","operation","msgUIDs","$delete","remove","$deleteMessages","$copyMessages","folder","$moveMessages","$reset","value","key","save","error","$futureMailboxData","headers","invoke","threaded","reduce","msgs","msg","object","isError","j","messageHeaders","futureMessageData","lazy","$mailbox","$hasUnsafeContent","$loadUnsafeContent","$showDetailedRecipients","to","cc","bcc","$formatFullAddresses","$sce","Gravatar","$gravatar","SOGoMailLabelsColors","$tags","SOGoMailDisplayRemoteInlineImages","$displayRemoteInlineImages","filterTags","query","re","RegExp","results","keys","tag","pair","search","description","color","draftId","$setUID","oldUID","shortname","replace","image","$shortRecipients","result","$shortAddress","address","loadUnsafeContent","showDetailedRecipients","$content","parts","part","msgclass","content","alternatePart","preferredPart","contentType","isArray","mixedPart","safeContent","html","unsafeContent","document","createElement","innerHTML","suffix","element","elements","querySelectorAll","attr","removeAttr","trustAs","participants","participant","compile","$editableContent","text","addTag","$addOrRemoveTag","removeTag","$imipAction","action","$reload","$sendMDN","shouldAskReceipt","$deleteAttachment","filename","attachmentAttrs","attachment","toggleFlag","isflagged","$reply","$newDraft","$replyAll","$forward","origin","response","$send","startsWith","isanswered","isforwarded","$futureMessageData","isread","VirtualMailbox","setMailboxes","startSearch","params","stopSearch","len","k","MailboxController","$state","$mdDialog","stateAccounts","stateAccount","stateMailbox","encodeUriFilter","focus","Dialog","selectMessage","go","mailboxId","toggleMessageSelection","$event","preventDefault","stopPropagation","unselectMessages","vm","confirmDeleteSelectedMessages","confirm","selectedMessages","selectedUIDs","difference","alert","copySelectedMessages","saveSelectedMessages","window","location","href","ApplicationBaseURL","selectAll","markSelectedMessagesAsFlagged","d","markSelectedMessagesAsUnread","field","sortedBy","cancelSearch","mode","newMessage","messageDialog","show","body","targetEvent","clickOutsideToClose","escapeToClose","templateUrl","controller","controllerAs","locals","accounts","stateMessage","stateRecipients","service","$inject","MailboxesController","User","showAdvancedSearch","showingAdvancedSearch","hideAdvancedSearch","searchPreviousMailbox","toggleAdvancedSearch","virtualMailbox","root","folders","subfolders","addSearchParam","v","currentSearchParam","newSearchParam","n","substring","trim","negative","newFolder","parentFolder","prompt","delegate","MailboxDelegationController","$scope","userFilter","closeModal","hide","removeUser","addUser","userToAdd","searchText","editFolder","editMode","revertEditing","selectFolder","saveFolder","compactFolder","emptyTrashFolder","exportMails","confirmDelete","markFolderRead","share","$users","usersWithACL","metadataForFolder","icon","setFolderAs","refreshUnseenCount","unseenCountFolders","includes","from","current","MessageController","$window","sgSettings","doDelete","findIndex","showMailEditor","recipients","close","selectedMessage","reply","replyAll","forward","edit","openPopup","url","baseURL","wId","popupWindow","open","closePopup","recipient","saveMessage","viewRawSource","MessageRawSourceDialogController","scope","template","tags","$watchCollection","oldTags","newTags","MessageEditorController","$stateParams","FileUploader","AddressBook","autosave","send","contactFilter","$filterAll","addRecipient","isString","$$fullname","$$email","autosaveDrafts","SOGoMailAutoSave","autocomplete","hideCc","hideBcc","flatten","uploader","autoUpload","alias","onProgressItem","item","progress","onSuccessItem","onCancelItem","file","removeFromQueue","onErrorItem","actionName","msgObject","union","localeCode","LocaleCode","sgImip","link","iElement","attrs","ctrl","pathToAttachment","sgImipPath","restrict","sgImipController","delegateInvitation","delegatedTo","iCalendarAction","receiveUpdates","c_email","viewer","directive"],"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 Account\n * @constructor\n * @param {object} futureAccountData\n */\n function Account(futureAccountData) {\n // Data is immediately available\n if (typeof futureAccountData.then !== 'function') {\n angular.extend(this, futureAccountData);\n _.each(this.identities, function(identity) {\n if (identity.fullName)\n identity.full = identity.fullName + ' <' + identity.email + '>';\n else\n identity.full = '<' + identity.email + '>';\n });\n Account.$log.debug('Account: ' + JSON.stringify(futureAccountData, undefined, 2));\n }\n else {\n // The promise will be unwrapped first\n //this.$unwrap(futureAccountData);\n }\n }\n\n /**\n * @memberof Account\n * @desc The factory we'll use to register with Angular\n * @returns the Account constructor\n */\n Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Mailbox, Message) {\n angular.extend(Account, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Mailbox: Mailbox,\n $Message: Message\n });\n\n return Account; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Account in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .factory('Account', Account.$factory);\n\n /**\n * @memberof Account\n * @desc Set the list of accounts and instanciate a new Account object for each item.\n * @param {array} [data] - the metadata of the accounts\n * @returns the list of accounts\n */\n Account.$findAll = function(data) {\n if (!data) {\n return Account.$$resource.fetch('', 'mailAccounts').then(function(o) {\n return Account.$unwrapCollection(o);\n });\n }\n return Account.$unwrapCollection(data);\n };\n\n /**\n * @memberof Account\n * @desc Unwrap to a collection of Account instances.\n * @param {object} data - the accounts information\n * @returns a collection of Account objects\n */\n Account.$unwrapCollection = function(data) {\n var collection = [];\n\n angular.forEach(data, function(o, i) {\n o.id = i;\n collection[i] = new Account(o);\n });\n return collection;\n };\n\n /**\n * @function $getMailboxes\n * @memberof Account.prototype\n * @desc Fetch the list of mailboxes for the current account.\n * @param {object} [options] - force a reload by setting 'reload' to true\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxes = function(options) {\n var _this = this;\n\n if (this.$mailboxes && !(options && options.reload)) {\n return Account.$q.when(this.$mailboxes);\n }\n else {\n return Account.$Mailbox.$find(this).then(function(data) {\n _this.$mailboxes = data;\n _this.$flattenMailboxes({reload: true});\n return _this.$mailboxes;\n });\n }\n };\n\n /**\n * @function $flattenMailboxes\n * @memberof Account.prototype\n * @desc Get a flatten array of the mailboxes.\n * @param {object} [options] - force a reload\n * @returns an array of Mailbox instances\n */\n Account.prototype.$flattenMailboxes = function(options) {\n var _this = this,\n allMailboxes = [],\n _visit = function(mailboxes) {\n _.each(mailboxes, function(o) {\n allMailboxes.push(o);\n if (o.children && o.children.length > 0) {\n _visit(o.children);\n }\n });\n };\n\n if (this.$$flattenMailboxes && !(options && options.reload)) {\n allMailboxes = this.$$flattenMailboxes;\n }\n else {\n _visit(this.$mailboxes);\n _this.$$flattenMailboxes = allMailboxes;\n }\n\n return allMailboxes;\n };\n\n Account.prototype.$getMailboxByType = function(type) {\n var mailbox,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.type == type;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n console.debug(mailbox);\n console.debug(this.specialMailboxes);\n };\n\n /**\n * @function $getMailboxByPath\n * @memberof Account.prototype\n * @desc Recursively find a mailbox using its path\n * @returns a promise of the HTTP operation\n */\n Account.prototype.$getMailboxByPath = function(path) {\n var mailbox = null,\n // Recursive find function\n _find = function(mailboxes) {\n var mailbox = _.find(mailboxes, function(o) {\n return o.path == path;\n });\n if (!mailbox) {\n angular.forEach(mailboxes, function(o) {\n if (!mailbox && o.children && o.children.length > 0) {\n mailbox = _find(o.children);\n }\n });\n }\n return mailbox;\n };\n mailbox = _find(this.$mailboxes);\n\n return mailbox;\n };\n\n /**\n * @function $newMailbox\n * @memberof Account.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMailbox = function(path, name) {\n var _this = this;\n\n return Account.$$resource.post(path.toString(), 'createFolder', {name: name}).then(function() {\n _this.$getMailboxes({reload: true});\n });\n };\n\n /**\n * @function $newMessage\n * @memberof Account.prototype\n * @desc Prepare a new Message object associated to the appropriate mailbox.\n * @returns a promise of the HTTP operations\n */\n Account.prototype.$newMessage = function() {\n var _this = this;\n\n // Query account for draft folder and draft UID\n return Account.$$resource.fetch(this.id.toString(), 'compose').then(function(data) {\n Account.$log.debug('New message (compose): ' + JSON.stringify(data, undefined, 2));\n var message = new Account.$Message(data.accountId, _this.$getMailboxByPath(data.mailboxPath), data);\n return message;\n }).then(function(message) {\n // Fetch draft initial data\n return Account.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Account.$log.debug('New message (edit): ' + JSON.stringify(data, undefined, 2));\n angular.extend(message.editable, data);\n return message;\n });\n });\n };\n\n /**\n * @function $addDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @see {@link User.$filter}\n */\n Account.prototype.$addDelegate = function(user) {\n var _this = this,\n deferred = Account.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.pluck(this.delegates, 'uid'), user.uid) > -1) {\n // No UID specified or user already in delegates\n deferred.resolve();\n }\n else {\n Account.$$resource.fetch(this.id.toString(), 'addDelegate', param).then(function() {\n _this.delegates.push(user);\n deferred.resolve(_this.users);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeDelegate\n * @memberof Account.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @desc Remove a user from the account's delegates\n * @return a promise of the server call to remove the user from the account's delegates\n */\n Account.prototype.$removeDelegate = function(uid) {\n var _this = this,\n param = {uid: uid};\n return Account.$$resource.fetch(this.id.toString(), 'removeDelegate', param).then(function() {\n var i = _.indexOf(_.pluck(_this.delegates, 'uid'), uid);\n if (i >= 0) {\n _this.delegates.splice(i, 1);\n }\n });\n };\n \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Mailbox\n * @constructor\n * @param {object} futureMailboxData - either an object literal or a promise\n */\n function Mailbox(account, futureMailboxData) {\n this.$account = account;\n // Data is immediately available\n if (typeof futureMailboxData.then !== 'function') {\n this.init(futureMailboxData);\n if (this.name && !this.path) {\n // Create a new mailbox on the server\n var newMailboxData = Mailbox.$$resource.create('createFolder', this.name);\n this.$unwrap(newMailboxData);\n }\n }\n else {\n // The promise will be unwrapped first\n // NOTE: this condition never happen for the moment\n this.$unwrap(futureMailboxData);\n }\n }\n\n /**\n * @memberof Mailbox\n * @desc The factory we'll use to register with Angular\n * @returns the Mailbox constructor\n */\n Mailbox.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Message', 'Acl', 'Preferences', 'sgMailbox_PRELOAD', function($q, $timeout, $log, Settings, Resource, Message, Acl, Preferences, PRELOAD) {\n angular.extend(Mailbox, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()),\n $Message: Message,\n $$Acl: Acl,\n $Preferences: Preferences,\n $query: { sort: 'date', asc: 0 },\n selectedFolder: null,\n $refreshTimeout: null,\n $virtualMode: false,\n PRELOAD: PRELOAD\n });\n // Initialize sort parameters from user's settings\n Preferences.ready().then(function() {\n if (Preferences.settings.Mail.SortingState) {\n Mailbox.$query.sort = Preferences.settings.Mail.SortingState[0];\n Mailbox.$query.asc = parseInt(Preferences.settings.Mail.SortingState[1]);\n }\n });\n\n return Mailbox; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of Mailbox in Angular module.\n */\n try {\n angular.module('SOGo.MailerUI');\n }\n catch(e) {\n angular.module('SOGo.MailerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.MailerUI')\n .constant('sgMailbox_PRELOAD', {\n LOOKAHEAD: 50,\n SIZE: 100\n })\n .factory('Mailbox', Mailbox.$factory);\n\n /**\n * @memberof Mailbox\n * @desc Fetch list of mailboxes of a specific account\n * @param {string} accountId - the account\n * @return a promise of the HTTP operation\n * @see {@link Account.$getMailboxes}\n */\n Mailbox.$find = function(account) {\n var path, futureMailboxData;\n\n futureMailboxData = this.$$resource.fetch(account.id.toString(), 'view');\n\n return Mailbox.$unwrapCollection(account, futureMailboxData); // a collection of mailboxes\n };\n\n /**\n * @memberof Mailbox\n * @desc Unwrap to a collection of Mailbox instances.\n * @param {string} account - the account\n * @param {promise} futureMailboxData - a promise of the mailboxes metadata\n * @returns a promise of a collection of Mailbox objects\n */\n Mailbox.$unwrapCollection = function(account, futureMailboxData) {\n var collection = [],\n // Local recursive function\n createMailboxes = function(level, mailbox) {\n for (var i = 0; i < mailbox.children.length; i++) {\n mailbox.children[i].level = level;\n mailbox.children[i] = new Mailbox(account, mailbox.children[i]);\n createMailboxes(level+1, mailbox.children[i]);\n }\n };\n //collection.$futureMailboxData = futureMailboxData;\n\n return futureMailboxData.then(function(data) {\n return Mailbox.$timeout(function() {\n // Each entry is spun up as a Mailbox instance\n angular.forEach(data.mailboxes, function(data, index) {\n data.level = 0;\n var mailbox = new Mailbox(account, data);\n createMailboxes(1, mailbox); // recursively create all sub-mailboxes\n collection.push(mailbox);\n });\n return collection;\n });\n });\n };\n\n /**\n * @memberof Mailbox\n * @desc Build the path of the mailbox (or account only).\n * @param {string} accountId - the account ID\n * @param {string} [mailboxPath] - the mailbox path\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.$absolutePath = function(accountId, mailboxPath) {\n var path = [];\n\n if (mailboxPath) {\n path = _.map(mailboxPath.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n }\n\n path.splice(0, 0, accountId); // insert account ID\n\n return path.join('/');\n };\n\n /**\n * @function init\n * @memberof Mailbox.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of mailbox\n */\n Mailbox.prototype.init = function(data) {\n var _this = this;\n this.$isLoading = true;\n this.$messages = [];\n this.uidsMap = {};\n angular.extend(this, data);\n if (this.path) {\n this.id = this.$id();\n this.$acl = new Mailbox.$$Acl('Mail/' + this.id);\n }\n if (this.type) {\n this.$isEditable = this.isEditable();\n }\n if (angular.isUndefined(this.$shadowData)) {\n // Make a copy of the data for an eventual reset\n this.$shadowData = this.$omit();\n }\n };\n\n /**\n * @function getLength\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the number of items in the mailbox\n */\n Mailbox.prototype.getLength = function() {\n return this.$messages.length;\n };\n\n /**\n * @function getItemAtIndex\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the message as the specified index\n */\n Mailbox.prototype.getItemAtIndex = function(index) {\n var message;\n\n if (index >= 0 && index < this.$messages.length) {\n message = this.$messages[index];\n\n if (this.$loadMessage(message.uid))\n return message;\n }\n\n return null;\n };\n\n /**\n * @function $id\n * @memberof Mailbox.prototype\n * @desc Build the unique ID to identified the mailbox.\n * @returns a string representing the path relative to the mail module\n */\n Mailbox.prototype.$id = function() {\n return Mailbox.$absolutePath(this.$account.id, this.path);\n };\n\n /**\n * @function $selectedCount\n * @memberof Mailbox.prototype\n * @desc Return the number of messages selected by the user.\n * @returns the number of selected messages\n */\n Mailbox.prototype.$selectedCount = function() {\n var count;\n\n count = 0;\n if (this.$messages) {\n count = (_.filter(this.$messages, function(message) { return message.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Mailbox.prototype\n * @desc Fetch the messages metadata of the mailbox\n * @param {object} [sort] - sort preferences. Defaults to descendent by date.\n * @param {string} sort.match - either AND or OR\n * @param {string} sort.sort - either arrival, subject, from, to, date, or size\n * @param {boolean} sort.asc - sort is ascendant if true\n * @param {object[]} [filters] - list of filters for the query\n * @param {string} filters.searchBy - either subject, from, to, cc, or body\n * @param {string} filters.searchInput - the search string to match\n * @param {boolean} filters.negative - negate the condition\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$filter = function(sortingAttributes, filters) {\n var _this = this, options = {};\n\n if (!angular.isDefined(this.unseenCount))\n this.unseenCount = 0;\n\n this.$isLoading = true;\n\n return Mailbox.$Preferences.ready().then(function() {\n\n if (Mailbox.$refreshTimeout)\n Mailbox.$timeout.cancel(Mailbox.$refreshTimeout);\n\n if (sortingAttributes)\n // Sorting preferences are common to all mailboxes\n angular.extend(Mailbox.$query, sortingAttributes);\n\n angular.extend(options, { sortingAttributes: Mailbox.$query });\n if (angular.isDefined(filters)) {\n options.filters = _.reject(filters, function(filter) {\n return angular.isUndefined(filter.searchInput) || filter.searchInput.length === 0;\n });\n _.each(options.filters, function(filter) {\n var secondFilter,\n match = filter.searchBy.match(/(\\w+)_or_(\\w+)/);\n if (match) {\n options.sortingAttributes.match = 'OR';\n filter.searchBy = match[1];\n secondFilter = angular.copy(filter);\n secondFilter.searchBy = match[2];\n options.filters.push(secondFilter);\n }\n });\n }\n\n // Restart the refresh timer, if needed\n if (!Mailbox.$virtualMode) {\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\n var futureMailboxData = Mailbox.$$resource.post(_this.id, 'view', options);\n return _this.$unwrap(futureMailboxData);\n });\n };\n\n /**\n * @function $loadMessage\n * @memberof Mailbox.prototype\n * @desc Check if the message is loaded and in any case, fetch more messages headers from the server.\n * @returns true if the message metadata are already fetched\n */\n Mailbox.prototype.$loadMessage = function(messageId) {\n var startIndex = this.uidsMap[messageId],\n endIndex,\n max = this.$messages.length,\n loaded = false,\n uids,\n futureHeadersData;\n if (angular.isDefined(this.uidsMap[messageId]) && startIndex < this.$messages.length) {\n // Index is valid\n if (angular.isDefined(this.$messages[startIndex].subject)) {// || this.$messages[startIndex].loading) {\n // Message headers are loaded or data is coming\n loaded = true;\n }\n\n // Preload more headers if possible\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.LOOKAHEAD, max - 1);\n if (!angular.isDefined(this.$messages[endIndex].subject) &&\n !angular.isDefined(this.$messages[endIndex].loading)) {\n endIndex = Math.min(startIndex + Mailbox.PRELOAD.SIZE, max);\n for (uids = []; startIndex < endIndex && startIndex < max; startIndex++) {\n if (angular.isDefined(this.$messages[startIndex].subject) || this.$messages[startIndex].loading) {\n // Message at this index is already loaded; increase the end index\n endIndex++;\n }\n else {\n // Message at this index will be loaded\n uids.push(this.$messages[startIndex].uid);\n this.$messages[startIndex].loading = true;\n }\n }\n\n Mailbox.$log.debug('Loading UIDs ' + uids.join(' '));\n futureHeadersData = Mailbox.$$resource.post(this.id, 'headers', {uids: uids});\n this.$unwrapHeaders(futureHeadersData);\n }\n }\n return loaded;\n };\n\n /**\n * @function isEditable\n * @memberof Mailbox.prototype\n * @desc Checks if the mailbox is editable based on its type.\n * @returns true if the mailbox is not a special folder.\n */\n Mailbox.prototype.isEditable = function() {\n return this.type == 'folder';\n };\n\n /**\n * @function $rename\n * @memberof AddressBook.prototype\n * @desc Rename the addressbook and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$rename = function() {\n var _this = this,\n findParent,\n deferred = Mailbox.$q.defer(),\n parent,\n children,\n i;\n\n if (this.name == this.$shadowData.name) {\n // Name hasn't changed\n deferred.resolve();\n return deferred.promise;\n }\n\n // Local recursive function\n findParent = function(parent, children) {\n var parentMailbox = null,\n mailbox = _.find(children, function(o) {\n return o.path == _this.path;\n });\n if (mailbox) {\n parentMailbox = parent;\n }\n else {\n angular.forEach(children, function(o) {\n if (!parentMailbox && o.children && o.children.length > 0) {\n parentMailbox = findParent(o, o.children);\n }\n });\n }\n return parentMailbox;\n };\n\n // Find mailbox parent\n parent = findParent(null, this.$account.$mailboxes);\n if (parent === null)\n children = this.$account.$mailboxes;\n else\n children = parent.children;\n\n // Find index of mailbox among siblings\n i = _.indexOf(_.pluck(children, 'id'), this.id);\n\n this.$save().then(function(data) {\n var sibling;\n angular.extend(_this, data); // update the path attribute\n _this.id = _this.$id();\n\n // Move mailbox among its siblings according to its new name\n children.splice(i, 1);\n sibling = _.find(children, function(o) {\n Mailbox.$log.debug(o.name + ' ? ' + _this.name);\n return (o.type == 'folder' && o.name.localeCompare(_this.name) > 0);\n });\n if (sibling) {\n i = _.indexOf(_.pluck(children, 'id'), sibling.id);\n }\n else {\n i = children.length;\n }\n children.splice(i, 0, _this);\n\n deferred.resolve();\n }, function(data) {\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $compact\n * @memberof Mailbox.prototype\n * @desc Compact the mailbox\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$compact = function() {\n return Mailbox.$$resource.post(this.id, 'expunge');\n };\n\n /**\n * @function $setFolderAs\n * @memberof Mailbox.prototype\n * @desc Set a folder as Drafts/Sent/Trash\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$setFolderAs = function(type) {\n return Mailbox.$$resource.post(this.id, 'setAs' + type + 'Folder');\n };\n\n /**\n * @function $emptyTrash\n * @memberof Mailbox.prototype\n * @desc Empty the Trash folder.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$emptyTrash = function() {\n var _this = this;\n\n return Mailbox.$$resource.post(this.id, 'emptyTrash').then(function() {\n // Remove all messages from the mailbox\n _this.$messages = [];\n _this.uidsMap = {};\n _this.unseenCount = 0;\n\n // If we had any submailboxes, lets do a refresh of the mailboxes list\n if (angular.isDefined(_this.children) && _this.children.length)\n _this.$account.$getMailboxes({reload: true});\n });\n };\n\n /**\n * @function $markAsRead\n * @memberof Mailbox.prototype\n * @desc Mark all messages from folder as read\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$markAsRead = function() {\n return Mailbox.$$resource.post(this.id, 'markRead');\n };\n\n /**\n * @function $flagMessages\n * @memberof Mailbox.prototype\n * @desc Add or remove a flag on a message set\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$flagMessages = function(uids, flags, operation) {\n var data = {msgUIDs: uids,\n flags: flags,\n operation: operation};\n\n return Mailbox.$$resource.post(this.id, 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $delete\n * @memberof Mailbox.prototype\n * @desc Delete the mailbox from the server\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$delete = function() {\n var _this = this,\n deferred = Mailbox.$q.defer(),\n promise;\n\n promise = Mailbox.$$resource.remove(this.id);\n\n promise.then(function() {\n _this.$account.$getMailboxes({reload: true});\n deferred.resolve(true);\n }, function(data, status) {\n deferred.reject(data);\n });\n return deferred.promise;\n };\n\n /**\n * @function $deleteMessages\n * @memberof Mailbox.prototype\n * @desc Delete multiple messages from mailbox.\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$deleteMessages = function(uids) {\n return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});\n };\n\n /**\n * @function $copyMessages\n * @memberof Mailbox.prototype\n * @desc Copy multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$copyMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'copyMessages', {uids: uids, folder: folder});\n };\n\n /**\n * @function $moveMessages\n * @memberof Mailbox.prototype\n * @desc Move multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n Mailbox.prototype.$moveMessages = function(uids, folder) {\n return Mailbox.$$resource.post(this.id, 'moveMessages', {uids: uids, folder: folder});\n };\n \n /**\n * @function $reset\n * @memberof Mailbox.prototype\n * @desc Reset the original state the mailbox's data.\n */\n Mailbox.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key != 'children' && key[0] != '$') {\n delete _this[key];\n }\n });\n angular.extend(this, this.$shadowData);\n this.$shadowData = this.$omit();\n };\n\n /**\n * @function $save\n * @memberof Mailbox.prototype\n * @desc Save the mailbox to the server. This currently can only affect the name of the mailbox.\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$save = function() {\n var _this = this;\n\n return Mailbox.$$resource.save(this.id, this.$omit()).then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n Mailbox.$log.debug(JSON.stringify(data, undefined, 2));\n return data;\n }, function(data) {\n Mailbox.$log.error(JSON.stringify(data, undefined, 2));\n // Restore previous version\n _this.$reset();\n });\n };\n\n /**\n * @function $newMailbox\n * @memberof Mailbox.prototype\n * @desc Create a new mailbox on the server and refresh the list of mailboxes.\n * @returns a promise of the HTTP operations\n */\n Mailbox.prototype.$newMailbox = function(path, name) {\n return this.$account.$newMailbox(path, name);\n };\n\n /**\n * @function $omit\n * @memberof Mailbox.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Mailbox instance\n */\n Mailbox.prototype.$omit = function() {\n var mailbox = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key != 'children' &&\n key[0] != '$') {\n mailbox[key] = value;\n }\n });\n return mailbox;\n };\n\n /**\n * @function $unwrap\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and instanciate new Message objects using received data.\n * @param {promise} futureMailboxData - a promise of the Mailbox's metadata\n * @returns a promise of the HTTP operation\n */\n Mailbox.prototype.$unwrap = function(futureMailboxData) {\n var _this = this,\n deferred = Mailbox.$q.defer();\n\n this.$futureMailboxData = futureMailboxData;\n this.$futureMailboxData.then(function(data) {\n Mailbox.$timeout(function() {\n var uids, headers;\n\n _this.init(data);\n\n if (_this.uids) {\n Mailbox.$log.debug('unwrapping ' + data.uids.length + ' messages');\n\n // First entry of 'headers' are keys\n headers = _.invoke(_this.headers[0], 'toLowerCase');\n _this.headers.splice(0, 1);\n\n // First entry of 'uids' are keys when threaded view is enabled\n if (_this.threaded) {\n uids = _this.uids[0];\n _this.uids.splice(0, 1);\n }\n\n // Instanciate Message objects\n _.reduce(_this.uids, function(msgs, msg, i) {\n var data;\n if (_this.threaded)\n data = _.object(uids, msg);\n else\n data = {uid: msg.toString()};\n\n // Build map of UID <=> index\n _this.uidsMap[data.uid] = i;\n\n msgs.push(new Mailbox.$Message(_this.$account.id, _this, data, true));\n\n return msgs;\n }, _this.$messages);\n\n // Extend Message objects with received headers\n _.each(_this.headers, function(data) {\n var msg = _.object(headers, data),\n i = _this.uidsMap[msg.uid.toString()];\n _.extend(_this.$messages[i], msg);\n });\n }\n Mailbox.$log.debug('mailbox ' + _this.id + ' ready');\n _this.$isLoading = false;\n deferred.resolve(_this.$messages);\n });\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n deferred.reject();\n });\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapHeaders\n * @memberof Mailbox.prototype\n * @desc Unwrap a promise and extend matching Message objects using received data.\n * @param {promise} futureHeadersData - a promise of some messages metadata\n */\n Mailbox.prototype.$unwrapHeaders = function(futureHeadersData) {\n var _this = this;\n\n futureHeadersData.then(function(data) {\n Mailbox.$timeout(function() {\n var headers, j;\n if (data.length > 0) {\n // First entry of 'headers' are keys\n headers = _.invoke(data[0], 'toLowerCase');\n data.splice(0, 1);\n _.each(data, function(messageHeaders) {\n messageHeaders = _.object(headers, messageHeaders);\n j = _this.uidsMap[messageHeaders.uid.toString()];\n if (angular.isDefined(j)) {\n _.extend(_this.$messages[j], messageHeaders);\n }\n });\n }\n });\n });\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Message\n * @constructor\n * @param {string} accountId - the account ID\n * @param {string} mailboxPath - an array of the mailbox path components\n * @param {object} futureAddressBookData - either an object literal or a promise\n * @param {bool} lazy - do \"lazy loading\" so we are very quick at initializing message instances\n */\n function Message(accountId, mailbox, futureMessageData, lazy) {\n this.accountId = accountId;\n this.$mailbox = mailbox;\n this.$hasUnsafeContent = false;\n this.$loadUnsafeContent = false;\n this.$showDetailedRecipients = false;\n this.editable = {to: [], cc: [], bcc: []};\n this.selected = false;\n\n // Data is immediately available\n if (typeof futureMessageData.then !== 'function') {\n //console.debug(JSON.stringify(futureMessageData, undefined, 2));\n if (angular.isDefined(lazy) && lazy) {\n this.uid = futureMessageData.uid;\n }\n else {\n angular.extend(this, futureMessageData);\n this.$formatFullAddresses();\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureMessageData);\n }\n }\n\n /**\n * @memberof Message\n * @desc The factory we'll use to register with Angular\n * @returns the Message constructor\n */\n Message.$factory = ['$q', '$timeout', '$log', '$sce', 'sgSettings', 'Gravatar', 'Resource', 'Preferences', function($q, $timeout, $log, $sce, Settings, Gravatar, Resource, Preferences) {\n angular.extend(Message, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $sce: $sce,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser())\n });\n // Initialize tags form user's defaults\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailLabelsColors) {\n Message.$tags = Preferences.defaults.SOGoMailLabelsColors;\n }\n if (Preferences.defaults.SOGoMailDisplayRemoteInlineImages &&\n Preferences.defaults.SOGoMailDisplayRemoteInlineImages == 'always') {\n Message.$displayRemoteInlineImages = true;\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 results = [];\n\n _.forEach(_.keys(Message.$tags), function(tag) {\n var pair = Message.$tags[tag];\n if (pair[0].search(re) != -1) {\n results.push({ name: tag, description: pair[0], color: pair[1] });\n }\n });\n return results;\n };\n\n /**\n * @function $absolutePath\n * @memberof Message.prototype\n * @desc Build the path of the message\n * @returns a string representing the path relative to the mail module\n */\n Message.prototype.$absolutePath = function(options) {\n if (angular.isUndefined(this.id) || options) {\n var path;\n path = _.map(this.$mailbox.path.split('/'), function(component) {\n return 'folder' + component.asCSSIdentifier();\n });\n path.splice(0, 0, this.accountId); // insert account ID\n if (options && options.asDraft && this.draftId) {\n path.push(this.draftId); // add draft ID\n }\n else {\n path.push(this.uid); // add message UID\n }\n\n this.id = path.join('/');\n }\n\n return this.id;\n };\n\n /**\n * @function $setUID\n * @memberof Message.prototype\n * @desc Change the UID of the message. This happens when saving a draft.\n * @param {number} uid - the new message UID\n */\n Message.prototype.$setUID = function(uid) {\n var oldUID = this.uid || -1;\n\n if (oldUID != uid) {\n this.uid = uid;\n if (oldUID > -1 && this.$mailbox.uidsMap[oldUID]) {\n this.$mailbox.uidsMap[uid] = this.$mailbox.uidsMap[oldUID];\n this.$mailbox.uidsMap[oldUID] = null;\n }\n }\n };\n\n /**\n * @function $formatFullAddresses\n * @memberof Message.prototype\n * @desc Format all sender and recipients addresses with a complete description (name ).\n * This function also generates a gravatar for each email address, and a short name\n */\n Message.prototype.$formatFullAddresses = function() {\n var _this = this;\n var identities = _.pluck(_this.$mailbox.$account.identities, 'email');\n\n // Build long representation of email addresses\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n _.each(_this[type], function(data, i) {\n if (data.name && data.name != data.email) {\n data.full = data.name + ' <' + data.email + '>';\n\n // If we have \"Alice Foo\" as name, we grab \"Alice\"\n if (data.name.split(' ').length)\n data.shortname = data.name.split(' ')[0].replace('\\'','');\n }\n else {\n data.full = '<' + data.email + '>';\n data.shortname = data.email.split('@')[0];\n }\n\n // Generate the gravatar\n data.image = Message.$gravatar(data.email, 32);\n\n // If the current user is the recepient, overwrite\n // the short name with 'me'\n if (_.indexOf(identities, data.email) >= 0)\n data.shortname = l('me');\n });\n });\n };\n\n /**\n * @function $shortRecipients\n * @memberof Message.prototype\n * @desc Format all recipients into a very compact string\n * @returns a compacted string of all recipients\n */\n Message.prototype.$shortRecipients = function() {\n var _this = this;\n var result = [];\n\n // Build long representation of email addresses\n _.each(['to', 'cc', 'bcc'], function(type) {\n _.each(_this[type], function(data, i) {\n result.push(data.shortname);\n });\n });\n\n return result.join(', ');\n };\n\n /**\n * @function $shortAddress\n * @memberof Message.prototype\n * @desc Format the first address of a specific type with a short description.\n * @returns a string of the name or the email of the envelope address type\n */\n Message.prototype.$shortAddress = function(type) {\n var address = '';\n if (this[type] && this[type].length > 0) {\n address = this[type][0].name || this[type][0].email || '';\n }\n\n return address;\n };\n\n /**\n * @function loadUnsafeContent\n * @memberof Message.prototype\n * @desc Mark the message to load unsafe resources when calling $content().\n */\n Message.prototype.loadUnsafeContent = function() {\n this.$loadUnsafeContent = true;\n };\n\n /**\n * @function showDetailedRecipients\n * @memberof Message.prototype\n * @desc Mark the message to show all to/cc recipients.\n */\n Message.prototype.showDetailedRecipients = function() {\n this.$showDetailedRecipients = true;\n };\n\n /**\n * @function $content\n * @memberof Message.prototype\n * @desc Get the message body as accepted by SCE (Angular Strict Contextual Escaping).\n * @returns the HTML representation of the body\n */\n Message.prototype.$content = function() {\n var _this = this,\n parts = [],\n _visit = function(part) {\n part.msgclass = 'msg-attachment-other';\n if (part.type == 'UIxMailPartAlternativeViewer') {\n _visit(_.find(part.content, function(alternatePart) {\n return part.preferredPart == alternatePart.contentType;\n }));\n }\n // Can be used for UIxMailPartMixedViewer and UIxMailPartMessageViewer\n else if (angular.isArray(part.content)) {\n _.each(part.content, function(mixedPart) {\n _visit(mixedPart);\n });\n }\n else {\n if (angular.isUndefined(part.safeContent)) {\n // Keep a copy of the original content\n part.safeContent = part.content;\n _this.$hasUnsafeContent |= (part.safeContent.indexOf(' unsafe-') > -1);\n }\n if (part.type == 'UIxMailPartHTMLViewer') {\n part.html = true;\n if (_this.$loadUnsafeContent || Message.$displayRemoteInlineImages) {\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 _this.$hasUnsafeContent = false;\n }\n part.content = Message.$sce.trustAs('html', part.unsafeContent.innerHTML);\n }\n else {\n part.content = Message.$sce.trustAs('html', part.safeContent);\n }\n parts.push(part);\n }\n else if (part.type == 'UIxMailPartICalViewer' ||\n part.type == 'UIxMailPartImageViewer' ||\n part.type == 'UIxMailPartLinkViewer') {\n\n // UIxMailPartICalViewer injects 'participants'\n if (part.participants) {\n _.each(part.participants, function(participant) {\n participant.image = Message.$gravatar(participant.email, 32);\n });\n }\n\n if (part.type == 'UIxMailPartImageViewer')\n part.msgclass = 'msg-attachment-image';\n\n // Trusted content that can be compiled (Angularly-speaking)\n part.compile = true;\n parts.push(part);\n }\n else {\n part.html = true;\n part.content = Message.$sce.trustAs('html', part.safeContent);\n parts.push(part);\n }\n }\n };\n _visit(this.parts);\n\n return parts;\n };\n\n /**\n * @function $editableContent\n * @memberof Message.prototype\n * @desc First, fetch the draft ID that corresponds to the temporary draft object on the SOGo server.\n * Secondly, fetch the editable message body along with other metadata such as the recipients.\n * @returns the HTML representation of the body\n */\n Message.prototype.$editableContent = function() {\n var _this = this;\n\n return Message.$$resource.fetch(this.$absolutePath(), 'edit').then(function(data) {\n angular.extend(_this, data);\n return Message.$$resource.fetch(_this.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('editable = ' + JSON.stringify(data, undefined, 2));\n angular.extend(_this.editable, data);\n return data.text;\n });\n });\n };\n\n /**\n * @function addTag\n * @memberof Message.prototype\n * @desc Add a mail tag on the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.addTag = function(tag) {\n return this.$addOrRemoveTag('add', tag);\n };\n\n /**\n * @function removeTag\n * @memberof Message.prototype\n * @desc Remove a mail tag from the current message.\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.removeTag = function(tag) {\n return this.$addOrRemoveTag('remove', tag);\n };\n\n /**\n * @function $addOrRemoveTag\n * @memberof Message.prototype\n * @desc Add or remove a mail tag on the current message.\n * @param {string} operation - the operation name to perform\n * @param {string} tag - the tag name\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$addOrRemoveTag = function(operation, tag) {\n var data = {\n operation: operation,\n msgUIDs: [this.uid],\n flags: tag\n };\n\n if (tag)\n return Message.$$resource.post(this.$mailbox.$id(), 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $imipAction\n * @memberof Message.prototype\n * @desc Perform IMIP actions on the current message.\n * @param {string} path - the path of the IMIP calendar part \n * @param {string} action - the the IMIP action to perform\n * @param {object} data - the delegation info \n */\n Message.prototype.$imipAction = function(path, action, data) {\n var _this = this;\n Message.$$resource.post([this.$absolutePath(), path].join('/'), action, data).then(function(data) {\n Message.$timeout(function() {\n _this.$reload();\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $sendMDN\n * @memberof Message.prototype\n * @desc Send MDN response for current email message\n */\n Message.prototype.$sendMDN = function() {\n this.shouldAskReceipt = 0;\n return Message.$$resource.post(this.$absolutePath(), 'sendMDN');\n };\n\n /**\n * @function $deleteAttachment\n * @memberof Message.prototype\n * @desc Delete an attachment from a message being composed\n * @param {string} filename - the filename of the attachment to delete\n */\n Message.prototype.$deleteAttachment = function(filename) {\n var action = 'deleteAttachment?filename=' + filename;\n var _this = this;\n Message.$$resource.post(this.$absolutePath({asDraft: true}), action).then(function(data) {\n Message.$timeout(function() {\n _this.editable.attachmentAttrs = _.filter(_this.editable.attachmentAttrs, function(attachment) {\n return attachment.filename != filename;\n });\n }, function() {\n // TODO: show toast\n });\n });\n };\n\n /**\n * @function $markAsFlaggedOrUnflagged\n * @memberof Message.prototype\n * @desc Add or remove a the \\\\Flagged flag on the current message.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.toggleFlag = function() {\n var _this = this,\n action = 'markMessageFlagged';\n\n if (this.isflagged)\n action = 'markMessageUnflagged';\n\n return Message.$$resource.post(this.$absolutePath(), action).then(function(data) {\n Message.$timeout(function() {\n _this.isflagged = !_this.isflagged;\n });\n });\n };\n\n /**\n * @function $reload\n * @memberof Message.prototype\n * @desc Fetch the viewable message body along with other metadata such as the list of attachments.\n * @returns a promise of the HTTP operation\n */\n Message.prototype.$reload = function(options) {\n var futureMessageData;\n\n futureMessageData = Message.$$resource.fetch(this.$absolutePath(options), 'view');\n\n return this.$unwrap(futureMessageData);\n };\n\n /**\n * @function $reply\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$reply = function() {\n return this.$newDraft('reply');\n };\n\n /**\n * @function $replyAll\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply to the sender and all recipients.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$replyAll = function() {\n return this.$newDraft('replyall');\n };\n\n /**\n * @function $forward\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a forward.\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$forward = function() {\n return this.$newDraft('forward');\n };\n\n /**\n * @function $newDraft\n * @memberof Message.prototype\n * @desc Prepare a new Message object as a reply or a forward of the current message and associated\n * to the draft mailbox.\n * @see {@link Account.$newMessage}\n * @see {@link Message.$editableContent}\n * @see {@link Message.$reply}\n * @see {@link Message.$replyAll}\n * @see {@link Message.$forwad}\n * @param {string} action - the HTTP action to perform on the message\n * @returns a promise of the HTTP operations\n */\n Message.prototype.$newDraft = function(action) {\n var _this = this;\n\n // Query server for draft folder and draft UID\n return Message.$$resource.fetch(this.$absolutePath(), action).then(function(data) {\n var mailbox, message;\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2));\n mailbox = _this.$mailbox.$account.$getMailboxByPath(data.mailboxPath);\n message = new Message(data.accountId, mailbox, data);\n // Fetch draft initial data\n return Message.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {\n Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2) + ' original UID: ' + _this.uid);\n angular.extend(message.editable, data);\n\n // We keep a reference to our original message in order to update the flags\n message.origin = {message: _this, action: action};\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({asDraft: false}); // 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 _this = this,\n 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 if (angular.isDefined(_this.origin)) {\n if (_this.origin.action.startsWith('reply'))\n _this.origin.message.isanswered = true;\n else if (_this.origin.action == 'forward')\n _this.origin.message.isforwarded = true;\n }\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\n // Resolve and expose the promise\n this.$futureMessageData = futureMessageData.then(function(data) {\n // Calling $timeout will force Angular to refresh the view\n if (_this.isread === 0) {\n Message.$$resource.fetch(_this.$absolutePath(), 'markMessageRead').then(function() {\n Message.$timeout(function() {\n _this.isread = true;\n _this.$mailbox.unseenCount--;\n });\n });\n }\n return Message.$timeout(function() {\n angular.extend(_this, data);\n _this.$formatFullAddresses();\n _this.$loadUnsafeContent = false;\n return _this;\n });\n });\n\n return this.$futureMessageData;\n };\n\n /**\n * @function $omit\n * @memberof Message.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Message instance\n */\n Message.prototype.$omit = function() {\n var message = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n message[key] = value;\n }\n });\n\n // Format addresses as arrays\n _.each(['from', 'to', 'cc', 'bcc', 'reply-to'], function(type) {\n if (message[type])\n message[type] = _.invoke(message[type].split(','), 'trim');\n });\n\n //Message.$log.debug(JSON.stringify(message, undefined, 2));\n return message;\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name VirtualMailbox\n * @constructor\n * @param {object} account - the mail account associated with the virtual search\n */\n function VirtualMailbox(account) {\n this.$account = account;\n }\n\n /**\n * @memberof VirtualMailbox\n * @desc The factory we'll use to register with Angular\n * @returns the VirtualMailbox constructor\n */\n VirtualMailbox.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Message', 'Mailbox', 'sgMailbox_PRELOAD', function($q, $timeout, $log, Settings, Mailbox, Message, PRELOAD) {\n angular.extend(VirtualMailbox, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Message: Message,\n selectedFolder: null,\n PRELOAD: PRELOAD\n });\n\n return VirtualMailbox; // return constructor\n }];\n\n /**\n * @module SOGo.MailerUI\n * @desc Factory registration of VirtualMailbox 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('VirtualMailbox', VirtualMailbox.$factory);\n\n /**\n * @memberof VirtualMailbox\n * @desc Build the path of the virtual mailbox (or account only).\n * @param {string} accountId - the account ID\n * @returns a string representing the path relative to the mail module\n */\n VirtualMailbox.$absolutePath = function(accountId) {\n return [accountId, \"virtual\"].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 VirtualMailbox.prototype.init = function(data) {\n this.$isLoading = false;\n this.$mailboxes = [];\n this.uidsMap = {};\n angular.extend(this, data);\n this.id = this.$id();\n };\n\n VirtualMailbox.prototype.setMailboxes = function(data) {\n this.$mailboxes = data;\n\n _.each(this.$mailboxes, function(mailbox) {\n mailbox.$messages = [];\n mailbox.uidsMap = {};\n });\n };\n\n VirtualMailbox.prototype.startSearch = function(match, params) {\n var _this = this,\n search = VirtualMailbox.$q.when();\n\n this.$isLoading = true;\n\n _.each(this.$mailboxes, function(mailbox) {\n search = search.then(function() {\n if (_this.$isLoading) {\n VirtualMailbox.$log.debug(\"searching mailbox \" + mailbox.path);\n return mailbox.$filter( {sort: \"date\", asc: false, match: match}, params);\n }\n });\n });\n\n search.finally(function() { _this.$isLoading = false; });\n };\n\n VirtualMailbox.prototype.stopSearch = function() {\n VirtualMailbox.$log.debug(\"stopping search...\");\n this.$isLoading = false;\n };\n\n /**\n * @function getLength\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the number of items in the mailbox\n */\n VirtualMailbox.prototype.getLength = function() {\n var len = 0;\n\n if (!angular.isDefined(this.$mailboxes))\n return len;\n\n _.each(this.$mailboxes, function(mailbox) {\n len += mailbox.$messages.length;\n });\n\n return len;\n };\n\n /**\n * @function getItemAtIndex\n * @memberof Mailbox.prototype\n * @desc Used by md-virtual-repeat / md-on-demand\n * @returns the message as the specified index\n */\n VirtualMailbox.prototype.getItemAtIndex = function(index) {\n var i, j, k, mailbox, message;\n\n if (angular.isDefined(this.$mailboxes) && index >= 0) {\n i = 0;\n for (j = 0; j < this.$mailboxes.length; j++) {\n mailbox = this.$mailboxes[j];\n for (k = 0; k < mailbox.$messages.length; i++, k++) {\n message = mailbox.$messages[k];\n if (i == index) {\n if (mailbox.$loadMessage(message.uid))\n return message;\n }\n }\n }\n }\n\n return null;\n };\n\n /**\n * @function $id\n * @memberof VirtualMailbox.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 VirtualMailbox.prototype.$id = function() {\n return VirtualMailbox.$absolutePath(this.$account.id);\n };\n\n /**\n * @function $selectedCount\n * @memberof VirtualMailbox.prototype\n * @desc Return the number of messages selected by the user.\n * @returns the number of selected messages\n */\n VirtualMailbox.prototype.$selectedCount = function() {\n // TODO\n return 0;\n };\n\n /**\n * @function $flagMessages\n * @memberof VirtualMailbox.prototype\n * @desc Add or remove a flag on a message set\n * @returns a promise of the HTTP operation\n */\n VirtualMailbox.prototype.$flagMessages = function(uids, flags, operation) {\n // TODO\n // var data = {msgUIDs: uids,\n // flags: flags,\n // operation: operation};\n\n // return VirtualMailbox.$$resource.post(this.id, 'addOrRemoveLabel', data);\n };\n\n /**\n * @function $deleteMessages\n * @memberof VirtualMailbox.prototype\n * @desc Delete multiple messages from mailbox.\n * @return a promise of the HTTP operation\n */\n VirtualMailbox.prototype.$deleteMessages = function(uids) {\n // TODO\n //return VirtualMailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});\n };\n\n /**\n * @function $copyMessages\n * @memberof VirtualMailbox.prototype\n * @desc Copy multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n VirtualMailbox.prototype.$copyMessages = function(uids, folder) {\n // TODO\n //return VirtualMailbox.$$resource.post(this.id, 'copyMessages', {uids: uids, folder: folder});\n };\n\n /**\n * @function $moveMessages\n * @memberof VirtualMailbox.prototype\n * @desc Move multiple messages from the current mailbox to a target one\n * @return a promise of the HTTP operation\n */\n VirtualMailbox.prototype.$moveMessages = function(uids, folder) {\n // TODO\n //return VirtualMailbox.$$resource.post(this.id, 'moveMessages', {uids: uids, folder: folder});\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxController.$inject = ['$state', '$timeout', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'sgFocus', 'Dialog', 'Account', 'Mailbox'];\n function MailboxController($state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, focus, Dialog, Account, Mailbox) {\n var vm = this, messageDialog = null;\n\n Mailbox.selectedFolder = stateMailbox;\n\n vm.service = Mailbox;\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.selectedFolder = stateMailbox;\n vm.selectMessage = selectMessage;\n vm.toggleMessageSelection = toggleMessageSelection;\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 if (Mailbox.$virtualMode)\n $state.go('mail.account.virtualMailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(message.$mailbox.path), messageId: message.uid});\n else\n $state.go('mail.account.mailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(message.$mailbox.path), messageId: message.uid});\n }\n\n function toggleMessageSelection($event, message) {\n message.selected = !message.selected;\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n function unselectMessages() {\n _.each(vm.selectedFolder.$messages, function(message) { message.selected = false; });\n }\n\n function confirmDeleteSelectedMessages() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected messages?'))\n .then(function() {\n // User confirmed the deletion\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$deleteMessages(selectedUIDs).then(function() {\n // Decrement the unseenCount accordingly\n var unseenCount = _.filter(selectedMessages, function(message) { return !message.isread; });\n vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n vm.selectedFolder.unseenCount =- unseenCount;\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n });\n }\n\n function copySelectedMessages(folder) {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder).then(function() {\n // TODO: refresh target mailbox?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n // function moveSelectedMessages(folder) {\n // var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected });\n // var selectedUIDs = _.pluck(selectedMessages, 'uid');\n // vm.selectedFolder.$moveMessages(selectedUIDs, '/' + folder).then(function() {\n // // TODO: refresh target mailbox?\n // vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);\n // });\n // }\n\n function saveSelectedMessages() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/saveMessages?uid=' + selectedUIDs.join(\",\");\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.$messages, function(message) {\n message.selected = true;\n });\n }\n\n function markSelectedMessagesAsFlagged() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, '\\\\Flagged', 'add').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isflagged = true;\n });\n });\n }\n\n function markSelectedMessagesAsUnread() {\n var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });\n var selectedUIDs = _.pluck(selectedMessages, 'uid');\n\n vm.selectedFolder.$flagMessages(selectedUIDs, 'seen', 'remove').then(function(d) {\n // Success\n _.forEach(selectedMessages, function(message) {\n message.isread = false;\n vm.selectedFolder.unseenCount++;\n });\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter({ sort: field });\n }\n\n function sortedBy(field) {\n return Mailbox.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter();\n }\n\n function newMessage($event) {\n var message;\n\n if (messageDialog === null) {\n message = vm.account.$newMessage();\n messageDialog = $mdDialog\n .show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message,\n stateRecipients: []\n }\n })\n .finally(function() {\n messageDialog = null;\n });\n }\n }\n }\n\n angular\n .module('SOGo.MailerUI')\n .controller('MailboxController', MailboxController);\n})();\n\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MailboxesController.$inject = ['$state', '$timeout', '$mdDialog', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'Account', 'Mailbox', 'VirtualMailbox', 'User', 'Preferences', 'stateAccounts'];\n function MailboxesController($state, $timeout, $mdDialog, focus, encodeUriFilter, Dialog, Settings, Account, Mailbox, VirtualMailbox, 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 // Advanced search options\n vm.showingAdvancedSearch = false;\n vm.currentSearchParam = '';\n vm.addSearchParam = addSearchParam;\n vm.newSearchParam = newSearchParam;\n vm.showAdvancedSearch = showAdvancedSearch;\n vm.hideAdvancedSearch = hideAdvancedSearch;\n vm.toggleAdvancedSearch = toggleAdvancedSearch;\n vm.search = {\n options: {'': l('Select a criteria'),\n subject: l('Enter Subject'),\n from: l('Enter From'),\n to: l('Enter To'),\n cc: l('Enter Cc'),\n body: l('Enter Body')\n },\n mailbox: 'INBOX',\n subfolders: 1,\n match: 'AND',\n params: []\n };\n\n function showAdvancedSearch(path) {\n vm.showingAdvancedSearch = true;\n vm.search.mailbox = path;\n }\n\n function hideAdvancedSearch() {\n vm.showingAdvancedSearch = false;\n vm.service.$virtualMode = false;\n\n account = vm.accounts[0];\n mailbox = vm.searchPreviousMailbox;\n $state.go('mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(mailbox.path) });\n }\n\n function toggleAdvancedSearch() {\n if (Mailbox.selectedFolder.$isLoading) {\n vm.virtualMailbox.stopSearch();\n }\n else {\n var root, mailboxes = [],\n _visit = function(folders) {\n _.each(folders, function(o) {\n mailboxes.push(o);\n if (o.children && o.children.length > 0) {\n _visit(o.children);\n }\n });\n };\n\n vm.virtualMailbox = new VirtualMailbox(vm.accounts[0]);\n\n // Don't set the previous selected mailbox if we're in virtual mode\n // That allows users to do multiple advanced search but return\n // correctly to the previously selected mailbox once done.\n if (!Mailbox.$virtualMode)\n vm.searchPreviousMailbox = Mailbox.selectedFolder;\n\n Mailbox.selectedFolder = vm.virtualMailbox;\n Mailbox.$virtualMode = true;\n\n if (angular.isDefined(vm.search.mailbox)) {\n root = vm.accounts[0].$getMailboxByPath(vm.search.mailbox);\n mailboxes.push(root);\n if (vm.search.subfolders && root.children.length)\n _visit(root.children);\n }\n else {\n mailboxes = vm.accounts[0].$flattenMailboxes();\n }\n\n vm.virtualMailbox.setMailboxes(mailboxes);\n vm.virtualMailbox.startSearch(vm.search.match, vm.search.params);\n $state.go('mail.account.virtualMailbox', { accountId: vm.accounts[0].id });\n }\n }\n\n function addSearchParam(v) {\n vm.currentSearchParam = v;\n focus('advancedSearch');\n }\n\n function newSearchParam(v) {\n if (v.length && vm.currentSearchParam.length) {\n var n = 0;\n if (v.startsWith(\"!\")) {\n n = 1;\n v = v.substring(1).trim();\n }\n vm.search.params.push({searchBy:vm.currentSearchParam, searchInput: v, negative: n});\n vm.currentSearchParam = '';\n }\n }\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 vm.showingAdvancedSearch = false;\n vm.service.$virtualMode = 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 = ['$window', '$scope', '$state', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'stateMessage', 'encodeUriFilter', 'sgSettings', 'sgFocus', 'Dialog', 'Account', 'Mailbox', 'Message'];\n function MessageController($window, $scope, $state, $mdDialog, stateAccounts, stateAccount, stateMailbox, stateMessage, encodeUriFilter, sgSettings, focus, Dialog, Account, Mailbox, Message) {\n var vm = this, messageDialog = null, popupWindow = null;\n\n vm.accounts = stateAccounts;\n vm.account = stateAccount;\n vm.mailbox = stateMailbox;\n vm.message = stateMessage;\n vm.service = Message;\n vm.tags = { searchText: '', selected: '' };\n vm.doDelete = doDelete;\n vm.close = close;\n vm.reply = reply;\n vm.replyAll = replyAll;\n vm.forward = forward;\n vm.edit = edit;\n vm.openPopup = openPopup;\n vm.closePopup = closePopup;\n vm.newMessage = newMessage;\n vm.saveMessage = saveMessage;\n vm.viewRawSource = viewRawSource;\n\n // Watch the message model \"flags\" attribute to remove on-the-fly a tag from the IMAP message\n // when removed from the message viewer.\n // TODO: this approach should be reviewed once md-chips supports ng-change.\n $scope.$watchCollection('viewer.message.flags', function(oldTags, newTags) {\n _.each(_.difference(newTags, oldTags), function(tag) {\n vm.message.removeTag(tag);\n });\n });\n\n function doDelete() {\n stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {\n // Remove message from list of messages\n var index = _.findIndex(stateMailbox.$messages, function(o) {\n return o.uid == stateMessage.uid;\n });\n if (index != -1)\n stateMailbox.$messages.splice(index, 1);\n // Remove message object from scope\n vm.message = null;\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) });\n });\n }\n\n function showMailEditor($event, message, recipients) {\n if (messageDialog === null) {\n if (!angular.isDefined(recipients))\n recipients = [];\n\n messageDialog = $mdDialog\n .show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: 'UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: vm.accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n })\n .finally(function() {\n messageDialog = null;\n });\n }\n }\n\n function close() {\n $state.go('mail.account.mailbox', { accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path) }).then(function() {\n vm.message = null;\n delete stateMailbox.selectedMessage;\n });\n }\n\n function reply($event) {\n var message = vm.message.$reply();\n showMailEditor($event, message);\n }\n\n function replyAll($event) {\n var message = vm.message.$replyAll();\n showMailEditor($event, message);\n }\n\n function forward($event) {\n var message = vm.message.$forward();\n showMailEditor($event, message);\n }\n\n function edit($event) {\n vm.message.$editableContent().then(function() {\n showMailEditor($event, vm.message);\n });\n }\n\n function openPopup() {\n var url = [sgSettings.baseURL(),\n 'UIxMailPopupView#/Mail',\n vm.message.accountId,\n // The double-encoding is necessary\n encodeUriFilter(encodeUriFilter(vm.message.$mailbox.path)),\n vm.message.uid]\n .join('/'),\n wId = vm.message.$absolutePath();\n popupWindow = $window.open(url, wId,\n [\"width=680\",\n \"height=520\",\n \"resizable=1\",\n \"scrollbars=1\",\n \"toolbar=0\",\n \"location=0\",\n \"directories=0\",\n \"status=0\",\n \"menubar=0\",\n \"copyhistory=0\"]\n .join(','));\n }\n\n function closePopup() {\n $window.close();\n }\n\n function newMessage($event, recipient) {\n var message = vm.account.$newMessage();\n showMailEditor($event, message, [recipient]);\n }\n\n function saveMessage() {\n window.location.href = ApplicationBaseURL + '/' + vm.mailbox.id + '/saveMessages?uid=' + vm.message.uid;\n }\n\n function viewRawSource($event) {\n Message.$$resource.post(vm.message.id, \"viewsource\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n ' ',\n '
',\n            data,\n            '    
',\n '
',\n '
',\n ' ' + l('Close') + '',\n '
',\n '
'\n ].join(''),\n controller: MessageRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n MessageRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function MessageRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n \n angular\n .module('SOGo.MailerUI') \n .controller('MessageController', MessageController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n MessageEditorController.$inject = ['$stateParams', '$mdDialog', 'FileUploader', 'stateAccounts', 'stateMessage', 'stateRecipients', '$timeout', 'sgFocus', 'Dialog', 'AddressBook', 'Preferences'];\n function MessageEditorController($stateParams, $mdDialog, FileUploader, stateAccounts, stateMessage, stateRecipients, $timeout, focus, Dialog, AddressBook, Preferences) {\n var vm = this;\n\n vm.addRecipient = addRecipient;\n vm.autocomplete = {to: {}, cc: {}, bcc: {}};\n vm.autosave = null;\n vm.autosaveDrafts = autosaveDrafts;\n vm.hideCc = true;\n vm.hideBcc = true;\n vm.cancel = cancel;\n vm.send = send;\n vm.contactFilter = contactFilter;\n vm.identities = _.pluck(_.flatten(_.pluck(stateAccounts, 'identities')), 'full');\n vm.uploader = new FileUploader({\n url: stateMessage.$absolutePath({asDraft: true}) + '/save',\n autoUpload: true,\n alias: 'attachments',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n stateMessage.$setUID(response.uid);\n stateMessage.$reload();\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n\n // We remove the attachment\n stateMessage.$deleteAttachment(item.file.name);\n this.removeFromQueue(item);\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n if ($stateParams.actionName == 'reply') {\n stateMessage.$reply().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'replyall') {\n stateMessage.$replyAll().then(function(msgObject) {\n vm.message = msgObject;\n vm.hideCc = (!msgObject.editable.cc || msgObject.editable.cc.length === 0);\n vm.hideBcc = (!msgObject.editable.bcc || msgObject.editable.bcc.length === 0);\n });\n }\n else if ($stateParams.actionName == 'forward') {\n stateMessage.$forward().then(function(msgObject) {\n vm.message = msgObject;\n });\n }\n else if (angular.isDefined(stateMessage)) {\n vm.message = stateMessage;\n }\n\n if (angular.isDefined(stateRecipients)) {\n vm.message.editable.to = _.union(vm.message.editable.to, _.pluck(stateRecipients, 'full'));\n }\n\n function cancel() {\n // TODO: delete draft?\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n $mdDialog.cancel();\n }\n\n function send() {\n if (vm.autosave)\n $timeout.cancel(vm.autosave);\n\n vm.message.$send().then(function(data) {\n $mdDialog.hide();\n }, function(data) {\n Dialog.alert(l(data.status), l(data.message));\n });\n }\n\n function contactFilter($query) {\n return AddressBook.$filterAll($query);\n }\n\n function addRecipient(user) {\n var recipient = [];\n\n if (angular.isString(user))\n return user;\n if (user.$$fullname)\n recipient.push(user.$$fullname);\n if (user.$$email)\n recipient.push('<' + user.$$email + '>');\n\n return recipient.join(' ');\n }\n\n // Drafts autosaving\n function autosaveDrafts() {\n vm.message.$save();\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n }\n\n // Select list based on user's settings\n Preferences.ready().then(function() {\n if (Preferences.defaults.SOGoMailAutoSave)\n vm.autosave = $timeout(vm.autosaveDrafts, Preferences.defaults.SOGoMailAutoSave*1000*60);\n vm.localeCode = Preferences.defaults.LocaleCode;\n });\n }\n\n angular\n .module('SOGo.MailerUI') \n .controller('MessageEditorController', MessageEditorController); \n})();\n","/* -*- 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/Main.js b/UI/WebServerResources/js/Main.js index 4e9342652..f0ef48687 100644 --- a/UI/WebServerResources/js/Main.js +++ b/UI/WebServerResources/js/Main.js @@ -1,2 +1,2 @@ -!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)}(); +!function(){"use strict";function LoginController($scope,$timeout,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,vm.showLogin=!1,$timeout(function(){vm.showLogin=!0},100)}angular.module("SOGo.MainUI",["SOGo.Common","SOGo.Authentication"]),LoginController.$inject=["$scope","$timeout","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 ab630d437..c7545e07d 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","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 +{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["LoginController","$scope","$timeout","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","showLogin","angular","module"],"mappings":"CAGA,WACE,YAQA,SAASA,iBAAgBC,OAAQC,SAAUC,OAAQC,UAAWC,gBAU5D,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,aA1BnC,GAAItB,IAAKc,IAETd,IAAGC,OAAUsB,SAAUC,eAAgBC,SAAU,MACjDzB,GAAGD,MAAQA,MACXC,GAAGW,UAAYA,UAEfX,GAAG0B,WAAY,EACf/B,SAAS,WAAaK,GAAG0B,WAAY,GAAS,KAdhDC,QAAQC,OAAO,eAAgB,cAAe,wBAK9CnC,gBAAgB6B,SAAW,SAAU,WAAY,SAAU,YAAa,kBAqCxEK,QACGC,OAAO,eACPR,WAAW,kBAAmB3B","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', '$timeout', 'Dialog', '$mdDialog', 'Authentication'];\n function LoginController($scope, $timeout, 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 vm.showLogin = false;\n $timeout(function() { vm.showLogin = true; }, 100);\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 02b8dacb3..822079592 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.unselectComponents(),vm.componentType=type,Component.saveSelectedList(type))}function unselectComponents(){_.each(Component["$"+vm.componentType],function(component){component.selected=!1})}function selectAll(){_.each(Component["$"+vm.componentType],function(component){component.selected=!0})}function confirmDeleteSelectedComponents(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected components?")).then(function(){var components=_.filter(Component["$"+vm.componentType],function(component){return component.selected});Calendar.$deleteComponents(components)},function(data,status){})}function openEvent($event,event){event.viewable&&openComponent($event,event,"appointment")}function openTask($event,task){task.viewable&&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.unselectComponents=unselectComponents,vm.selectAll=selectAll,vm.confirmDeleteSelectedComponents=confirmDeleteSelectedComponents,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 calendar "%{0}".',folder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the calendar %{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 calendar "%{0}".',folder.name),l(data.error))})})}function showLinks(calendar){function LinksDialogController($mdDialog,calendar){function close(){$mdDialog.hide()}var vm=this;vm.calendar=calendar,vm.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:calendar.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{calendar:calendar}}),LinksDialogController.$inject=["$mdDialog","calendar"]}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)}(); +!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,Dialog,Preferences,Calendar,Component){function selectComponentType(type,options){(options&&options.reload||vm.componentType!=type)&&(angular.isUndefined(Component["$"+type])&&Component.$filter(type),vm.unselectComponents(),vm.componentType=type,Component.saveSelectedList(type))}function unselectComponents(){_.each(Component["$"+vm.componentType],function(component){component.selected=!1})}function selectAll(){_.each(Component["$"+vm.componentType],function(component){component.selected=!0})}function toggleComponentSelection($event,component){component.selected=!component.selected,$event.preventDefault(),$event.stopPropagation()}function confirmDeleteSelectedComponents(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected components?")).then(function(){var components=_.filter(Component["$"+vm.componentType],function(component){return component.selected});Calendar.$deleteComponents(components)},function(data,status){})}function openEvent($event,event){event.viewable&&openComponent($event,event,"appointment")}function openTask($event,task){task.viewable&&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.unselectComponents=unselectComponents,vm.selectAll=selectAll,vm.toggleComponentSelection=toggleComponentSelection,vm.confirmDeleteSelectedComponents=confirmDeleteSelectedComponents,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","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 calendar "%{0}".',folder.name),l(data.error))}):Dialog.confirm(l("Warning"),l("Are you sure you want to delete the calendar %{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 calendar "%{0}".',folder.name),l(data.error))})})}function showLinks(calendar){function LinksDialogController($mdDialog,calendar){function close(){$mdDialog.hide()}var vm=this;vm.calendar=calendar,vm.close=close}$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:calendar.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{calendar:calendar}}),LinksDialogController.$inject=["$mdDialog","calendar"]}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 540be52e3..b18999f53 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","unselectComponents","saveSelectedList","_","each","component","selected","selectAll","confirmDeleteSelectedComponents","confirm","l","components","filter","$deleteComponents","status","openEvent","viewable","openComponent","openTask","task","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","newComponent","pid","filterpopup","filteredBy","sort","field","sortedBy","cancelSearch","mode","search","value","selectedList","SelectedList","CalendarsController","$q","Settings","User","newCalendar","ev","prompt","name","calendar","isEditable","isRemote","owner","UserLogin","$add","addWebCalendar","inputType","$addWebCalendar","confirmDelete","folder","isSubscription","$delete","$broadcast","alert","showLinks","LinksDialogController","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","$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","scope","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.unselectComponents = unselectComponents;\n vm.selectAll = selectAll;\n vm.confirmDeleteSelectedComponents = confirmDeleteSelectedComponents;\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.unselectComponents();\n vm.componentType = type;\n Component.saveSelectedList(type);\n }\n }\n\n function unselectComponents() {\n _.each(Component['$' + vm.componentType], function(component) { component.selected = false; });\n }\n\n function selectAll() {\n _.each(Component['$' + vm.componentType], function(component) {\n component.selected = true;\n });\n }\n\n function confirmDeleteSelectedComponents() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected components?'))\n .then(function() {\n // User confirmed the deletion\n var components = _.filter(Component['$' + vm.componentType], function(component) { return component.selected; });\n Calendar.$deleteComponents(components);\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function openEvent($event, event) {\n if (event.viewable)\n openComponent($event, event, 'appointment');\n }\n\n function openTask($event, task) {\n if (task.viewable)\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 calendar \"%{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 calendar %{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 calendar \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n }\n\n function showLinks(calendar) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: calendar.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n calendar: calendar\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'calendar'];\n function LinksDialogController($mdDialog, calendar) {\n var vm = this;\n vm.calendar = calendar;\n vm.close = close;\n\n function close() {\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 +{"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","Dialog","selectComponentType","type","options","reload","componentType","isUndefined","$filter","unselectComponents","saveSelectedList","_","each","component","selected","selectAll","toggleComponentSelection","preventDefault","stopPropagation","confirmDeleteSelectedComponents","confirm","l","components","filter","$deleteComponents","status","openEvent","viewable","openComponent","openTask","task","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","newComponent","pid","filterpopup","filteredBy","sort","field","sortedBy","cancelSearch","mode","search","value","selectedList","SelectedList","CalendarsController","$q","encodeUriFilter","Settings","User","newCalendar","ev","prompt","name","calendar","isEditable","isRemote","owner","UserLogin","$add","addWebCalendar","inputType","$addWebCalendar","confirmDelete","folder","isSubscription","$delete","$broadcast","alert","showLinks","LinksDialogController","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","$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","scope","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', 'Dialog', 'Preferences', 'Calendar', 'Component'];\n function CalendarListController($scope, $timeout, $state, $mdDialog, 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.unselectComponents = unselectComponents;\n vm.selectAll = selectAll;\n vm.toggleComponentSelection = toggleComponentSelection;\n vm.confirmDeleteSelectedComponents = confirmDeleteSelectedComponents;\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.unselectComponents();\n vm.componentType = type;\n Component.saveSelectedList(type);\n }\n }\n\n function unselectComponents() {\n _.each(Component['$' + vm.componentType], function(component) { component.selected = false; });\n }\n\n function selectAll() {\n _.each(Component['$' + vm.componentType], function(component) {\n component.selected = true;\n });\n }\n\n function toggleComponentSelection($event, component) {\n component.selected = !component.selected;\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n function confirmDeleteSelectedComponents() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected components?'))\n .then(function() {\n // User confirmed the deletion\n var components = _.filter(Component['$' + vm.componentType], function(component) { return component.selected; });\n Calendar.$deleteComponents(components);\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function openEvent($event, event) {\n if (event.viewable)\n openComponent($event, event, 'appointment');\n }\n\n function openTask($event, task) {\n if (task.viewable)\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 calendar \"%{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 calendar %{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 calendar \"%{0}\".', folder.name),\n l(data.error));\n });\n });\n }\n }\n\n function showLinks(calendar) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: calendar.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n calendar: calendar\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'calendar'];\n function LinksDialogController($mdDialog, calendar) {\n var vm = this;\n vm.calendar = calendar;\n vm.close = close;\n\n function close() {\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 8b1329e82..9a3c1bc29 100644 --- a/UI/WebServerResources/js/Scheduler.services.js +++ b/UI/WebServerResources/js/Scheduler.services.js @@ -1,2 +1,2 @@ -!function(){"use strict";function Calendar(futureCalendarData){if(this.init(futureCalendarData),this.name&&!this.id){var newCalendarData=Calendar.$$resource.create("createFolder",this.name);angular.extend(this,newCalendarData)}this.id&&(this.$acl=new Calendar.$$Acl("Calendar/"+this.id))}Calendar.$factory=["$q","$timeout","$log","sgSettings","Resource","Component","Acl",function($q,$timeout,$log,Settings,Resource,Component,Acl){return angular.extend(Calendar,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$Component:Component,$$Acl:Acl,activeUser:Settings.activeUser()}),Calendar}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Calendar",Calendar.$factory),Calendar.$add=function(calendar){var list,sibling,i;list=calendar.isWebCalendar?this.$webcalendars:calendar.isSubscription?this.$subscriptions:this.$calendars,sibling=_.find(list,function(o){return"personal"!=o.id&&1===o.name.localeCompare(calendar.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,calendar)},Calendar.$findAll=function(data){var _this=this;return data&&(this.$calendars=[],this.$subscriptions=[],this.$webcalendars=[],angular.forEach(data,function(o,i){var calendar=new Calendar(o);calendar.isWebCalendar?_this.$webcalendars.push(calendar):calendar.isSubscription?_this.$subscriptions.push(calendar):_this.$calendars.push(calendar)})),_.union(this.$calendars,this.$subscriptions,this.$webcalendars)},Calendar.$get=function(id){var calendar;return calendar=_.find(Calendar.$calendars,function(o){return o.id==id}),calendar||(calendar=_.find(Calendar.$subscriptions,function(o){return o.id==id})),calendar||(calendar=_.find(Calendar.$webcalendars,function(o){return o.id==id})),calendar},Calendar.$subscribe=function(uid,path){var _this=this;return Calendar.$$resource.userResource(uid).fetch(path,"subscribe").then(function(calendarData){var calendar=new Calendar(calendarData);return _.find(_this.$subscriptions,function(o){return o.id==calendarData.id})||Calendar.$add(calendar),calendar})},Calendar.$addWebCalendar=function(url){var _this=this,d=Calendar.$q.defer();return _.find(_this.$webcalendars,function(o){return o.urls.webCalendarURL==url})?d.reject():Calendar.$$resource.post(null,"addWebCalendar",{url:url}).then(function(calendarData){angular.extend(calendarData,{isWebCalendar:!0,isEditable:!0,isRemote:!1,owner:Calendar.activeUser.login,urls:{webCalendarURL:url}});var calendar=new Calendar(calendarData);Calendar.$add(calendar),Calendar.$$resource.fetch(calendar.id,"reload").then(function(data){Calendar.$log.debug(JSON.stringify(data,void 0,2))}),d.resolve()},function(){d.reject()}),d.promise},Calendar.prototype.init=function(data){angular.extend(this,data),this.isOwned=Calendar.activeUser.isSuperUser||this.owner==Calendar.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=Calendar.activeUser.login},Calendar.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+this.id},Calendar.prototype.$rename=function(name){var i=_.indexOf(_.pluck(Calendar.$calendars,"id"),this.id);return this.name=name,Calendar.$calendars.splice(i,1),Calendar.$add(this),this.$save()},Calendar.prototype.$delete=function(){var list,promise,_this=this,d=Calendar.$q.defer();return this.isSubscription?(promise=Calendar.$$resource.fetch(this.id,"unsubscribe"),list=Calendar.$subscriptions):(promise=Calendar.$$resource.remove(this.id),list=this.isWebCalendar?Calendar.$webcalendars:Calendar.$calendars),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},Calendar.$deleteComponents=function(components){var calendars={},_this=this;_.forEach(components,function(component){angular.isDefined(calendars[component.c_folder])||(calendars[component.c_folder]=[]),calendars[component.c_folder].push(component.c_name)}),_.forEach(calendars,function(uids,c_folder){Calendar.$$resource.post(c_folder,"batchDelete",{uids:uids})}),_this.$Component.$events=_.difference(_this.$Component.$events,components),_this.$Component.$tasks=_.difference(_this.$Component.$tasks,components)},Calendar.prototype.$save=function(){return Calendar.$$resource.save(this.id,this.$omit()).then(function(data){return data})},Calendar.prototype.$setActivation=function(){return Calendar.$$resource.fetch(this.id,(this.active?"":"de")+"activateFolder")},Calendar.prototype.$getComponent=function(componentId,recurrenceId){return Calendar.$Component.$find(this.id,componentId,recurrenceId)},Calendar.prototype.$omit=function(){var calendar={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(calendar[key]=value)}),calendar}}(),function(){"use strict";function Component(futureComponentData){if("function"!=typeof futureComponentData.then){if(this.init(futureComponentData),this.pid&&!this.id){var newComponentData=Component.$$resource.newguid(this.pid);this.$unwrap(newComponentData),this.isNew=!0}}else this.$unwrap(futureComponentData)}Component.$factory=["$q","$timeout","$log","sgSettings","Preferences","Gravatar","Resource",function($q,$timeout,$log,Settings,Preferences,Gravatar,Resource){return angular.extend(Component,{$q:$q,$timeout:$timeout,$log:$log,$Preferences:Preferences,$gravatar:Gravatar,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),timeFormat:"%H:%M",$query:{value:"",search:"title_Category_Location"},$queryEvents:{sort:"start",asc:1,filterpopup:"view_next7"},$queryTasks:{sort:"status",asc:1,filterpopup:"view_incomplete"}}),Preferences.ready().then(function(){Preferences.settings.Calendar.EventsFilterState&&(Component.$queryEvents.filterpopup=Preferences.settings.Calendar.EventsFilterState),Preferences.settings.Calendar.TasksFilterState&&(Component.$queryTasks.filterpopup=Preferences.settings.Calendar.TasksFilterState),Preferences.settings.Calendar.EventsSortingState&&(Component.$queryEvents.sort=Preferences.settings.Calendar.EventsSortingState[0],Component.$queryEvents.asc=parseInt(Preferences.settings.Calendar.EventsSortingState[1])),Preferences.settings.Calendar.TasksSortingState&&(Component.$queryTasks.sort=Preferences.settings.Calendar.TasksSortingState[0],Component.$queryTasks.asc=parseInt(Preferences.settings.Calendar.TasksSortingState[1])),Component.$queryTasks.show_completed=parseInt(Preferences.settings.ShowCompletedTasks),Component.$categories=Preferences.defaults.SOGoCalendarCategoriesColors,Preferences.defaults.SOGoTimeFormat&&(Component.timeFormat=Preferences.defaults.SOGoTimeFormat)}),Component}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Component",Component.$factory),Component.$selectedCount=function(){var count;return count=0,Component.$events&&(count=_.filter(Component.$events,function(event){return event.selected}).length),Component.$tasks&&(count=_.filter(Component.$tasks,function(event){return event.selected}).length),count},Component.$filter=function(type,options){var _this=this,now=new Date,day=now.getDate(),month=now.getMonth()+1,year=now.getFullYear(),queryKey="$query"+type.capitalize(),params={day:""+year+(10>month?"0":"")+month+(10>day?"0":"")+day};return this.$Preferences.ready().then(function(){var futureComponentData,otherType,dirty=!1;return angular.extend(_this.$query,params),options&&_.each(_.keys(options),function(key){dirty|=_this.$query[key]&&options[key]!=Component.$query[key],"reload"==key&&options[key]?dirty=!0:angular.isDefined(_this.$query[key])?_this.$query[key]=options[key]:_this[queryKey][key]=options[key]}),futureComponentData=_this.$$resource.fetch(null,type+"list",angular.extend(_this[queryKey],_this.$query)),otherType="tasks"==type?"$events":"$tasks",dirty&&(delete Component[otherType],Component.$log.debug("force reload of "+otherType)),_this.$unwrapCollection(type,futureComponentData)})},Component.$find=function(calendarId,componentId,occurrenceId){var futureComponentData,path=[calendarId,componentId];return occurrenceId&&path.push(occurrenceId),futureComponentData=this.$$resource.fetch(path.join("/"),"view"),new Component(futureComponentData)},Component.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Component.$categories),function(category){return-1!=category.search(re)})},Component.saveSelectedList=function(componentType){return this.$$resource.post(null,"saveSelectedList",{list:componentType+"ListView"})},Component.$eventsBlocksForView=function(view,date){var viewAction,startDate,endDate;return"day"==view?(viewAction="dayView",startDate=endDate=date):"week"==view?(viewAction="weekView",startDate=date.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.addDays(6)):"month"==view&&(viewAction="monthView",startDate=date,startDate.setDate(1),startDate=startDate.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.setMonth(endDate.getMonth()+1),endDate.addDays(-1),endDate=endDate.endOfWeek()),this.$eventsBlocks(viewAction,startDate,endDate)},Component.$eventsBlocks=function(view,startDate,endDate){var params,futureComponentData,i,deferred=Component.$q.defer();return params={view:view.toLowerCase(),sd:startDate.getDayString(),ed:endDate.getDayString()},Component.$log.debug("eventsblocks "+JSON.stringify(params,void 0,2)),futureComponentData=this.$$resource.fetch(null,"eventsblocks",params),futureComponentData.then(function(data){Component.$timeout(function(){var components=[],blocks={};for(_.reduce(data.events,function(objects,eventData,i){var componentData=_.object(data.eventsFields,eventData),start=new Date(1e3*componentData.c_startdate);return componentData.hour=start.getHourString(),objects.push(new Component(componentData)),objects},components),_.each(_.flatten(data.blocks),function(block){block.component=components[block.nbr]}),i=0;i1||this.repeat.days&&this.repeat.days.length>0||this.repeat.monthdays&&this.repeat.monthdays.length>0||this.repeat.months&&this.repeat.months.length>0);return b},Component.prototype.isEditable=function(){return!this.occurrenceId&&!this.isReadOnly},Component.prototype.isEditableOccurrence=function(){return this.occurrenceId&&!this.isReadOnly},Component.prototype.isInvitation=function(){return!this.occurrenceId&&this.userHasRSVP},Component.prototype.isInvitationOccurrence=function(){return this.occurrenceId&&this.userHasRSVP},Component.prototype.isReadOnly=function(){return this.isReadOnly&&!this.userHasRSVP},Component.prototype.enablePercentComplete=function(){return this.component="not-specified"!=this.status&&"cancelled"!=this.status},Component.prototype.coversFreeBusy=function(day,hour,quarter){var b=angular.isDefined(this.freebusy[day])&&angular.isDefined(this.freebusy[day][hour])&&1==this.freebusy[day][hour][quarter];return b},Component.prototype.updateFreeBusyCoverage=function(){var _this=this,freebusy={};if(this.start&&this.end){var roundedStart=new Date(this.start.getTime()),roundedEnd=new Date(this.end.getTime()),startQuarter=parseInt(roundedStart.getMinutes()/15+.5),endQuarter=parseInt(roundedEnd.getMinutes()/15+.5);return roundedStart.setMinutes(15*startQuarter),roundedEnd.setMinutes(15*endQuarter),_.each(roundedStart.daysUpTo(roundedEnd),function(date,index){var hourKey,currentDay=date.getDate(),dayKey=date.getDayString();if(dayKey==_this.start.getDayString())for(hourKey=date.getHours().toString(),freebusy[dayKey]={},freebusy[dayKey][hourKey]=[];startQuarter>0;)freebusy[dayKey][hourKey].push(0),startQuarter--;else date=date.beginOfDay(),freebusy[dayKey]={};for(;date.getTime()<_this.end.getTime()&&date.getDate()==currentDay;)hourKey=date.getHours().toString(),angular.isUndefined(freebusy[dayKey][hourKey])&&(freebusy[dayKey][hourKey]=[]),freebusy[dayKey][hourKey].push(1),date.addMinutes(15)}),freebusy}},Component.prototype.updateFreeBusy=function(attendee){var params,url,days;attendee.uid&&(params={sday:this.start.getDayString(),eday:this.end.getDayString()},url=["..","..",attendee.uid,"freebusy.ifb"],days=_.map(this.start.daysUpTo(this.end),function(day){return day.getDayString()}),angular.isUndefined(attendee.freebusy)&&(attendee.freebusy={}),Component.$$resource.fetch(url.join("/"),"ajaxRead",params).then(function(data){_.each(days,function(day){var hour;angular.isUndefined(attendee.freebusy[day])&&(attendee.freebusy[day]={}),angular.isUndefined(data[day])&&(data[day]={});for(var i=0;23>=i;i++)hour=i.toString(),data[day][hour]?attendee.freebusy[day][hour]=[data[day][hour][0],data[day][hour][15],data[day][hour][30],data[day][hour][45]]:attendee.freebusy[day][hour]=[0,0,0,0]})}))},Component.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+(this.destinationCalendar||this.c_folder)},Component.prototype.addAttendee=function(card){var attendee;card&&(attendee={name:card.c_cn,email:card.$preferredEmail(),role:"req-participant",status:"needs-action",uid:card.c_uid},_.find(this.attendees,function(o){return o.email==attendee.email})||(attendee.image=Component.$gravatar(attendee.email,32),this.attendees?this.attendees.push(attendee):this.attendees=[attendee],this.updateFreeBusy(attendee)))},Component.prototype.hasAttendee=function(card){var attendee=_.find(this.attendees,function(attendee){return _.find(card.emails,function(email){return email.value==attendee.email})});return angular.isDefined(attendee)},Component.prototype.canRemindAttendeesByEmail=function(){return"email"==this.alarm.action&&!this.isReadOnly&&this.attendees&&this.attendees.length>0},Component.prototype.addAttachUrl=function(attachUrl){if(angular.isUndefined(this.attachUrls))this.attachUrls=[{value:attachUrl}];else{for(var i=0;i-1&&this.attachUrls.length>index&&this.attachUrls.splice(index,1)},Component.prototype.$addDueDate=function(){this.due=new Date,this.dueDate=this.due.toISOString()},Component.prototype.$deleteDueDate=function(){delete this.due,delete this.dueDate},Component.prototype.$addStartDate=function(){this.start=new Date},Component.prototype.$deleteStartDate=function(){delete this.start,delete this.startDate},Component.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&delete _this[key]}),this.init(this.$shadowData),this.$shadowData=this.$omit(!0)},Component.prototype.$reply=function(){var data,_this=this,path=[this.pid,this.id];return this.occurrenceId&&path.push(this.occurrenceId),data={reply:this.reply,delegatedTo:this.delegatedTo,alarm:this.$hasAlarm?this.alarm:{}},Component.$$resource.save(path.join("/"),data,{action:"rsvpAppointment"}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$save=function(){var options,_this=this,path=[this.pid,this.id];return this.isNew&&(options={action:"saveAs"+this.type.capitalize()}),this.occurrenceId&&path.push(this.occurrenceId),Component.$$resource.save(path.join("/"),this.$omit(),options).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$unwrap=function(futureComponentData){var _this=this;this.$futureComponentData=futureComponentData,this.$futureComponentData.then(function(data){_this.init(data),_this.$shadowData=_this.$omit()},function(data){angular.extend(_this,data),_this.isError=!0,Component.$log.error(_this.error)})},Component.prototype.$omit=function(){function formatTime(date){var hours=date.getHours();10>hours&&(hours="0"+hours);var minutes=date.getMinutes();return 10>minutes&&(minutes="0"+minutes),hours+":"+minutes}function formatDate(date){var year=date.getYear();1e3>year&&(year+=1900);var month=""+(date.getMonth()+1);1==month.length&&(month="0"+month);var day=""+date.getDate();return 1==day.length&&(day="0"+day),year+"-"+month+"-"+day}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startDate=component.start?formatDate(component.start):"",component.startTime=component.start?formatTime(component.start):"",component.endDate=component.end?formatDate(component.end):"",component.endTime=component.end?formatTime(component.end):"",component.dueDate=component.due?formatDate(component.due):"",component.dueTime=component.due?formatTime(component.due):"",this.$hasCustomRepeat?"monthly"==this.repeat.frequency&&this.repeat.month.type&&"byday"==this.repeat.month.type||"yearly"==this.repeat.frequency&&this.repeat.year.byday?(delete component.repeat.monthdays,component.repeat.days=[{day:this.repeat.month.day,occurrence:this.repeat.month.occurrence.toString()}]):this.repeat.month.type&&delete component.repeat.days:this.repeat.frequency&&(component.repeat={frequency:this.repeat.frequency}),this.repeat.frequency?"until"==this.repeat.end&&this.repeat.until?component.repeat.until=this.repeat.until.stringWithSeparator("-"):"count"==this.repeat.end&&this.repeat.count?component.repeat.count=this.repeat.count:(delete component.repeat.until,delete component.repeat.count):delete component.repeat,this.$hasAlarm?!this.alarm.action||"email"!=this.alarm.action||this.attendees&&this.attendees.length>0||(this.alarm.attendees=0,this.alarm.organizer=1):component.alarm={},component}}(); +!function(){"use strict";function Calendar(futureCalendarData){if(this.init(futureCalendarData),this.name&&!this.id){var newCalendarData=Calendar.$$resource.create("createFolder",this.name);angular.extend(this,newCalendarData)}this.id&&(this.$acl=new Calendar.$$Acl("Calendar/"+this.id))}Calendar.$factory=["$q","$timeout","$log","sgSettings","Resource","Component","Acl",function($q,$timeout,$log,Settings,Resource,Component,Acl){return angular.extend(Calendar,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$Component:Component,$$Acl:Acl,activeUser:Settings.activeUser()}),Calendar}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Calendar",Calendar.$factory),Calendar.$add=function(calendar){var list,sibling,i;list=calendar.isWebCalendar?this.$webcalendars:calendar.isSubscription?this.$subscriptions:this.$calendars,sibling=_.find(list,function(o){return"personal"!=o.id&&1===o.name.localeCompare(calendar.name)}),i=sibling?_.indexOf(_.pluck(list,"id"),sibling.id):1,list.splice(i,0,calendar)},Calendar.$findAll=function(data){var _this=this;return data&&(this.$calendars=[],this.$subscriptions=[],this.$webcalendars=[],angular.forEach(data,function(o,i){var calendar=new Calendar(o);calendar.isWebCalendar?_this.$webcalendars.push(calendar):calendar.isSubscription?_this.$subscriptions.push(calendar):_this.$calendars.push(calendar)})),_.union(this.$calendars,this.$subscriptions,this.$webcalendars)},Calendar.$get=function(id){var calendar;return calendar=_.find(Calendar.$calendars,function(o){return o.id==id}),calendar||(calendar=_.find(Calendar.$subscriptions,function(o){return o.id==id})),calendar||(calendar=_.find(Calendar.$webcalendars,function(o){return o.id==id})),calendar},Calendar.$subscribe=function(uid,path){var _this=this;return Calendar.$$resource.userResource(uid).fetch(path,"subscribe").then(function(calendarData){var calendar=new Calendar(calendarData);return _.find(_this.$subscriptions,function(o){return o.id==calendarData.id})||Calendar.$add(calendar),calendar})},Calendar.$addWebCalendar=function(url){var _this=this,d=Calendar.$q.defer();return _.find(_this.$webcalendars,function(o){return o.urls.webCalendarURL==url})?d.reject():Calendar.$$resource.post(null,"addWebCalendar",{url:url}).then(function(calendarData){angular.extend(calendarData,{isWebCalendar:!0,isEditable:!0,isRemote:!1,owner:Calendar.activeUser.login,urls:{webCalendarURL:url}});var calendar=new Calendar(calendarData);Calendar.$add(calendar),Calendar.$$resource.fetch(calendar.id,"reload").then(function(data){Calendar.$log.debug(JSON.stringify(data,void 0,2))}),d.resolve()},function(){d.reject()}),d.promise},Calendar.prototype.init=function(data){angular.extend(this,data),this.isOwned=Calendar.activeUser.isSuperUser||this.owner==Calendar.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=Calendar.activeUser.login},Calendar.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+this.id},Calendar.prototype.$rename=function(name){var i=_.indexOf(_.pluck(Calendar.$calendars,"id"),this.id);return this.name=name,Calendar.$calendars.splice(i,1),Calendar.$add(this),this.$save()},Calendar.prototype.$delete=function(){var list,promise,_this=this,d=Calendar.$q.defer();return this.isSubscription?(promise=Calendar.$$resource.fetch(this.id,"unsubscribe"),list=Calendar.$subscriptions):(promise=Calendar.$$resource.remove(this.id),list=this.isWebCalendar?Calendar.$webcalendars:Calendar.$calendars),promise.then(function(){var i=_.indexOf(_.pluck(list,"id"),_this.id);list.splice(i,1),d.resolve()},function(data,status){d.reject(data)}),d.promise},Calendar.$deleteComponents=function(components){var calendars={},_this=this;_.forEach(components,function(component){angular.isDefined(calendars[component.c_folder])||(calendars[component.c_folder]=[]),calendars[component.c_folder].push(component.c_name)}),_.forEach(calendars,function(uids,c_folder){Calendar.$$resource.post(c_folder,"batchDelete",{uids:uids})}),_this.$Component.$events=_.difference(_this.$Component.$events,components),_this.$Component.$tasks=_.difference(_this.$Component.$tasks,components)},Calendar.prototype.$save=function(){return Calendar.$$resource.save(this.id,this.$omit()).then(function(data){return data})},Calendar.prototype.$setActivation=function(){return Calendar.$$resource.fetch(this.id,(this.active?"":"de")+"activateFolder")},Calendar.prototype.$getComponent=function(componentId,recurrenceId){return Calendar.$Component.$find(this.id,componentId,recurrenceId)},Calendar.prototype.$omit=function(){var calendar={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(calendar[key]=value)}),calendar}}(),function(){"use strict";function Component(futureComponentData){if("function"!=typeof futureComponentData.then){if(this.init(futureComponentData),this.pid&&!this.id){var newComponentData=Component.$$resource.newguid(this.pid);this.$unwrap(newComponentData),this.isNew=!0}}else this.$unwrap(futureComponentData)}Component.$factory=["$q","$timeout","$log","sgSettings","Preferences","Gravatar","Resource",function($q,$timeout,$log,Settings,Preferences,Gravatar,Resource){return angular.extend(Component,{$q:$q,$timeout:$timeout,$log:$log,$Preferences:Preferences,$gravatar:Gravatar,$$resource:new Resource(Settings.baseURL(),Settings.activeUser()),timeFormat:"%H:%M",$query:{value:"",search:"title_Category_Location"},$queryEvents:{sort:"start",asc:1,filterpopup:"view_next7"},$queryTasks:{sort:"status",asc:1,filterpopup:"view_incomplete"},$refreshTimeout:null}),Preferences.ready().then(function(){Preferences.settings.Calendar.EventsFilterState&&(Component.$queryEvents.filterpopup=Preferences.settings.Calendar.EventsFilterState),Preferences.settings.Calendar.TasksFilterState&&(Component.$queryTasks.filterpopup=Preferences.settings.Calendar.TasksFilterState),Preferences.settings.Calendar.EventsSortingState&&(Component.$queryEvents.sort=Preferences.settings.Calendar.EventsSortingState[0],Component.$queryEvents.asc=parseInt(Preferences.settings.Calendar.EventsSortingState[1])),Preferences.settings.Calendar.TasksSortingState&&(Component.$queryTasks.sort=Preferences.settings.Calendar.TasksSortingState[0],Component.$queryTasks.asc=parseInt(Preferences.settings.Calendar.TasksSortingState[1])),Component.$queryTasks.show_completed=parseInt(Preferences.settings.ShowCompletedTasks),Component.$categories=Preferences.defaults.SOGoCalendarCategoriesColors,Preferences.defaults.SOGoTimeFormat&&(Component.timeFormat=Preferences.defaults.SOGoTimeFormat)}),Component}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").factory("Component",Component.$factory),Component.$selectedCount=function(){var count;return count=0,Component.$events&&(count=_.filter(Component.$events,function(event){return event.selected}).length),Component.$tasks&&(count=_.filter(Component.$tasks,function(task){return task.selected}).length),count},Component.$startRefreshTimeout=function(type){var _this=this;Component.$refreshTimeout&&Component.$timeout.cancel(Component.$refreshTimeout),Component.$Preferences.ready().then(function(){var refreshViewCheck=Component.$Preferences.defaults.SOGoRefreshViewCheck;if(refreshViewCheck&&"manually"!=refreshViewCheck){var f=angular.bind(_this,Component.$filter,type);Component.$refreshTimeout=Component.$timeout(f,1e3*refreshViewCheck.timeInterval())}})},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 Component.$startRefreshTimeout(type),this.$Preferences.ready().then(function(){var futureComponentData,otherType,dirty=!1;return angular.extend(_this.$query,params),options&&_.each(_.keys(options),function(key){dirty|=_this.$query[key]&&options[key]!=Component.$query[key],"reload"==key&&options[key]?dirty=!0:angular.isDefined(_this.$query[key])?_this.$query[key]=options[key]:_this[queryKey][key]=options[key]}),futureComponentData=_this.$$resource.fetch(null,type+"list",angular.extend(_this[queryKey],_this.$query)),otherType="tasks"==type?"$events":"$tasks",dirty&&(delete Component[otherType],Component.$log.debug("force reload of "+otherType)),_this.$unwrapCollection(type,futureComponentData)})},Component.$find=function(calendarId,componentId,occurrenceId){var futureComponentData,path=[calendarId,componentId];return occurrenceId&&path.push(occurrenceId),futureComponentData=this.$$resource.fetch(path.join("/"),"view"),new Component(futureComponentData)},Component.filterCategories=function(query){var re=new RegExp(query,"i");return _.filter(_.keys(Component.$categories),function(category){return-1!=category.search(re)})},Component.saveSelectedList=function(componentType){return this.$$resource.post(null,"saveSelectedList",{list:componentType+"ListView"})},Component.$eventsBlocksForView=function(view,date){var viewAction,startDate,endDate;return"day"==view?(viewAction="dayView",startDate=endDate=date):"week"==view?(viewAction="weekView",startDate=date.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.addDays(6)):"month"==view&&(viewAction="monthView",startDate=date,startDate.setDate(1),startDate=startDate.beginOfWeek(),endDate=new Date,endDate.setTime(startDate.getTime()),endDate.setMonth(endDate.getMonth()+1),endDate.addDays(-1),endDate=endDate.endOfWeek()),this.$eventsBlocks(viewAction,startDate,endDate)},Component.$eventsBlocks=function(view,startDate,endDate){var params,futureComponentData,i,deferred=Component.$q.defer();return params={view:view.toLowerCase(),sd:startDate.getDayString(),ed:endDate.getDayString()},Component.$log.debug("eventsblocks "+JSON.stringify(params,void 0,2)),futureComponentData=this.$$resource.fetch(null,"eventsblocks",params),futureComponentData.then(function(data){Component.$timeout(function(){var components=[],blocks={};for(_.reduce(data.events,function(objects,eventData,i){var componentData=_.object(data.eventsFields,eventData),start=new Date(1e3*componentData.c_startdate);return componentData.hour=start.getHourString(),objects.push(new Component(componentData)),objects},components),_.each(_.flatten(data.blocks),function(block){block.component=components[block.nbr]}),i=0;i1||this.repeat.days&&this.repeat.days.length>0||this.repeat.monthdays&&this.repeat.monthdays.length>0||this.repeat.months&&this.repeat.months.length>0);return b},Component.prototype.isEditable=function(){return!this.occurrenceId&&!this.isReadOnly},Component.prototype.isEditableOccurrence=function(){return this.occurrenceId&&!this.isReadOnly},Component.prototype.isInvitation=function(){return!this.occurrenceId&&this.userHasRSVP},Component.prototype.isInvitationOccurrence=function(){return this.occurrenceId&&this.userHasRSVP},Component.prototype.isReadOnly=function(){return this.isReadOnly&&!this.userHasRSVP},Component.prototype.enablePercentComplete=function(){return this.component="not-specified"!=this.status&&"cancelled"!=this.status},Component.prototype.coversFreeBusy=function(day,hour,quarter){var b=angular.isDefined(this.freebusy[day])&&angular.isDefined(this.freebusy[day][hour])&&1==this.freebusy[day][hour][quarter];return b},Component.prototype.updateFreeBusyCoverage=function(){var _this=this,freebusy={};if(this.start&&this.end){var roundedStart=new Date(this.start.getTime()),roundedEnd=new Date(this.end.getTime()),startQuarter=parseInt(roundedStart.getMinutes()/15+.5),endQuarter=parseInt(roundedEnd.getMinutes()/15+.5);return roundedStart.setMinutes(15*startQuarter),roundedEnd.setMinutes(15*endQuarter),_.each(roundedStart.daysUpTo(roundedEnd),function(date,index){var hourKey,currentDay=date.getDate(),dayKey=date.getDayString();if(dayKey==_this.start.getDayString())for(hourKey=date.getHours().toString(),freebusy[dayKey]={},freebusy[dayKey][hourKey]=[];startQuarter>0;)freebusy[dayKey][hourKey].push(0),startQuarter--;else date=date.beginOfDay(),freebusy[dayKey]={};for(;date.getTime()<_this.end.getTime()&&date.getDate()==currentDay;)hourKey=date.getHours().toString(),angular.isUndefined(freebusy[dayKey][hourKey])&&(freebusy[dayKey][hourKey]=[]),freebusy[dayKey][hourKey].push(1),date.addMinutes(15)}),freebusy}},Component.prototype.updateFreeBusy=function(attendee){var params,url,days;attendee.uid&&(params={sday:this.start.getDayString(),eday:this.end.getDayString()},url=["..","..",attendee.uid,"freebusy.ifb"],days=_.map(this.start.daysUpTo(this.end),function(day){return day.getDayString()}),angular.isUndefined(attendee.freebusy)&&(attendee.freebusy={}),Component.$$resource.fetch(url.join("/"),"ajaxRead",params).then(function(data){_.each(days,function(day){var hour;angular.isUndefined(attendee.freebusy[day])&&(attendee.freebusy[day]={}),angular.isUndefined(data[day])&&(data[day]={});for(var i=0;23>=i;i++)hour=i.toString(),data[day][hour]?attendee.freebusy[day][hour]=[data[day][hour][0],data[day][hour][15],data[day][hour][30],data[day][hour][45]]:attendee.freebusy[day][hour]=[0,0,0,0]})}))},Component.prototype.getClassName=function(base){return angular.isUndefined(base)&&(base="fg"),base+"-folder"+(this.destinationCalendar||this.c_folder)},Component.prototype.addAttendee=function(card){var attendee;card&&(attendee={name:card.c_cn,email:card.$preferredEmail(),role:"req-participant",status:"needs-action",uid:card.c_uid},_.find(this.attendees,function(o){return o.email==attendee.email})||(attendee.image=Component.$gravatar(attendee.email,32),this.attendees?this.attendees.push(attendee):this.attendees=[attendee],this.updateFreeBusy(attendee)))},Component.prototype.hasAttendee=function(card){var attendee=_.find(this.attendees,function(attendee){return _.find(card.emails,function(email){return email.value==attendee.email})});return angular.isDefined(attendee)},Component.prototype.canRemindAttendeesByEmail=function(){return"email"==this.alarm.action&&!this.isReadOnly&&this.attendees&&this.attendees.length>0},Component.prototype.addAttachUrl=function(attachUrl){if(angular.isUndefined(this.attachUrls))this.attachUrls=[{value:attachUrl}];else{for(var i=0;i-1&&this.attachUrls.length>index&&this.attachUrls.splice(index,1)},Component.prototype.$addDueDate=function(){this.due=new Date,this.dueDate=this.due.toISOString()},Component.prototype.$deleteDueDate=function(){delete this.due,delete this.dueDate},Component.prototype.$addStartDate=function(){this.start=new Date},Component.prototype.$deleteStartDate=function(){delete this.start,delete this.startDate},Component.prototype.$reset=function(){var _this=this;angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&delete _this[key]}),this.init(this.$shadowData),this.$shadowData=this.$omit(!0)},Component.prototype.$reply=function(){var data,_this=this,path=[this.pid,this.id];return this.occurrenceId&&path.push(this.occurrenceId),data={reply:this.reply,delegatedTo:this.delegatedTo,alarm:this.$hasAlarm?this.alarm:{}},Component.$$resource.save(path.join("/"),data,{action:"rsvpAppointment"}).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$save=function(){var options,_this=this,path=[this.pid,this.id];return this.isNew&&(options={action:"saveAs"+this.type.capitalize()}),this.occurrenceId&&path.push(this.occurrenceId),Component.$$resource.save(path.join("/"),this.$omit(),options).then(function(data){return _this.$shadowData=_this.$omit(!0),data})},Component.prototype.$unwrap=function(futureComponentData){var _this=this;this.$futureComponentData=futureComponentData,this.$futureComponentData.then(function(data){_this.init(data),_this.$shadowData=_this.$omit()},function(data){angular.extend(_this,data),_this.isError=!0,Component.$log.error(_this.error)})},Component.prototype.$omit=function(){function formatTime(date){var hours=date.getHours();10>hours&&(hours="0"+hours);var minutes=date.getMinutes();return 10>minutes&&(minutes="0"+minutes),hours+":"+minutes}function formatDate(date){var year=date.getYear();1e3>year&&(year+=1900);var month=""+(date.getMonth()+1);1==month.length&&(month="0"+month);var day=""+date.getDate();return 1==day.length&&(day="0"+day),year+"-"+month+"-"+day}var component={};return angular.forEach(this,function(value,key){"constructor"!=key&&"$"!=key[0]&&(component[key]=angular.copy(value))}),component.startDate=component.start?formatDate(component.start):"",component.startTime=component.start?formatTime(component.start):"",component.endDate=component.end?formatDate(component.end):"",component.endTime=component.end?formatTime(component.end):"",component.dueDate=component.due?formatDate(component.due):"",component.dueTime=component.due?formatTime(component.due):"",this.$hasCustomRepeat?"monthly"==this.repeat.frequency&&this.repeat.month.type&&"byday"==this.repeat.month.type||"yearly"==this.repeat.frequency&&this.repeat.year.byday?(delete component.repeat.monthdays,component.repeat.days=[{day:this.repeat.month.day,occurrence:this.repeat.month.occurrence.toString()}]):this.repeat.month.type&&delete component.repeat.days:this.repeat.frequency&&(component.repeat={frequency:this.repeat.frequency}),this.repeat.frequency?"until"==this.repeat.end&&this.repeat.until?component.repeat.until=this.repeat.until.stringWithSeparator("-"):"count"==this.repeat.end&&this.repeat.count?component.repeat.count=this.repeat.count:(delete component.repeat.until,delete component.repeat.count):delete component.repeat,this.$hasAlarm?!this.alarm.action||"email"!=this.alarm.action||this.attendees&&this.attendees.length>0||(this.alarm.attendees=0,this.alarm.organizer=1):component.alarm={},component}}(); //# sourceMappingURL=Scheduler.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Scheduler.services.js.map b/UI/WebServerResources/js/Scheduler.services.js.map index b1b13b969..4e51a628f 100644 --- a/UI/WebServerResources/js/Scheduler.services.js.map +++ b/UI/WebServerResources/js/Scheduler.services.js.map @@ -1 +1 @@ -{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Calendar.service.js","Scheduler/Component.service.js"],"names":["Calendar","futureCalendarData","this","init","name","id","newCalendarData","$$resource","create","angular","extend","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Component","Acl","activeUser","$Component","module","e","factory","$add","calendar","list","sibling","i","isWebCalendar","$webcalendars","isSubscription","$subscriptions","$calendars","_","find","o","localeCompare","indexOf","pluck","splice","$findAll","data","_this","forEach","push","union","$get","$subscribe","uid","path","userResource","fetch","then","calendarData","$addWebCalendar","url","d","defer","urls","webCalendarURL","reject","post","isEditable","isRemote","owner","login","debug","JSON","stringify","undefined","resolve","promise","prototype","isOwned","isSuperUser","getClassName","base","isUndefined","$rename","$save","$delete","remove","status","$deleteComponents","components","calendars","component","isDefined","c_folder","c_name","uids","$events","difference","$tasks","save","$omit","$setActivation","active","$getComponent","componentId","recurrenceId","$find","value","key","futureComponentData","pid","newComponentData","newguid","$unwrap","isNew","Preferences","Gravatar","$Preferences","$gravatar","baseURL","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","ready","settings","EventsFilterState","TasksFilterState","EventsSortingState","parseInt","TasksSortingState","show_completed","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$selectedCount","count","filter","event","selected","length","$filter","type","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","category","saveSelectedList","componentType","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","nbr","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","addHours","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","until","asDate","$hasCustomRepeat","hasCustomRepeat","units","M","H","D","W","match","exec","SOGoCalendarDefaultReminder","$hasAlarm","destinationCalendar","organizer","email","$image","freebusy","updateFreeBusyCoverage","attendees","attendee","image","updateFreeBusy","b","isReadOnly","isEditableOccurrence","isInvitation","userHasRSVP","isInvitationOccurrence","enablePercentComplete","coversFreeBusy","quarter","roundedStart","roundedEnd","startQuarter","getMinutes","endQuarter","setMinutes","daysUpTo","index","hourKey","currentDay","dayKey","getHours","beginOfDay","addMinutes","sday","eday","map","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$addDueDate","toISOString","$deleteDueDate","$addStartDate","$deleteStartDate","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","hours","minutes","formatDate","getYear","copy","startTime","endTime","dueTime","stringWithSeparator"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Calendar\n * @constructor\n * @param {object} futureCalendarData - either an object literal or a promise\n */\n function Calendar(futureCalendarData) {\n // Data is immediately available\n this.init(futureCalendarData);\n if (this.name && !this.id) {\n // Create a new calendar on the server\n var newCalendarData = Calendar.$$resource.create('createFolder', this.name);\n angular.extend(this, newCalendarData);\n }\n if (this.id) {\n this.$acl = new Calendar.$$Acl('Calendar/' + this.id);\n }\n }\n\n /**\n * @memberof Calendar\n * @desc The factory we'll use to register with Angular\n * @returns the Calendar constructor\n */\n Calendar.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Component', 'Acl', function($q, $timeout, $log, Settings, Resource, Component, Acl) {\n angular.extend(Calendar, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $Component: Component,\n $$Acl: Acl,\n activeUser: Settings.activeUser()\n });\n\n return Calendar; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Calendar in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Calendar', Calendar.$factory);\n\n /**\n * @memberof Calendar\n * @desc Add a new calendar to the static list of calendars\n * @param {Calendar} calendar - an Calendar object instance\n */\n Calendar.$add = function(calendar) {\n // Insert new calendar at proper index\n var list, sibling, i;\n\n if (calendar.isWebCalendar)\n list = this.$webcalendars;\n else if (calendar.isSubscription)\n list = this.$subscriptions;\n else\n list = this.$calendars;\n\n sibling = _.find(list, function(o) {\n return (o.id != 'personal' &&\n o.name.localeCompare(calendar.name) === 1);\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, calendar);\n };\n\n /**\n * @memberof Calendar\n * @desc Set or get the list of calendars. Will instanciate a new Calendar object for each item.\n * @param {object[]} [data] - the metadata of the calendars\n * @returns the list of calendars\n */\n Calendar.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$calendars = [];\n this.$subscriptions = [];\n this.$webcalendars = [];\n // Instanciate Calendar objects\n angular.forEach(data, function(o, i) {\n var calendar = new Calendar(o);\n if (calendar.isWebCalendar)\n _this.$webcalendars.push(calendar);\n else if (calendar.isSubscription)\n _this.$subscriptions.push(calendar);\n else\n _this.$calendars.push(calendar);\n });\n }\n return _.union(this.$calendars, this.$subscriptions, this.$webcalendars);\n };\n\n /**\n * @memberof Calendar\n * @desc Find a calendar among local instances (personal calendars, subscriptions and Web calendars).\n * @param {string} id - the calendar ID\n * @returns an object literal of the matching Calendar instance\n */\n Calendar.$get = function(id) {\n var calendar;\n\n calendar = _.find(Calendar.$calendars, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$subscriptions, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$webcalendars, function(o) { return o.id == id; });\n\n return calendar;\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to another user's calendar and add it to the list of calendars.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n Calendar.$subscribe = function(uid, path) {\n var _this = this;\n return Calendar.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(calendarData) {\n var calendar = new Calendar(calendarData);\n if (!_.find(_this.$subscriptions, function(o) {\n return o.id == calendarData.id;\n })) {\n Calendar.$add(calendar);\n }\n return calendar;\n });\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to a remote Web calendar\n * @param {string} url - URL of .ics file\n * @returns a promise of the HTTP query result\n */\n Calendar.$addWebCalendar = function(url) {\n var _this = this,\n d = Calendar.$q.defer();\n\n if (_.find(_this.$webcalendars, function(o) {\n return o.urls.webCalendarURL == url;\n })) {\n // Already subscribed\n d.reject();\n }\n else {\n Calendar.$$resource.post(null, 'addWebCalendar', { url: url }).then(function(calendarData) {\n angular.extend(calendarData, {\n isWebCalendar: true,\n isEditable: true,\n isRemote: false,\n owner: Calendar.activeUser.login,\n urls: { webCalendarURL: url }\n });\n var calendar = new Calendar(calendarData);\n Calendar.$add(calendar);\n Calendar.$$resource.fetch(calendar.id, 'reload').then(function(data) {\n // TODO: show a toast of the reload status\n Calendar.$log.debug(JSON.stringify(data, undefined, 2));\n });\n d.resolve();\n }, function() {\n d.reject();\n });\n }\n\n return d.promise;\n };\n\n /**\n * @function init\n * @memberof Calendar.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of calendar\n */\n Calendar.prototype.init = function(data) {\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = Calendar.activeUser.isSuperUser || this.owner == Calendar.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != Calendar.activeUser.login;\n };\n\n /**\n * @function getClassName\n * @memberof Calendar.prototype\n * @desc Return the calendar CSS class name based on its ID.\n * @returns a string representing the foreground CSS class name\n */\n Calendar.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + this.id;\n };\n\n /**\n * @function $rename\n * @memberof Calendar.prototype\n * @desc Rename the calendar and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(Calendar.$calendars, 'id'), this.id);\n this.name = name;\n Calendar.$calendars.splice(i, 1);\n Calendar.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof Calendar.prototype\n * @desc Delete the calendar from the server and the static list of calendars.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$delete = function() {\n var _this = this,\n d = Calendar.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = Calendar.$$resource.fetch(this.id, 'unsubscribe');\n list = Calendar.$subscriptions;\n }\n else {\n promise = Calendar.$$resource.remove(this.id);\n if (this.isWebCalendar)\n list = Calendar.$webcalendars;\n else\n list = Calendar.$calendars;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteComponents\n * @memberof Calendar\n * @desc Delete multiple components from calendar.\n * @return a promise of the HTTP operation\n */\n Calendar.$deleteComponents = function(components) {\n\n // We create a c_folder -> event hash\n var calendars = {}, _this = this;\n\n _.forEach(components, function(component) {\n if (!angular.isDefined(calendars[component.c_folder]))\n calendars[component.c_folder] = [];\n\n calendars[component.c_folder].push(component.c_name);\n });\n\n _.forEach(calendars, function(uids, c_folder) {\n Calendar.$$resource.post(c_folder, 'batchDelete', {uids: uids});\n });\n\n // We slice both arrays - might be useful if in the future, we can delete\n // events and tasks at the same time.\n _this.$Component.$events = _.difference(_this.$Component.$events, components);\n _this.$Component.$tasks = _.difference(_this.$Component.$tasks, components);\n };\n\n /**\n * @function $save\n * @memberof Calendar.prototype\n * @desc Save the calendar properties to the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$save = function() {\n return Calendar.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $setActivation\n * @memberof Calendar.prototype\n * @desc Either activate or deactivate the calendar.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$setActivation = function() {\n return Calendar.$$resource.fetch(this.id, (this.active?'':'de') + 'activateFolder');\n };\n\n /**\n * @function $getComponent\n * @memberof Calendar.prototype\n * @desc Fetch a component attributes from the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$getComponent = function(componentId, recurrenceId) {\n return Calendar.$Component.$find(this.id, componentId, recurrenceId);\n };\n\n /**\n * @function $omit\n * @memberof Calendar.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Calendar instance\n */\n Calendar.prototype.$omit = function() {\n var calendar = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key[0] != '$') {\n calendar[key] = value;\n }\n });\n return calendar;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Component\n * @constructor\n * @param {object} futureComponentData - either an object literal or a promise\n */\n function Component(futureComponentData) {\n // Data is immediately available\n if (typeof futureComponentData.then !== 'function') {\n this.init(futureComponentData);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new component;\n // Get UID from the server.\n var newComponentData = Component.$$resource.newguid(this.pid);\n this.$unwrap(newComponentData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureComponentData);\n }\n }\n\n /**\n * @memberof Component\n * @desc The factory we'll use to register with Angular\n * @returns the Component constructor\n */\n Component.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Preferences', 'Gravatar', 'Resource', function($q, $timeout, $log, Settings, Preferences, Gravatar, Resource) {\n angular.extend(Component, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Preferences: Preferences,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n timeFormat: \"%H:%M\",\n // Filter parameters common to events and tasks\n $query: { value: '', search: 'title_Category_Location' },\n // Filter paramaters specific to events\n $queryEvents: { sort: 'start', asc: 1, filterpopup: 'view_next7' },\n // Filter parameters specific to tasks\n $queryTasks: { sort: 'status', asc: 1, filterpopup: 'view_incomplete' }\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n if (Preferences.settings.Calendar.EventsFilterState)\n Component.$queryEvents.filterpopup = Preferences.settings.Calendar.EventsFilterState;\n if (Preferences.settings.Calendar.TasksFilterState)\n Component.$queryTasks.filterpopup = Preferences.settings.Calendar.TasksFilterState;\n if (Preferences.settings.Calendar.EventsSortingState) {\n Component.$queryEvents.sort = Preferences.settings.Calendar.EventsSortingState[0];\n Component.$queryEvents.asc = parseInt(Preferences.settings.Calendar.EventsSortingState[1]);\n }\n if (Preferences.settings.Calendar.TasksSortingState) {\n Component.$queryTasks.sort = Preferences.settings.Calendar.TasksSortingState[0];\n Component.$queryTasks.asc = parseInt(Preferences.settings.Calendar.TasksSortingState[1]);\n }\n Component.$queryTasks.show_completed = parseInt(Preferences.settings.ShowCompletedTasks);\n // Initialize categories from user's defaults\n Component.$categories = Preferences.defaults.SOGoCalendarCategoriesColors;\n // Initialize time format from user's defaults\n if (Preferences.defaults.SOGoTimeFormat) {\n Component.timeFormat = Preferences.defaults.SOGoTimeFormat;\n }\n });\n\n return Component; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Component in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Component', Component.$factory);\n\n /**\n * @function $selectedCount\n * @memberof Component\n * @desc Return the number of events or tasks selected by the user.\n * @returns the number of selected events or tasks\n */\n Component.$selectedCount = function() {\n var count;\n\n count = 0;\n if (Component.$events) {\n count = (_.filter(Component.$events, function(event) { return event.selected; })).length;\n }\n if (Component.$tasks) {\n count = (_.filter(Component.$tasks, function(event) { return event.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $filter\n * @memberof Component\n * @desc Search for components matching some criterias\n * @param {string} type - either 'events' or 'tasks'\n * @param {object} [options] - additional options to the query\n * @returns a collection of Components instances\n */\n Component.$filter = function(type, options) {\n var _this = this,\n now = new Date(),\n day = now.getDate(),\n month = now.getMonth() + 1,\n year = now.getFullYear(),\n queryKey = '$query' + type.capitalize(),\n params = {\n day: '' + year + (month < 10?'0':'') + month + (day < 10?'0':'') + day,\n };\n\n return this.$Preferences.ready().then(function() {\n var futureComponentData,\n dirty = false,\n otherType;\n\n angular.extend(_this.$query, params);\n\n if (options) {\n _.each(_.keys(options), function(key) {\n // Query parameters common to events and tasks are compared\n dirty |= (_this.$query[key] && options[key] != Component.$query[key]);\n if (key == 'reload' && options[key])\n dirty = true;\n // Update either the common parameters or the type-specific parameters\n else if (angular.isDefined(_this.$query[key]))\n _this.$query[key] = options[key];\n else\n _this[queryKey][key] = options[key];\n });\n }\n\n // Perform query with both common and type-specific parameters\n futureComponentData = _this.$$resource.fetch(null, type + 'list',\n angular.extend(_this[queryKey], _this.$query));\n\n // Invalidate cached results of other type if $query has changed\n otherType = (type == 'tasks')? '$events' : '$tasks';\n if (dirty) {\n delete Component[otherType];\n Component.$log.debug('force reload of ' + otherType);\n }\n\n return _this.$unwrapCollection(type, futureComponentData);\n });\n };\n\n /**\n * @function $find\n * @desc Fetch a component from a specific calendar.\n * @param {string} calendarId - the calendar ID\n * @param {string} componentId - the component ID\n * @param {string} [occurrenceId] - the component ID\n * @see {@link Calendar.$getComponent}\n */\n Component.$find = function(calendarId, componentId, occurrenceId) {\n var futureComponentData, path = [calendarId, componentId];\n\n if (occurrenceId)\n path.push(occurrenceId);\n\n futureComponentData = this.$$resource.fetch(path.join('/'), 'view');\n\n return new Component(futureComponentData);\n };\n\n /**\n * @function filterCategories\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Component.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Component.$categories), function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @function saveSelectedList\n * @desc Save to the user's settings the currently selected list.\n * @param {string} componentType - either \"events\" or \"tasks\"\n * @returns a promise of the HTTP operation\n */\n Component.saveSelectedList = function(componentType) {\n return this.$$resource.post(null, 'saveSelectedList', { list: componentType + 'ListView' });\n };\n\n /**\n * @function $eventsBlocksForView\n * @desc Events blocks for a specific week\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} type - Date of any day of the desired period\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocksForView = function(view, date) {\n var viewAction, startDate, endDate, params;\n\n if (view == 'day') {\n viewAction = 'dayView';\n startDate = endDate = date;\n }\n else if (view == 'week') {\n viewAction = 'weekView';\n startDate = date.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.addDays(6);\n }\n else if (view == 'month') {\n viewAction = 'monthView';\n startDate = date;\n startDate.setDate(1);\n startDate = startDate.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.addDays(-1);\n endDate = endDate.endOfWeek();\n }\n return this.$eventsBlocks(viewAction, startDate, endDate);\n };\n\n /**\n * @function $eventsBlocks\n * @desc Events blocks for a specific view and period\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} startDate - period's start date\n * @param {Date} endDate - period's end date\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocks = function(view, startDate, endDate) {\n var params, futureComponentData, i,\n deferred = Component.$q.defer();\n\n params = { view: view.toLowerCase(), sd: startDate.getDayString(), ed: endDate.getDayString() };\n Component.$log.debug('eventsblocks ' + JSON.stringify(params, undefined, 2));\n futureComponentData = this.$$resource.fetch(null, 'eventsblocks', params);\n futureComponentData.then(function(data) {\n Component.$timeout(function() {\n var components = [], blocks = {};\n\n // Instantiate Component objects\n _.reduce(data.events, function(objects, eventData, i) {\n var componentData = _.object(data.eventsFields, eventData),\n start = new Date(componentData.c_startdate * 1000);\n componentData.hour = start.getHourString();\n objects.push(new Component(componentData));\n return objects;\n }, components);\n\n // Associate Component objects to blocks positions\n _.each(_.flatten(data.blocks), function(block) {\n block.component = components[block.nbr];\n });\n\n // Convert array of blocks to object with days as keys\n for (i = 0; i < data.blocks.length; i++) {\n blocks[startDate.getDayString()] = data.blocks[i];\n startDate.addDays(1);\n }\n\n Component.$log.debug('blocks ready (' + _.keys(blocks).length + ')');\n\n // Save the blocks to the object model\n Component.$blocks = blocks;\n\n deferred.resolve(blocks);\n });\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapCollection\n * @desc Unwrap a promise and instanciate new Component objects using received data.\n * @param {string} type - either 'events' or 'tasks'\n * @param {promise} futureComponentData - a promise of the components' metadata\n * @returns a promise of the HTTP operation\n */\n Component.$unwrapCollection = function(type, futureComponentData) {\n var _this = this,\n components = [];\n\n return futureComponentData.then(function(data) {\n return Component.$timeout(function() {\n var fields = _.invoke(data.fields, 'toLowerCase');\n\n // Instanciate Component objects\n _.reduce(data[type], function(components, componentData, i) {\n var data = _.object(fields, componentData);\n components.push(new Component(data));\n return components;\n }, components);\n\n Component.$log.debug('list of ' + type + ' ready (' + components.length + ')');\n\n // Save the list of components to the object model\n Component['$' + type] = components;\n\n return components;\n });\n });\n };\n\n /**\n * @function init\n * @memberof Component.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of component\n */\n Component.prototype.init = function(data) {\n var _this = this;\n\n this.categories = [];\n this.repeat = {};\n this.alarm = { action: 'display', quantity: 5, unit: 'MINUTES', reference: 'BEFORE', relation: 'START' };\n this.status = 'not-specified';\n angular.extend(this, data);\n\n Component.$Preferences.ready().then(function() {\n var type = (_this.type == 'appointment')? 'Events' : 'Tasks';\n\n // Set default values from user's defaults\n _this.classification = _this.classification ||\n Component.$Preferences.defaults['SOGoCalendar' + type + 'DefaultClassification'].toLowerCase();\n });\n\n if (this.startDate)\n this.start = new Date(this.startDate.substring(0,10) + ' ' + this.startDate.substring(11,16));\n else if (this.type == 'appointment') {\n this.start = new Date();\n }\n\n if (this.endDate)\n this.end = new Date(this.endDate.substring(0,10) + ' ' + this.endDate.substring(11,16));\n else if (this.type == 'appointment') {\n this.end = new Date();\n this.end.addHours(1);\n }\n\n if (this.dueDate)\n this.due = new Date(this.dueDate.substring(0,10) + ' ' + this.dueDate.substring(11,16));\n\n // Parse recurrence rule definition and initialize default values\n this.$isRecurrent = angular.isDefined(data.repeat);\n if (this.repeat.days) {\n var byDayMask = _.find(this.repeat.days, function(o) {\n return angular.isDefined(o.occurrence);\n });\n if (byDayMask)\n if (this.repeat.frequency == 'yearly')\n this.repeat.year = { byday: true };\n this.repeat.month = {\n type: 'byday',\n occurrence: byDayMask.occurrence.toString(),\n day: byDayMask.day\n };\n }\n else {\n this.repeat.days = [];\n }\n if (angular.isUndefined(this.repeat.frequency))\n this.repeat.frequency = 'never';\n if (angular.isUndefined(this.repeat.interval))\n this.repeat.interval = 1;\n if (angular.isUndefined(this.repeat.month))\n this.repeat.month = { occurrence: '1', day: 'SU', type: 'bymonthday' };\n if (angular.isUndefined(this.repeat.monthdays))\n // TODO: initialize this.repeat.monthdays with month day of start date\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n // TODO: initialize this.repeat.months with month of start date\n this.repeat.months = [];\n if (angular.isUndefined(this.repeat.year))\n this.repeat.year = {};\n if (this.repeat.count)\n this.repeat.end = 'count';\n else if (this.repeat.until) {\n this.repeat.end = 'until';\n this.repeat.until = this.repeat.until.substring(0,10).asDate();\n }\n else\n this.repeat.end = 'never';\n this.$hasCustomRepeat = this.hasCustomRepeat();\n\n if (this.isNew) {\n // Set default alarm\n Component.$Preferences.ready().then(function() {\n var units = { M: 'MINUTES', H: 'HOURS', D: 'DAYS', W: 'WEEKS' };\n var match = /-PT?([0-9]+)([MHDW])/.exec(Component.$Preferences.defaults.SOGoCalendarDefaultReminder);\n if (match) {\n _this.$hasAlarm = true;\n _this.alarm.quantity = parseInt(match[1]);\n _this.alarm.unit = units[match[2]];\n }\n });\n }\n else {\n this.$hasAlarm = angular.isDefined(data.alarm);\n }\n\n // Allow the component to be moved to a different calendar\n this.destinationCalendar = this.pid;\n\n if (this.organizer && this.organizer.email) {\n this.organizer.$image = Component.$gravatar(this.organizer.email, 32);\n }\n\n // Load freebusy of attendees\n this.freebusy = this.updateFreeBusyCoverage();\n\n if (this.attendees) {\n _.each(this.attendees, function(attendee) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n _this.updateFreeBusy(attendee);\n });\n }\n\n this.selected = false;\n };\n\n /**\n * @function hasCustomRepeat\n * @memberof Component.prototype\n * @desc Check if the component has a custom recurrence rule.\n * @returns true if the recurrence rule requires the full recurrence editor\n */\n Component.prototype.hasCustomRepeat = function() {\n var b = angular.isDefined(this.repeat) &&\n (this.repeat.interval > 1 ||\n this.repeat.days && this.repeat.days.length > 0 ||\n this.repeat.monthdays && this.repeat.monthdays.length > 0 ||\n this.repeat.months && this.repeat.months.length > 0);\n return b;\n };\n\n /**\n * @function isEditable\n * @memberof Component.prototype\n * @desc Check if the component is editable and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditable = function() {\n return (!this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isEditableOccurrence\n * @memberof Component.prototype\n * @desc Check if the component is editable and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditableOccurrence = function() {\n return (this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isInvitation\n * @memberof Component.prototype\n * @desc Check if the component an invitation and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitation = function() {\n return (!this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isInvitationOccurrence\n * @memberof Component.prototype\n * @desc Check if the component an invitation and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitationOccurrence = function() {\n return (this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isReadOnly\n * @memberof Component.prototype\n * @desc Check if the component is not editable and not an invitation\n * @returns true or false\n */\n Component.prototype.isReadOnly = function() {\n return (this.isReadOnly && !this.userHasRSVP);\n };\n\n /**\n * @function enablePercentComplete\n * @memberof Component.prototype\n * @desc Check if the percent completion should be enabled with respect to the\n * component's type and status.\n * @returns true if the percent completion should be displayed\n */\n Component.prototype.enablePercentComplete = function() {\n return (this.component = 'vtodo' &&\n this.status != 'not-specified' &&\n this.status != 'cancelled');\n };\n\n /**\n * @function coversFreeBusy\n * @memberof Component.prototype\n * @desc Check if a specific quarter matches the component's period\n * @returns true if the quarter covers the component's period\n */\n Component.prototype.coversFreeBusy = function(day, hour, quarter) {\n var b = (angular.isDefined(this.freebusy[day]) &&\n angular.isDefined(this.freebusy[day][hour]) &&\n this.freebusy[day][hour][quarter] == 1);\n return b;\n };\n\n /**\n * @function updateFreeBusyCoverage\n * @memberof Component.prototype\n * @desc Build a 15-minute-based representation of the component's period.\n * @returns an object literal hashed by days and hours and arrays of four 1's and 0's\n */\n Component.prototype.updateFreeBusyCoverage = function() {\n var _this = this, freebusy = {};\n\n if (this.start && this.end) {\n var roundedStart = new Date(this.start.getTime()),\n roundedEnd = new Date(this.end.getTime()),\n startQuarter = parseInt(roundedStart.getMinutes()/15 + 0.5),\n endQuarter = parseInt(roundedEnd.getMinutes()/15 + 0.5);\n roundedStart.setMinutes(15*startQuarter);\n roundedEnd.setMinutes(15*endQuarter);\n\n _.each(roundedStart.daysUpTo(roundedEnd), function(date, index) {\n var currentDay = date.getDate(),\n dayKey = date.getDayString(),\n hourKey;\n if (dayKey == _this.start.getDayString()) {\n hourKey = date.getHours().toString();\n freebusy[dayKey] = {};\n freebusy[dayKey][hourKey] = [];\n while (startQuarter > 0) {\n freebusy[dayKey][hourKey].push(0);\n startQuarter--;\n }\n }\n else {\n date = date.beginOfDay();\n freebusy[dayKey] = {};\n }\n while (date.getTime() < _this.end.getTime() &&\n date.getDate() == currentDay) {\n hourKey = date.getHours().toString();\n if (angular.isUndefined(freebusy[dayKey][hourKey]))\n freebusy[dayKey][hourKey] = [];\n freebusy[dayKey][hourKey].push(1);\n date.addMinutes(15);\n }\n });\n return freebusy;\n }\n };\n\n /**\n * @function updateFreeBusy\n * @memberof Component.prototype\n * @desc Update the freebusy information for the component's period for a specific attendee.\n * @param {Object} card - an Card object instance of the attendee\n */\n Component.prototype.updateFreeBusy = function(attendee) {\n var params, url, days;\n if (attendee.uid) {\n params =\n {\n sday: this.start.getDayString(),\n eday: this.end.getDayString()\n };\n url = ['..', '..', attendee.uid, 'freebusy.ifb'];\n days = _.map(this.start.daysUpTo(this.end), function(day) { return day.getDayString(); });\n\n if (angular.isUndefined(attendee.freebusy))\n attendee.freebusy = {};\n\n // Fetch FreeBusy information\n Component.$$resource.fetch(url.join('/'), 'ajaxRead', params).then(function(data) {\n _.each(days, function(day) {\n var hour;\n\n if (angular.isUndefined(attendee.freebusy[day]))\n attendee.freebusy[day] = {};\n\n if (angular.isUndefined(data[day]))\n data[day] = {};\n\n for (var i = 0; i <= 23; i++) {\n hour = i.toString();\n if (data[day][hour])\n attendee.freebusy[day][hour] = [\n data[day][hour][\"0\"],\n data[day][hour][\"15\"],\n data[day][hour][\"30\"],\n data[day][hour][\"45\"]\n ];\n else\n attendee.freebusy[day][hour] = [0, 0, 0, 0];\n }\n });\n });\n }\n };\n\n /**\n * @function getClassName\n * @memberof Component.prototype\n * @desc Return the component CSS class name based on its container (calendar) ID.\n * @param {string} [base] - the prefix to add to the class name (defaults to \"fg\")\n * @returns a string representing the foreground CSS class name\n */\n Component.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + (this.destinationCalendar || this.c_folder);\n };\n\n /**\n * @function addAttendee\n * @memberof Component.prototype\n * @desc Add an attendee and fetch his freebusy info.\n * @param {Object} card - an Card object instance to be added to the attendees list\n */\n Component.prototype.addAttendee = function(card) {\n var attendee, url, params;\n if (card) {\n attendee = {\n name: card.c_cn,\n email: card.$preferredEmail(),\n role: 'req-participant',\n status: 'needs-action',\n uid: card.c_uid\n };\n if (!_.find(this.attendees, function(o) {\n return o.email == attendee.email;\n })) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n if (this.attendees)\n this.attendees.push(attendee);\n else\n this.attendees = [attendee];\n this.updateFreeBusy(attendee);\n }\n }\n };\n\n /**\n * @function hasAttendee\n * @memberof Component.prototype\n * @desc Verify if one of the email addresses of a Card instance matches an attendee.\n * @param {Object} card - an Card object instance\n * @returns true if the Card matches an attendee\n */\n Component.prototype.hasAttendee = function(card) {\n var attendee = _.find(this.attendees, function(attendee) {\n return _.find(card.emails, function(email) {\n return email.value == attendee.email;\n });\n });\n return angular.isDefined(attendee);\n };\n\n /**\n * @function canRemindAttendeesByEmail\n * @memberof Component.prototype\n * @desc Verify if the component's reminder must be send by email and if it has at least one attendee.\n * @returns true if attendees can receive a reminder by email\n */\n Component.prototype.canRemindAttendeesByEmail = function() {\n return this.alarm.action == 'email' &&\n !this.isReadOnly &&\n this.attendees && this.attendees.length > 0;\n };\n\n /**\n * @function addAttachUrl\n * @memberof Component.prototype\n * @desc Add a new attach URL if not already defined\n * @param {string} attachUrl - the URL\n * @returns the number of values in the list of attach URLs\n */\n Component.prototype.addAttachUrl = function(attachUrl) {\n if (angular.isUndefined(this.attachUrls)) {\n this.attachUrls = [{value: attachUrl}];\n }\n else {\n for (var i = 0; i < this.attachUrls.length; i++) {\n if (this.attachUrls[i].value == attachUrl) {\n break;\n }\n }\n if (i == this.attachUrls.length)\n this.attachUrls.push({value: attachUrl});\n }\n return this.attachUrls.length - 1;\n };\n\n /**\n * @function deleteAttachUrl\n * @memberof Component.prototype\n * @desc Remove an attach URL\n * @param {number} index - the URL index in the list of attach URLs\n */\n Component.prototype.deleteAttachUrl = function(index) {\n if (index > -1 && this.attachUrls.length > index) {\n this.attachUrls.splice(index, 1);\n }\n };\n\n /**\n * @function $addDueDate\n * @memberof Component.prototype\n * @desc Add a due date\n */\n Component.prototype.$addDueDate = function() {\n this.due = new Date();\n this.dueDate = this.due.toISOString();\n };\n\n /**\n * @function $deleteDueDate\n * @memberof Component.prototype\n * @desc Delete a due date\n */\n Component.prototype.$deleteDueDate = function() {\n delete this.due;\n delete this.dueDate;\n };\n\n /**\n * @function $addStartDate\n * @memberof Component.prototype\n * @desc Add a start date\n */\n Component.prototype.$addStartDate = function() {\n this.start = new Date();\n };\n\n /**\n * @function $deleteStartDate\n * @memberof Component.prototype\n * @desc Delete a start date\n */\n Component.prototype.$deleteStartDate = function() {\n delete this.start;\n delete this.startDate;\n };\n\n /**\n * @function $reset\n * @memberof Component.prototype\n * @desc Reset the original state the component's data.\n */\n Component.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n this.init(this.$shadowData);\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function reply\n * @memberof Component.prototype\n * @desc Reply to an invitation.\n * @returns a promise of the HTTP operation\n */\n Component.prototype.$reply = function() {\n var _this = this, data, path = [this.pid, this.id];\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n data = {\n reply: this.reply,\n delegatedTo: this.delegatedTo,\n alarm: this.$hasAlarm? this.alarm : {}\n };\n\n return Component.$$resource.save(path.join('/'), data, { action: 'rsvpAppointment' })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $save\n * @memberof Component.prototype\n * @desc Save the component to the server.\n */\n Component.prototype.$save = function() {\n var _this = this, options, path = [this.pid, this.id];\n\n if (this.isNew)\n options = { action: 'saveAs' + this.type.capitalize() };\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n return Component.$$resource.save(path.join('/'), this.$omit(), options)\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof Component.prototype\n * @desc Unwrap a promise.\n * @param {promise} futureComponentData - a promise of some of the Component's data\n */\n Component.prototype.$unwrap = function(futureComponentData) {\n var _this = this;\n\n // Expose the promise\n this.$futureComponentData = futureComponentData;\n\n // Resolve the promise\n this.$futureComponentData.then(function(data) {\n _this.init(data);\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Component.$log.error(_this.error);\n });\n };\n\n /**\n * @function $omit\n * @memberof Component.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Component instance\n */\n Component.prototype.$omit = function() {\n var component = {}, date;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n component[key] = angular.copy(value);\n }\n });\n\n // Format dates and times\n component.startDate = component.start ? formatDate(component.start) : '';\n component.startTime = component.start ? formatTime(component.start) : '';\n component.endDate = component.end ? formatDate(component.end) : '';\n component.endTime = component.end ? formatTime(component.end) : '';\n component.dueDate = component.due ? formatDate(component.due) : '';\n component.dueTime = component.due ? formatTime(component.due) : '';\n\n // Update recurrence definition depending on selections\n if (this.$hasCustomRepeat) {\n if (this.repeat.frequency == 'monthly' && this.repeat.month.type && this.repeat.month.type == 'byday' ||\n this.repeat.frequency == 'yearly' && this.repeat.year.byday) {\n // BYDAY mask for a monthly or yearly recurrence\n delete component.repeat.monthdays;\n component.repeat.days = [{ day: this.repeat.month.day, occurrence: this.repeat.month.occurrence.toString() }];\n }\n else if (this.repeat.month.type) {\n // montly recurrence by month days or yearly by month\n delete component.repeat.days;\n }\n }\n else if (this.repeat.frequency) {\n component.repeat = { frequency: this.repeat.frequency };\n }\n if (this.repeat.frequency) {\n if (this.repeat.end == 'until' && this.repeat.until)\n component.repeat.until = this.repeat.until.stringWithSeparator('-');\n else if (this.repeat.end == 'count' && this.repeat.count)\n component.repeat.count = this.repeat.count;\n else {\n delete component.repeat.until;\n delete component.repeat.count;\n }\n }\n else {\n delete component.repeat;\n }\n\n if (this.$hasAlarm) {\n if (this.alarm.action && this.alarm.action == 'email' &&\n !(this.attendees && this.attendees.length > 0)) {\n // No attendees; email reminder must be sent to organizer only\n this.alarm.attendees = 0;\n this.alarm.organizer = 1;\n }\n }\n else {\n component.alarm = {};\n }\n\n function formatTime(date) {\n var hours = date.getHours();\n if (hours < 10) hours = '0' + hours;\n\n var minutes = date.getMinutes();\n if (minutes < 10) minutes = '0' + minutes;\n return hours + ':' + minutes;\n }\n\n function formatDate(date) {\n var year = date.getYear();\n if (year < 1000) year += 1900;\n\n var month = '' + (date.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n\n var day = '' + date.getDate();\n if (day.length == 1)\n day = '0' + day;\n\n return year + '-' + month + '-' + day;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file +{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Calendar.service.js","Scheduler/Component.service.js"],"names":["Calendar","futureCalendarData","this","init","name","id","newCalendarData","$$resource","create","angular","extend","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","Resource","Component","Acl","activeUser","$Component","module","e","factory","$add","calendar","list","sibling","i","isWebCalendar","$webcalendars","isSubscription","$subscriptions","$calendars","_","find","o","localeCompare","indexOf","pluck","splice","$findAll","data","_this","forEach","push","union","$get","$subscribe","uid","path","userResource","fetch","then","calendarData","$addWebCalendar","url","d","defer","urls","webCalendarURL","reject","post","isEditable","isRemote","owner","login","debug","JSON","stringify","undefined","resolve","promise","prototype","isOwned","isSuperUser","getClassName","base","isUndefined","$rename","$save","$delete","remove","status","$deleteComponents","components","calendars","component","isDefined","c_folder","c_name","uids","$events","difference","$tasks","save","$omit","$setActivation","active","$getComponent","componentId","recurrenceId","$find","value","key","futureComponentData","pid","newComponentData","newguid","$unwrap","isNew","Preferences","Gravatar","$Preferences","$gravatar","baseURL","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","$refreshTimeout","ready","settings","EventsFilterState","TasksFilterState","EventsSortingState","parseInt","TasksSortingState","show_completed","ShowCompletedTasks","$categories","defaults","SOGoCalendarCategoriesColors","SOGoTimeFormat","$selectedCount","count","filter","event","selected","length","task","$startRefreshTimeout","type","cancel","refreshViewCheck","SOGoRefreshViewCheck","f","bind","$filter","timeInterval","options","now","Date","day","getDate","month","getMonth","year","getFullYear","queryKey","capitalize","params","otherType","dirty","each","keys","$unwrapCollection","calendarId","occurrenceId","join","filterCategories","query","re","RegExp","category","saveSelectedList","componentType","$eventsBlocksForView","view","date","viewAction","startDate","endDate","beginOfWeek","setTime","getTime","addDays","setDate","setMonth","endOfWeek","$eventsBlocks","deferred","toLowerCase","sd","getDayString","ed","blocks","reduce","events","objects","eventData","componentData","object","eventsFields","start","c_startdate","hour","getHourString","flatten","block","nbr","$blocks","fields","invoke","categories","repeat","alarm","action","quantity","unit","reference","relation","classification","substring","end","addHours","dueDate","due","$isRecurrent","days","byDayMask","occurrence","frequency","byday","toString","interval","monthdays","months","until","asDate","$hasCustomRepeat","hasCustomRepeat","units","M","H","D","W","match","exec","SOGoCalendarDefaultReminder","$hasAlarm","destinationCalendar","organizer","email","$image","freebusy","updateFreeBusyCoverage","attendees","attendee","image","updateFreeBusy","b","isReadOnly","isEditableOccurrence","isInvitation","userHasRSVP","isInvitationOccurrence","enablePercentComplete","coversFreeBusy","quarter","roundedStart","roundedEnd","startQuarter","getMinutes","endQuarter","setMinutes","daysUpTo","index","hourKey","currentDay","dayKey","getHours","beginOfDay","addMinutes","sday","eday","map","addAttendee","card","c_cn","$preferredEmail","role","c_uid","hasAttendee","emails","canRemindAttendeesByEmail","addAttachUrl","attachUrl","attachUrls","deleteAttachUrl","$addDueDate","toISOString","$deleteDueDate","$addStartDate","$deleteStartDate","$reset","$shadowData","$reply","reply","delegatedTo","$futureComponentData","isError","error","formatTime","hours","minutes","formatDate","getYear","copy","startTime","endTime","dueTime","stringWithSeparator"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Calendar\n * @constructor\n * @param {object} futureCalendarData - either an object literal or a promise\n */\n function Calendar(futureCalendarData) {\n // Data is immediately available\n this.init(futureCalendarData);\n if (this.name && !this.id) {\n // Create a new calendar on the server\n var newCalendarData = Calendar.$$resource.create('createFolder', this.name);\n angular.extend(this, newCalendarData);\n }\n if (this.id) {\n this.$acl = new Calendar.$$Acl('Calendar/' + this.id);\n }\n }\n\n /**\n * @memberof Calendar\n * @desc The factory we'll use to register with Angular\n * @returns the Calendar constructor\n */\n Calendar.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Component', 'Acl', function($q, $timeout, $log, Settings, Resource, Component, Acl) {\n angular.extend(Calendar, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $Component: Component,\n $$Acl: Acl,\n activeUser: Settings.activeUser()\n });\n\n return Calendar; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Calendar in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Calendar', Calendar.$factory);\n\n /**\n * @memberof Calendar\n * @desc Add a new calendar to the static list of calendars\n * @param {Calendar} calendar - an Calendar object instance\n */\n Calendar.$add = function(calendar) {\n // Insert new calendar at proper index\n var list, sibling, i;\n\n if (calendar.isWebCalendar)\n list = this.$webcalendars;\n else if (calendar.isSubscription)\n list = this.$subscriptions;\n else\n list = this.$calendars;\n\n sibling = _.find(list, function(o) {\n return (o.id != 'personal' &&\n o.name.localeCompare(calendar.name) === 1);\n });\n i = sibling ? _.indexOf(_.pluck(list, 'id'), sibling.id) : 1;\n list.splice(i, 0, calendar);\n };\n\n /**\n * @memberof Calendar\n * @desc Set or get the list of calendars. Will instanciate a new Calendar object for each item.\n * @param {object[]} [data] - the metadata of the calendars\n * @returns the list of calendars\n */\n Calendar.$findAll = function(data) {\n var _this = this;\n if (data) {\n this.$calendars = [];\n this.$subscriptions = [];\n this.$webcalendars = [];\n // Instanciate Calendar objects\n angular.forEach(data, function(o, i) {\n var calendar = new Calendar(o);\n if (calendar.isWebCalendar)\n _this.$webcalendars.push(calendar);\n else if (calendar.isSubscription)\n _this.$subscriptions.push(calendar);\n else\n _this.$calendars.push(calendar);\n });\n }\n return _.union(this.$calendars, this.$subscriptions, this.$webcalendars);\n };\n\n /**\n * @memberof Calendar\n * @desc Find a calendar among local instances (personal calendars, subscriptions and Web calendars).\n * @param {string} id - the calendar ID\n * @returns an object literal of the matching Calendar instance\n */\n Calendar.$get = function(id) {\n var calendar;\n\n calendar = _.find(Calendar.$calendars, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$subscriptions, function(o) { return o.id == id; });\n if (!calendar)\n calendar = _.find(Calendar.$webcalendars, function(o) { return o.id == id; });\n\n return calendar;\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to another user's calendar and add it to the list of calendars.\n * @param {string} uid - user id\n * @param {string} path - path of folder for specified user\n * @returns a promise of the HTTP query result\n */\n Calendar.$subscribe = function(uid, path) {\n var _this = this;\n return Calendar.$$resource.userResource(uid).fetch(path, 'subscribe').then(function(calendarData) {\n var calendar = new Calendar(calendarData);\n if (!_.find(_this.$subscriptions, function(o) {\n return o.id == calendarData.id;\n })) {\n Calendar.$add(calendar);\n }\n return calendar;\n });\n };\n\n /**\n * @memberOf Calendar\n * @desc Subscribe to a remote Web calendar\n * @param {string} url - URL of .ics file\n * @returns a promise of the HTTP query result\n */\n Calendar.$addWebCalendar = function(url) {\n var _this = this,\n d = Calendar.$q.defer();\n\n if (_.find(_this.$webcalendars, function(o) {\n return o.urls.webCalendarURL == url;\n })) {\n // Already subscribed\n d.reject();\n }\n else {\n Calendar.$$resource.post(null, 'addWebCalendar', { url: url }).then(function(calendarData) {\n angular.extend(calendarData, {\n isWebCalendar: true,\n isEditable: true,\n isRemote: false,\n owner: Calendar.activeUser.login,\n urls: { webCalendarURL: url }\n });\n var calendar = new Calendar(calendarData);\n Calendar.$add(calendar);\n Calendar.$$resource.fetch(calendar.id, 'reload').then(function(data) {\n // TODO: show a toast of the reload status\n Calendar.$log.debug(JSON.stringify(data, undefined, 2));\n });\n d.resolve();\n }, function() {\n d.reject();\n });\n }\n\n return d.promise;\n };\n\n /**\n * @function init\n * @memberof Calendar.prototype\n * @desc Extend instance with new data and compute additional attributes.\n * @param {object} data - attributes of calendar\n */\n Calendar.prototype.init = function(data) {\n angular.extend(this, data);\n // Add 'isOwned' and 'isSubscription' attributes based on active user (TODO: add it server-side?)\n this.isOwned = Calendar.activeUser.isSuperUser || this.owner == Calendar.activeUser.login;\n this.isSubscription = !this.isRemote && this.owner != Calendar.activeUser.login;\n };\n\n /**\n * @function getClassName\n * @memberof Calendar.prototype\n * @desc Return the calendar CSS class name based on its ID.\n * @returns a string representing the foreground CSS class name\n */\n Calendar.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + this.id;\n };\n\n /**\n * @function $rename\n * @memberof Calendar.prototype\n * @desc Rename the calendar and keep the list sorted\n * @param {string} name - the new name\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$rename = function(name) {\n var i = _.indexOf(_.pluck(Calendar.$calendars, 'id'), this.id);\n this.name = name;\n Calendar.$calendars.splice(i, 1);\n Calendar.$add(this);\n return this.$save();\n };\n\n /**\n * @function $delete\n * @memberof Calendar.prototype\n * @desc Delete the calendar from the server and the static list of calendars.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$delete = function() {\n var _this = this,\n d = Calendar.$q.defer(),\n list,\n promise;\n\n if (this.isSubscription) {\n promise = Calendar.$$resource.fetch(this.id, 'unsubscribe');\n list = Calendar.$subscriptions;\n }\n else {\n promise = Calendar.$$resource.remove(this.id);\n if (this.isWebCalendar)\n list = Calendar.$webcalendars;\n else\n list = Calendar.$calendars;\n }\n\n promise.then(function() {\n var i = _.indexOf(_.pluck(list, 'id'), _this.id);\n list.splice(i, 1);\n d.resolve();\n }, function(data, status) {\n d.reject(data);\n });\n return d.promise;\n };\n\n /**\n * @function $deleteComponents\n * @memberof Calendar\n * @desc Delete multiple components from calendar.\n * @return a promise of the HTTP operation\n */\n Calendar.$deleteComponents = function(components) {\n\n // We create a c_folder -> event hash\n var calendars = {}, _this = this;\n\n _.forEach(components, function(component) {\n if (!angular.isDefined(calendars[component.c_folder]))\n calendars[component.c_folder] = [];\n\n calendars[component.c_folder].push(component.c_name);\n });\n\n _.forEach(calendars, function(uids, c_folder) {\n Calendar.$$resource.post(c_folder, 'batchDelete', {uids: uids});\n });\n\n // We slice both arrays - might be useful if in the future, we can delete\n // events and tasks at the same time.\n _this.$Component.$events = _.difference(_this.$Component.$events, components);\n _this.$Component.$tasks = _.difference(_this.$Component.$tasks, components);\n };\n\n /**\n * @function $save\n * @memberof Calendar.prototype\n * @desc Save the calendar properties to the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$save = function() {\n return Calendar.$$resource.save(this.id, this.$omit()).then(function(data) {\n return data;\n });\n };\n\n /**\n * @function $setActivation\n * @memberof Calendar.prototype\n * @desc Either activate or deactivate the calendar.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$setActivation = function() {\n return Calendar.$$resource.fetch(this.id, (this.active?'':'de') + 'activateFolder');\n };\n\n /**\n * @function $getComponent\n * @memberof Calendar.prototype\n * @desc Fetch a component attributes from the server.\n * @returns a promise of the HTTP operation\n */\n Calendar.prototype.$getComponent = function(componentId, recurrenceId) {\n return Calendar.$Component.$find(this.id, componentId, recurrenceId);\n };\n\n /**\n * @function $omit\n * @memberof Calendar.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Calendar instance\n */\n Calendar.prototype.$omit = function() {\n var calendar = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' &&\n key[0] != '$') {\n calendar[key] = value;\n }\n });\n return calendar;\n };\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Component\n * @constructor\n * @param {object} futureComponentData - either an object literal or a promise\n */\n function Component(futureComponentData) {\n // Data is immediately available\n if (typeof futureComponentData.then !== 'function') {\n this.init(futureComponentData);\n if (this.pid && !this.id) {\n // Prepare for the creation of a new component;\n // Get UID from the server.\n var newComponentData = Component.$$resource.newguid(this.pid);\n this.$unwrap(newComponentData);\n this.isNew = true;\n }\n }\n else {\n // The promise will be unwrapped first\n this.$unwrap(futureComponentData);\n }\n }\n\n /**\n * @memberof Component\n * @desc The factory we'll use to register with Angular\n * @returns the Component constructor\n */\n Component.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Preferences', 'Gravatar', 'Resource', function($q, $timeout, $log, Settings, Preferences, Gravatar, Resource) {\n angular.extend(Component, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $Preferences: Preferences,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.baseURL(), Settings.activeUser()),\n timeFormat: \"%H:%M\",\n // Filter parameters common to events and tasks\n $query: { value: '', search: 'title_Category_Location' },\n // Filter paramaters specific to events\n $queryEvents: { sort: 'start', asc: 1, filterpopup: 'view_next7' },\n // Filter parameters specific to tasks\n $queryTasks: { sort: 'status', asc: 1, filterpopup: 'view_incomplete' },\n $refreshTimeout: null\n });\n Preferences.ready().then(function() {\n // Initialize filter parameters from user's settings\n if (Preferences.settings.Calendar.EventsFilterState)\n Component.$queryEvents.filterpopup = Preferences.settings.Calendar.EventsFilterState;\n if (Preferences.settings.Calendar.TasksFilterState)\n Component.$queryTasks.filterpopup = Preferences.settings.Calendar.TasksFilterState;\n if (Preferences.settings.Calendar.EventsSortingState) {\n Component.$queryEvents.sort = Preferences.settings.Calendar.EventsSortingState[0];\n Component.$queryEvents.asc = parseInt(Preferences.settings.Calendar.EventsSortingState[1]);\n }\n if (Preferences.settings.Calendar.TasksSortingState) {\n Component.$queryTasks.sort = Preferences.settings.Calendar.TasksSortingState[0];\n Component.$queryTasks.asc = parseInt(Preferences.settings.Calendar.TasksSortingState[1]);\n }\n Component.$queryTasks.show_completed = parseInt(Preferences.settings.ShowCompletedTasks);\n // Initialize categories from user's defaults\n Component.$categories = Preferences.defaults.SOGoCalendarCategoriesColors;\n // Initialize time format from user's defaults\n if (Preferences.defaults.SOGoTimeFormat) {\n Component.timeFormat = Preferences.defaults.SOGoTimeFormat;\n }\n });\n\n return Component; // return constructor\n }];\n\n /**\n * @module SOGo.SchedulerUI\n * @desc Factory registration of Component in Angular module.\n */\n try {\n angular.module('SOGo.SchedulerUI');\n }\n catch(e) {\n angular.module('SOGo.SchedulerUI', ['SOGo.Common']);\n }\n angular.module('SOGo.SchedulerUI')\n .factory('Component', Component.$factory);\n\n /**\n * @function $selectedCount\n * @memberof Component\n * @desc Return the number of events or tasks selected by the user.\n * @returns the number of selected events or tasks\n */\n Component.$selectedCount = function() {\n var count;\n\n count = 0;\n if (Component.$events) {\n count = (_.filter(Component.$events, function(event) { return event.selected; })).length;\n }\n if (Component.$tasks) {\n count = (_.filter(Component.$tasks, function(task) { return task.selected; })).length;\n }\n return count;\n };\n\n /**\n * @function $startRefreshTimeout\n * @memberof Component\n * @desc Starts the refresh timeout for the current selected component type, for all calendars\n */\n Component.$startRefreshTimeout = function(type) {\n var _this = this;\n\n if (Component.$refreshTimeout)\n Component.$timeout.cancel(Component.$refreshTimeout);\n\n Component.$Preferences.ready().then(function() {\n // Restart the refresh timer, if needed\n var refreshViewCheck = Component.$Preferences.defaults.SOGoRefreshViewCheck;\n if (refreshViewCheck && refreshViewCheck != 'manually') {\n var f = angular.bind(_this, Component.$filter, type);\n Component.$refreshTimeout = Component.$timeout(f, refreshViewCheck.timeInterval()*1000);\n }\n });\n };\n\n /**\n * @function $filter\n * @memberof Component\n * @desc Search for components matching some criterias\n * @param {string} type - either 'events' or 'tasks'\n * @param {object} [options] - additional options to the query\n * @returns a collection of Components instances\n */\n Component.$filter = function(type, options) {\n var _this = this,\n now = new Date(),\n day = now.getDate(),\n month = now.getMonth() + 1,\n year = now.getFullYear(),\n queryKey = '$query' + type.capitalize(),\n params = {\n day: '' + year + (month < 10?'0':'') + month + (day < 10?'0':'') + day,\n };\n\n Component.$startRefreshTimeout(type);\n\n return this.$Preferences.ready().then(function() {\n var futureComponentData,\n dirty = false,\n otherType;\n\n angular.extend(_this.$query, params);\n\n if (options) {\n _.each(_.keys(options), function(key) {\n // Query parameters common to events and tasks are compared\n dirty |= (_this.$query[key] && options[key] != Component.$query[key]);\n if (key == 'reload' && options[key])\n dirty = true;\n // Update either the common parameters or the type-specific parameters\n else if (angular.isDefined(_this.$query[key]))\n _this.$query[key] = options[key];\n else\n _this[queryKey][key] = options[key];\n });\n }\n\n // Perform query with both common and type-specific parameters\n futureComponentData = _this.$$resource.fetch(null, type + 'list',\n angular.extend(_this[queryKey], _this.$query));\n\n // Invalidate cached results of other type if $query has changed\n otherType = (type == 'tasks')? '$events' : '$tasks';\n if (dirty) {\n delete Component[otherType];\n Component.$log.debug('force reload of ' + otherType);\n }\n\n return _this.$unwrapCollection(type, futureComponentData);\n });\n };\n\n /**\n * @function $find\n * @desc Fetch a component from a specific calendar.\n * @param {string} calendarId - the calendar ID\n * @param {string} componentId - the component ID\n * @param {string} [occurrenceId] - the component ID\n * @see {@link Calendar.$getComponent}\n */\n Component.$find = function(calendarId, componentId, occurrenceId) {\n var futureComponentData, path = [calendarId, componentId];\n\n if (occurrenceId)\n path.push(occurrenceId);\n\n futureComponentData = this.$$resource.fetch(path.join('/'), 'view');\n\n return new Component(futureComponentData);\n };\n\n /**\n * @function filterCategories\n * @desc Search for categories matching some criterias\n * @param {string} search - the search string to match\n * @returns a collection of strings\n */\n Component.filterCategories = function(query) {\n var re = new RegExp(query, 'i');\n return _.filter(_.keys(Component.$categories), function(category) {\n return category.search(re) != -1;\n });\n };\n\n /**\n * @function saveSelectedList\n * @desc Save to the user's settings the currently selected list.\n * @param {string} componentType - either \"events\" or \"tasks\"\n * @returns a promise of the HTTP operation\n */\n Component.saveSelectedList = function(componentType) {\n return this.$$resource.post(null, 'saveSelectedList', { list: componentType + 'ListView' });\n };\n\n /**\n * @function $eventsBlocksForView\n * @desc Events blocks for a specific week\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} type - Date of any day of the desired period\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocksForView = function(view, date) {\n var viewAction, startDate, endDate, params;\n\n if (view == 'day') {\n viewAction = 'dayView';\n startDate = endDate = date;\n }\n else if (view == 'week') {\n viewAction = 'weekView';\n startDate = date.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.addDays(6);\n }\n else if (view == 'month') {\n viewAction = 'monthView';\n startDate = date;\n startDate.setDate(1);\n startDate = startDate.beginOfWeek();\n endDate = new Date();\n endDate.setTime(startDate.getTime());\n endDate.setMonth(endDate.getMonth() + 1);\n endDate.addDays(-1);\n endDate = endDate.endOfWeek();\n }\n return this.$eventsBlocks(viewAction, startDate, endDate);\n };\n\n /**\n * @function $eventsBlocks\n * @desc Events blocks for a specific view and period\n * @param {string} view - Either 'day' or 'week'\n * @param {Date} startDate - period's start date\n * @param {Date} endDate - period's end date\n * @returns a promise of a collection of objects describing the events blocks\n */\n Component.$eventsBlocks = function(view, startDate, endDate) {\n var params, futureComponentData, i,\n deferred = Component.$q.defer();\n\n params = { view: view.toLowerCase(), sd: startDate.getDayString(), ed: endDate.getDayString() };\n Component.$log.debug('eventsblocks ' + JSON.stringify(params, undefined, 2));\n futureComponentData = this.$$resource.fetch(null, 'eventsblocks', params);\n futureComponentData.then(function(data) {\n Component.$timeout(function() {\n var components = [], blocks = {};\n\n // Instantiate Component objects\n _.reduce(data.events, function(objects, eventData, i) {\n var componentData = _.object(data.eventsFields, eventData),\n start = new Date(componentData.c_startdate * 1000);\n componentData.hour = start.getHourString();\n objects.push(new Component(componentData));\n return objects;\n }, components);\n\n // Associate Component objects to blocks positions\n _.each(_.flatten(data.blocks), function(block) {\n block.component = components[block.nbr];\n });\n\n // Convert array of blocks to object with days as keys\n for (i = 0; i < data.blocks.length; i++) {\n blocks[startDate.getDayString()] = data.blocks[i];\n startDate.addDays(1);\n }\n\n Component.$log.debug('blocks ready (' + _.keys(blocks).length + ')');\n\n // Save the blocks to the object model\n Component.$blocks = blocks;\n\n deferred.resolve(blocks);\n });\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function $unwrapCollection\n * @desc Unwrap a promise and instanciate new Component objects using received data.\n * @param {string} type - either 'events' or 'tasks'\n * @param {promise} futureComponentData - a promise of the components' metadata\n * @returns a promise of the HTTP operation\n */\n Component.$unwrapCollection = function(type, futureComponentData) {\n var _this = this,\n components = [];\n\n return futureComponentData.then(function(data) {\n return Component.$timeout(function() {\n var fields = _.invoke(data.fields, 'toLowerCase');\n\n // Instanciate Component objects\n _.reduce(data[type], function(components, componentData, i) {\n var data = _.object(fields, componentData);\n components.push(new Component(data));\n return components;\n }, components);\n\n Component.$log.debug('list of ' + type + ' ready (' + components.length + ')');\n\n // Save the list of components to the object model\n Component['$' + type] = components;\n\n return components;\n });\n });\n };\n\n /**\n * @function init\n * @memberof Component.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of component\n */\n Component.prototype.init = function(data) {\n var _this = this;\n\n this.categories = [];\n this.repeat = {};\n this.alarm = { action: 'display', quantity: 5, unit: 'MINUTES', reference: 'BEFORE', relation: 'START' };\n this.status = 'not-specified';\n angular.extend(this, data);\n\n Component.$Preferences.ready().then(function() {\n var type = (_this.type == 'appointment')? 'Events' : 'Tasks';\n\n // Set default values from user's defaults\n _this.classification = _this.classification ||\n Component.$Preferences.defaults['SOGoCalendar' + type + 'DefaultClassification'].toLowerCase();\n });\n\n if (this.startDate)\n this.start = new Date(this.startDate.substring(0,10) + ' ' + this.startDate.substring(11,16));\n else if (this.type == 'appointment') {\n this.start = new Date();\n }\n\n if (this.endDate)\n this.end = new Date(this.endDate.substring(0,10) + ' ' + this.endDate.substring(11,16));\n else if (this.type == 'appointment') {\n this.end = new Date();\n this.end.addHours(1);\n }\n\n if (this.dueDate)\n this.due = new Date(this.dueDate.substring(0,10) + ' ' + this.dueDate.substring(11,16));\n\n // Parse recurrence rule definition and initialize default values\n this.$isRecurrent = angular.isDefined(data.repeat);\n if (this.repeat.days) {\n var byDayMask = _.find(this.repeat.days, function(o) {\n return angular.isDefined(o.occurrence);\n });\n if (byDayMask)\n if (this.repeat.frequency == 'yearly')\n this.repeat.year = { byday: true };\n this.repeat.month = {\n type: 'byday',\n occurrence: byDayMask.occurrence.toString(),\n day: byDayMask.day\n };\n }\n else {\n this.repeat.days = [];\n }\n if (angular.isUndefined(this.repeat.frequency))\n this.repeat.frequency = 'never';\n if (angular.isUndefined(this.repeat.interval))\n this.repeat.interval = 1;\n if (angular.isUndefined(this.repeat.month))\n this.repeat.month = { occurrence: '1', day: 'SU', type: 'bymonthday' };\n if (angular.isUndefined(this.repeat.monthdays))\n // TODO: initialize this.repeat.monthdays with month day of start date\n this.repeat.monthdays = [];\n if (angular.isUndefined(this.repeat.months))\n // TODO: initialize this.repeat.months with month of start date\n this.repeat.months = [];\n if (angular.isUndefined(this.repeat.year))\n this.repeat.year = {};\n if (this.repeat.count)\n this.repeat.end = 'count';\n else if (this.repeat.until) {\n this.repeat.end = 'until';\n this.repeat.until = this.repeat.until.substring(0,10).asDate();\n }\n else\n this.repeat.end = 'never';\n this.$hasCustomRepeat = this.hasCustomRepeat();\n\n if (this.isNew) {\n // Set default alarm\n Component.$Preferences.ready().then(function() {\n var units = { M: 'MINUTES', H: 'HOURS', D: 'DAYS', W: 'WEEKS' };\n var match = /-PT?([0-9]+)([MHDW])/.exec(Component.$Preferences.defaults.SOGoCalendarDefaultReminder);\n if (match) {\n _this.$hasAlarm = true;\n _this.alarm.quantity = parseInt(match[1]);\n _this.alarm.unit = units[match[2]];\n }\n });\n }\n else {\n this.$hasAlarm = angular.isDefined(data.alarm);\n }\n\n // Allow the component to be moved to a different calendar\n this.destinationCalendar = this.pid;\n\n if (this.organizer && this.organizer.email) {\n this.organizer.$image = Component.$gravatar(this.organizer.email, 32);\n }\n\n // Load freebusy of attendees\n this.freebusy = this.updateFreeBusyCoverage();\n\n if (this.attendees) {\n _.each(this.attendees, function(attendee) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n _this.updateFreeBusy(attendee);\n });\n }\n\n this.selected = false;\n };\n\n /**\n * @function hasCustomRepeat\n * @memberof Component.prototype\n * @desc Check if the component has a custom recurrence rule.\n * @returns true if the recurrence rule requires the full recurrence editor\n */\n Component.prototype.hasCustomRepeat = function() {\n var b = angular.isDefined(this.repeat) &&\n (this.repeat.interval > 1 ||\n this.repeat.days && this.repeat.days.length > 0 ||\n this.repeat.monthdays && this.repeat.monthdays.length > 0 ||\n this.repeat.months && this.repeat.months.length > 0);\n return b;\n };\n\n /**\n * @function isEditable\n * @memberof Component.prototype\n * @desc Check if the component is editable and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditable = function() {\n return (!this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isEditableOccurrence\n * @memberof Component.prototype\n * @desc Check if the component is editable and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isEditableOccurrence = function() {\n return (this.occurrenceId && !this.isReadOnly);\n };\n\n /**\n * @function isInvitation\n * @memberof Component.prototype\n * @desc Check if the component an invitation and not an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitation = function() {\n return (!this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isInvitationOccurrence\n * @memberof Component.prototype\n * @desc Check if the component an invitation and an occurrence of a recurrent component\n * @returns true or false\n */\n Component.prototype.isInvitationOccurrence = function() {\n return (this.occurrenceId && this.userHasRSVP);\n };\n\n /**\n * @function isReadOnly\n * @memberof Component.prototype\n * @desc Check if the component is not editable and not an invitation\n * @returns true or false\n */\n Component.prototype.isReadOnly = function() {\n return (this.isReadOnly && !this.userHasRSVP);\n };\n\n /**\n * @function enablePercentComplete\n * @memberof Component.prototype\n * @desc Check if the percent completion should be enabled with respect to the\n * component's type and status.\n * @returns true if the percent completion should be displayed\n */\n Component.prototype.enablePercentComplete = function() {\n return (this.component = 'vtodo' &&\n this.status != 'not-specified' &&\n this.status != 'cancelled');\n };\n\n /**\n * @function coversFreeBusy\n * @memberof Component.prototype\n * @desc Check if a specific quarter matches the component's period\n * @returns true if the quarter covers the component's period\n */\n Component.prototype.coversFreeBusy = function(day, hour, quarter) {\n var b = (angular.isDefined(this.freebusy[day]) &&\n angular.isDefined(this.freebusy[day][hour]) &&\n this.freebusy[day][hour][quarter] == 1);\n return b;\n };\n\n /**\n * @function updateFreeBusyCoverage\n * @memberof Component.prototype\n * @desc Build a 15-minute-based representation of the component's period.\n * @returns an object literal hashed by days and hours and arrays of four 1's and 0's\n */\n Component.prototype.updateFreeBusyCoverage = function() {\n var _this = this, freebusy = {};\n\n if (this.start && this.end) {\n var roundedStart = new Date(this.start.getTime()),\n roundedEnd = new Date(this.end.getTime()),\n startQuarter = parseInt(roundedStart.getMinutes()/15 + 0.5),\n endQuarter = parseInt(roundedEnd.getMinutes()/15 + 0.5);\n roundedStart.setMinutes(15*startQuarter);\n roundedEnd.setMinutes(15*endQuarter);\n\n _.each(roundedStart.daysUpTo(roundedEnd), function(date, index) {\n var currentDay = date.getDate(),\n dayKey = date.getDayString(),\n hourKey;\n if (dayKey == _this.start.getDayString()) {\n hourKey = date.getHours().toString();\n freebusy[dayKey] = {};\n freebusy[dayKey][hourKey] = [];\n while (startQuarter > 0) {\n freebusy[dayKey][hourKey].push(0);\n startQuarter--;\n }\n }\n else {\n date = date.beginOfDay();\n freebusy[dayKey] = {};\n }\n while (date.getTime() < _this.end.getTime() &&\n date.getDate() == currentDay) {\n hourKey = date.getHours().toString();\n if (angular.isUndefined(freebusy[dayKey][hourKey]))\n freebusy[dayKey][hourKey] = [];\n freebusy[dayKey][hourKey].push(1);\n date.addMinutes(15);\n }\n });\n return freebusy;\n }\n };\n\n /**\n * @function updateFreeBusy\n * @memberof Component.prototype\n * @desc Update the freebusy information for the component's period for a specific attendee.\n * @param {Object} card - an Card object instance of the attendee\n */\n Component.prototype.updateFreeBusy = function(attendee) {\n var params, url, days;\n if (attendee.uid) {\n params =\n {\n sday: this.start.getDayString(),\n eday: this.end.getDayString()\n };\n url = ['..', '..', attendee.uid, 'freebusy.ifb'];\n days = _.map(this.start.daysUpTo(this.end), function(day) { return day.getDayString(); });\n\n if (angular.isUndefined(attendee.freebusy))\n attendee.freebusy = {};\n\n // Fetch FreeBusy information\n Component.$$resource.fetch(url.join('/'), 'ajaxRead', params).then(function(data) {\n _.each(days, function(day) {\n var hour;\n\n if (angular.isUndefined(attendee.freebusy[day]))\n attendee.freebusy[day] = {};\n\n if (angular.isUndefined(data[day]))\n data[day] = {};\n\n for (var i = 0; i <= 23; i++) {\n hour = i.toString();\n if (data[day][hour])\n attendee.freebusy[day][hour] = [\n data[day][hour][\"0\"],\n data[day][hour][\"15\"],\n data[day][hour][\"30\"],\n data[day][hour][\"45\"]\n ];\n else\n attendee.freebusy[day][hour] = [0, 0, 0, 0];\n }\n });\n });\n }\n };\n\n /**\n * @function getClassName\n * @memberof Component.prototype\n * @desc Return the component CSS class name based on its container (calendar) ID.\n * @param {string} [base] - the prefix to add to the class name (defaults to \"fg\")\n * @returns a string representing the foreground CSS class name\n */\n Component.prototype.getClassName = function(base) {\n if (angular.isUndefined(base))\n base = 'fg';\n return base + '-folder' + (this.destinationCalendar || this.c_folder);\n };\n\n /**\n * @function addAttendee\n * @memberof Component.prototype\n * @desc Add an attendee and fetch his freebusy info.\n * @param {Object} card - an Card object instance to be added to the attendees list\n */\n Component.prototype.addAttendee = function(card) {\n var attendee, url, params;\n if (card) {\n attendee = {\n name: card.c_cn,\n email: card.$preferredEmail(),\n role: 'req-participant',\n status: 'needs-action',\n uid: card.c_uid\n };\n if (!_.find(this.attendees, function(o) {\n return o.email == attendee.email;\n })) {\n attendee.image = Component.$gravatar(attendee.email, 32);\n if (this.attendees)\n this.attendees.push(attendee);\n else\n this.attendees = [attendee];\n this.updateFreeBusy(attendee);\n }\n }\n };\n\n /**\n * @function hasAttendee\n * @memberof Component.prototype\n * @desc Verify if one of the email addresses of a Card instance matches an attendee.\n * @param {Object} card - an Card object instance\n * @returns true if the Card matches an attendee\n */\n Component.prototype.hasAttendee = function(card) {\n var attendee = _.find(this.attendees, function(attendee) {\n return _.find(card.emails, function(email) {\n return email.value == attendee.email;\n });\n });\n return angular.isDefined(attendee);\n };\n\n /**\n * @function canRemindAttendeesByEmail\n * @memberof Component.prototype\n * @desc Verify if the component's reminder must be send by email and if it has at least one attendee.\n * @returns true if attendees can receive a reminder by email\n */\n Component.prototype.canRemindAttendeesByEmail = function() {\n return this.alarm.action == 'email' &&\n !this.isReadOnly &&\n this.attendees && this.attendees.length > 0;\n };\n\n /**\n * @function addAttachUrl\n * @memberof Component.prototype\n * @desc Add a new attach URL if not already defined\n * @param {string} attachUrl - the URL\n * @returns the number of values in the list of attach URLs\n */\n Component.prototype.addAttachUrl = function(attachUrl) {\n if (angular.isUndefined(this.attachUrls)) {\n this.attachUrls = [{value: attachUrl}];\n }\n else {\n for (var i = 0; i < this.attachUrls.length; i++) {\n if (this.attachUrls[i].value == attachUrl) {\n break;\n }\n }\n if (i == this.attachUrls.length)\n this.attachUrls.push({value: attachUrl});\n }\n return this.attachUrls.length - 1;\n };\n\n /**\n * @function deleteAttachUrl\n * @memberof Component.prototype\n * @desc Remove an attach URL\n * @param {number} index - the URL index in the list of attach URLs\n */\n Component.prototype.deleteAttachUrl = function(index) {\n if (index > -1 && this.attachUrls.length > index) {\n this.attachUrls.splice(index, 1);\n }\n };\n\n /**\n * @function $addDueDate\n * @memberof Component.prototype\n * @desc Add a due date\n */\n Component.prototype.$addDueDate = function() {\n this.due = new Date();\n this.dueDate = this.due.toISOString();\n };\n\n /**\n * @function $deleteDueDate\n * @memberof Component.prototype\n * @desc Delete a due date\n */\n Component.prototype.$deleteDueDate = function() {\n delete this.due;\n delete this.dueDate;\n };\n\n /**\n * @function $addStartDate\n * @memberof Component.prototype\n * @desc Add a start date\n */\n Component.prototype.$addStartDate = function() {\n this.start = new Date();\n };\n\n /**\n * @function $deleteStartDate\n * @memberof Component.prototype\n * @desc Delete a start date\n */\n Component.prototype.$deleteStartDate = function() {\n delete this.start;\n delete this.startDate;\n };\n\n /**\n * @function $reset\n * @memberof Component.prototype\n * @desc Reset the original state the component's data.\n */\n Component.prototype.$reset = function() {\n var _this = this;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n delete _this[key];\n }\n });\n this.init(this.$shadowData);\n this.$shadowData = this.$omit(true);\n };\n\n /**\n * @function reply\n * @memberof Component.prototype\n * @desc Reply to an invitation.\n * @returns a promise of the HTTP operation\n */\n Component.prototype.$reply = function() {\n var _this = this, data, path = [this.pid, this.id];\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n data = {\n reply: this.reply,\n delegatedTo: this.delegatedTo,\n alarm: this.$hasAlarm? this.alarm : {}\n };\n\n return Component.$$resource.save(path.join('/'), data, { action: 'rsvpAppointment' })\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $save\n * @memberof Component.prototype\n * @desc Save the component to the server.\n */\n Component.prototype.$save = function() {\n var _this = this, options, path = [this.pid, this.id];\n\n if (this.isNew)\n options = { action: 'saveAs' + this.type.capitalize() };\n\n if (this.occurrenceId)\n path.push(this.occurrenceId);\n\n return Component.$$resource.save(path.join('/'), this.$omit(), options)\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $unwrap\n * @memberof Component.prototype\n * @desc Unwrap a promise.\n * @param {promise} futureComponentData - a promise of some of the Component's data\n */\n Component.prototype.$unwrap = function(futureComponentData) {\n var _this = this;\n\n // Expose the promise\n this.$futureComponentData = futureComponentData;\n\n // Resolve the promise\n this.$futureComponentData.then(function(data) {\n _this.init(data);\n // Make a copy of the data for an eventual reset\n _this.$shadowData = _this.$omit();\n }, function(data) {\n angular.extend(_this, data);\n _this.isError = true;\n Component.$log.error(_this.error);\n });\n };\n\n /**\n * @function $omit\n * @memberof Component.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the Component instance\n */\n Component.prototype.$omit = function() {\n var component = {}, date;\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n component[key] = angular.copy(value);\n }\n });\n\n // Format dates and times\n component.startDate = component.start ? formatDate(component.start) : '';\n component.startTime = component.start ? formatTime(component.start) : '';\n component.endDate = component.end ? formatDate(component.end) : '';\n component.endTime = component.end ? formatTime(component.end) : '';\n component.dueDate = component.due ? formatDate(component.due) : '';\n component.dueTime = component.due ? formatTime(component.due) : '';\n\n // Update recurrence definition depending on selections\n if (this.$hasCustomRepeat) {\n if (this.repeat.frequency == 'monthly' && this.repeat.month.type && this.repeat.month.type == 'byday' ||\n this.repeat.frequency == 'yearly' && this.repeat.year.byday) {\n // BYDAY mask for a monthly or yearly recurrence\n delete component.repeat.monthdays;\n component.repeat.days = [{ day: this.repeat.month.day, occurrence: this.repeat.month.occurrence.toString() }];\n }\n else if (this.repeat.month.type) {\n // montly recurrence by month days or yearly by month\n delete component.repeat.days;\n }\n }\n else if (this.repeat.frequency) {\n component.repeat = { frequency: this.repeat.frequency };\n }\n if (this.repeat.frequency) {\n if (this.repeat.end == 'until' && this.repeat.until)\n component.repeat.until = this.repeat.until.stringWithSeparator('-');\n else if (this.repeat.end == 'count' && this.repeat.count)\n component.repeat.count = this.repeat.count;\n else {\n delete component.repeat.until;\n delete component.repeat.count;\n }\n }\n else {\n delete component.repeat;\n }\n\n if (this.$hasAlarm) {\n if (this.alarm.action && this.alarm.action == 'email' &&\n !(this.attendees && this.attendees.length > 0)) {\n // No attendees; email reminder must be sent to organizer only\n this.alarm.attendees = 0;\n this.alarm.organizer = 1;\n }\n }\n else {\n component.alarm = {};\n }\n\n function formatTime(date) {\n var hours = date.getHours();\n if (hours < 10) hours = '0' + hours;\n\n var minutes = date.getMinutes();\n if (minutes < 10) minutes = '0' + minutes;\n return hours + ':' + minutes;\n }\n\n function formatDate(date) {\n var year = date.getYear();\n if (year < 1000) year += 1900;\n\n var month = '' + (date.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n\n var day = '' + date.getDate();\n if (day.length == 1)\n day = '0' + day;\n\n return year + '-' + month + '-' + day;\n }\n\n return component;\n };\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/vendor/angular-file-upload.min.js b/UI/WebServerResources/js/vendor/angular-file-upload.min.js index 6ed88db53..fa745d30c 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 v2.1.3 + angular-file-upload v2.1.4 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)),v=r(n(11)),h=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",v).directive("nvFileOver",h).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";var r=function(e){return e&&e.__esModule?e["default"]:e},i=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}}(),o=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)},s=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)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend);e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy",change:"onChange"},prop:"select"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return s(t,e),i(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},e.exports.$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";var r=function(e){return e&&e.__esModule?e["default"]:e},i=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}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.extend,u=angular.forEach,l=angular.isObject,c=angular.isNumber,f=angular.isDefined,p=angular.isArray,d=angular.element;e.exports=function(e,t,n,r,v,h){var m=r.File,g=r.FormData,_=function(){function r(t){o(this,r);var n=s(e);a(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 i(r,{addToQueue:{value:function(e,t,n){var r=this,i=this.isArrayLikeObject(e)?e:[e],o=this._getFilters(n),s=this.queue.length,a=[];u(i,function(e){var n=new v(e);if(r._isValidFile(n,o,t)){var i=new h(r,e,t);a.push(i),r.queue.push(i),r._onAfterAddingFile(i)}else{var s=o[r._failFilterIndex];r._onWhenAddingFileFailed(n,s,t)}}),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&&(u(e,function(e){return e._prepareToUploading()}),e[0].upload())}},cancelAll:{value:function(){var e=this.getNotUploadedItems();u(e,function(e){return 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 c(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(){var e=this;u(this._directives,function(t){u(e._directives[t],function(e){e.destroy()})})}},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(p(e))return e;var t=e.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==t.indexOf(e.name)})}},_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 u(n.defaults.transformResponse,function(t){e=t(e,r)}),e}},_parseHeaders:{value:function(e){var t,n,r,i={};return e?(u(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=this,n=e._xhr=new XMLHttpRequest,r=new g;if(this._onBeforeUploadItem(e),u(e.formData,function(e){u(e,function(e,t){r.append(t,e)})}),"number"!=typeof e._file.size)throw new TypeError("The file specified is no longer valid");r.append(e.alias,e._file,e.file.name),n.upload.onprogress=function(n){var r=Math.round(n.lengthComputable?100*n.loaded/n.total:0);t._onProgressItem(e,r)},n.onload=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r),o=t._isSuccessCode(n.status)?"Success":"Error",s="_on"+o+"Item";t[s](e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onerror=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onErrorItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onabort=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onCancelItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.open(e.method,e.url,!0),n.withCredentials=e.withCredentials,u(e.headers,function(e,t){n.setRequestHeader(t,e)}),n.send(r),this._render()}},_iframeTransport:{value:function(e){var t=this,n=d('
'),r=d('