From 1d1550907b1cf580d763b8e7f445cd145fc2b121 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 16 Jan 2015 14:49:53 +0100 Subject: [PATCH] 7c2550587b4d32839bf9b16bb6209573167dc9e7 --- dist/fonts/OpenSans-CondLight.eot | Bin 0 -> 69283 bytes dist/fonts/OpenSans-CondLight.svg | 19649 ++++++++++++++++ dist/fonts/OpenSans-CondLight.ttf | Bin 0 -> 155608 bytes dist/fonts/OpenSans-CondLight.woff | Bin 0 -> 80476 bytes dist/fonts/opensans-regular.eot | Bin 0 -> 19836 bytes dist/fonts/opensans-regular.svg | 1831 ++ dist/fonts/opensans-regular.ttf | Bin 0 -> 38232 bytes dist/fonts/opensans-regular.woff | Bin 0 -> 22660 bytes dist/fonts/opensans-semibold.eot | Bin 0 -> 20028 bytes dist/fonts/opensans-semibold.svg | 1830 ++ dist/fonts/opensans-semibold.ttf | Bin 0 -> 39476 bytes dist/fonts/opensans-semibold.woff | Bin 0 -> 22908 bytes dist/fonts/taiga.eot | Bin 0 -> 10100 bytes dist/fonts/taiga.svg | 61 + dist/fonts/taiga.ttf | Bin 0 -> 9944 bytes dist/fonts/taiga.woff | Bin 0 -> 7272 bytes dist/humans.txt | 86 + dist/images/beta.png | Bin 0 -> 2409 bytes dist/images/bg.png | Bin 0 -> 101667 bytes dist/images/favicon.png | Bin 0 -> 6979 bytes dist/images/github-help.png | Bin 0 -> 16267 bytes dist/images/invitation_bg.jpg | Bin 0 -> 184088 bytes dist/images/logo.png | Bin 0 -> 62174 bytes dist/images/markitup/bg-container.png | Bin 0 -> 156 bytes dist/images/markitup/bg-editor-bbcode.png | Bin 0 -> 764 bytes dist/images/markitup/bg-editor-dotclear.png | Bin 0 -> 780 bytes dist/images/markitup/bg-editor-html.png | Bin 0 -> 710 bytes dist/images/markitup/bg-editor-json.png | Bin 0 -> 724 bytes dist/images/markitup/bg-editor-markdown.png | Bin 0 -> 807 bytes dist/images/markitup/bg-editor-textile.png | Bin 0 -> 761 bytes dist/images/markitup/bg-editor-wiki.png | Bin 0 -> 686 bytes dist/images/markitup/bg-editor-xml.png | Bin 0 -> 697 bytes dist/images/markitup/bg-editor.png | Bin 0 -> 780 bytes dist/images/markitup/body.png | Bin 0 -> 130 bytes dist/images/markitup/bold.png | Bin 0 -> 249 bytes dist/images/markitup/clean.png | Bin 0 -> 544 bytes dist/images/markitup/code.png | Bin 0 -> 240 bytes dist/images/markitup/h1.png | Bin 0 -> 223 bytes dist/images/markitup/h2.png | Bin 0 -> 251 bytes dist/images/markitup/h3.png | Bin 0 -> 253 bytes dist/images/markitup/h4.png | Bin 0 -> 240 bytes dist/images/markitup/h5.png | Bin 0 -> 251 bytes dist/images/markitup/h6.png | Bin 0 -> 257 bytes dist/images/markitup/handle.png | Bin 0 -> 140 bytes dist/images/markitup/help.png | Bin 0 -> 293 bytes dist/images/markitup/image.png | Bin 0 -> 463 bytes dist/images/markitup/italic.png | Bin 0 -> 191 bytes dist/images/markitup/jaysalvat.png | Bin 0 -> 139 bytes dist/images/markitup/link.png | Bin 0 -> 291 bytes dist/images/markitup/list-bullet.png | Bin 0 -> 181 bytes dist/images/markitup/list-numeric.png | Bin 0 -> 247 bytes dist/images/markitup/markitup.png | Bin 0 -> 14415 bytes dist/images/markitup/menu.png | Bin 0 -> 168 bytes dist/images/markitup/picture.png | Bin 0 -> 297 bytes dist/images/markitup/preview.png | Bin 0 -> 264 bytes dist/images/markitup/preview_ico.png | Bin 0 -> 313 bytes dist/images/markitup/quotes.png | Bin 0 -> 301 bytes dist/images/markitup/stroke.png | Bin 0 -> 269 bytes dist/images/markitup/submenu.png | Bin 0 -> 170 bytes dist/images/menu.png | Bin 0 -> 13984 bytes dist/images/unnamed.png | Bin 0 -> 2053 bytes dist/index.html | 149 + dist/js/app.js | 17 + dist/js/app.js.map | 1 + dist/js/conf.js | 11 + dist/js/libs.js | 37 + dist/js/libs.js.map | 1 + dist/partials/admin-memberships.html | 1 + .../admin-project-default-values.html | 1 + dist/partials/admin-project-modules.html | 1 + dist/partials/admin-project-profile.html | 1 + ...admin-project-values-issue-priorities.html | 1 + ...admin-project-values-issue-severities.html | 1 + .../admin-project-values-issue-status.html | 1 + .../admin-project-values-issue-types.html | 1 + .../admin-project-values-task-status.html | 1 + .../admin-project-values-us-points.html | 3 + .../admin-project-values-us-status.html | 1 + dist/partials/admin-roles.html | 1 + .../admin-third-parties-bitbucket.html | 1 + dist/partials/admin-third-parties-github.html | 1 + dist/partials/admin-third-parties-gitlab.html | 1 + dist/partials/backlog.html | 1 + dist/partials/cancel-account.html | 1 + dist/partials/change-email.html | 1 + .../change-password-from-recovery.html | 1 + dist/partials/dummy-layout.html | 0 dist/partials/error.html | 1 + dist/partials/forgot-password.html | 1 + dist/partials/index.html | 1 + dist/partials/invitation.html | 1 + dist/partials/issues-detail.html | 1 + dist/partials/issues.html | 1 + dist/partials/kanban.html | 1 + dist/partials/layout.html | 1 + dist/partials/login-layout.html | 1 + dist/partials/login.html | 1 + dist/partials/mail-notifications.html | 1 + dist/partials/not-found.html | 1 + dist/partials/permission-denied.html | 1 + dist/partials/project-colors.html | 1 + dist/partials/project.html | 1 + dist/partials/projects.html | 1 + dist/partials/register.html | 1 + dist/partials/search-issues.html | 7 + dist/partials/search.html | 1 + dist/partials/task-detail.html | 1 + dist/partials/taskboard.html | 1 + dist/partials/us-detail.html | 1 + dist/partials/user-change-password.html | 1 + dist/partials/user-profile.html | 1 + .../partials/views/components/addnewtask.html | 1 + dist/partials/views/components/addnewus.html | 1 + .../views/components/backlog-row.html | 1 + dist/partials/views/components/beta.html | 1 + dist/partials/views/components/filter.html | 1 + .../views/components/help-notion-button.html | 1 + .../views/components/kanban-task.html | 1 + .../views/components/large-summary.html | 1 + .../views/components/loading-bar.html | 1 + dist/partials/views/components/mainTitle.html | 1 + .../components/notification-message.html | 1 + .../views/components/select-color.html | 1 + .../views/components/sprint-summary.html | 1 + dist/partials/views/components/summary.html | 1 + .../views/components/taskboard-task.html | 1 + dist/partials/views/components/watchers.html | 1 + dist/partials/views/modules/admin-menu.html | 1 + .../admin-submenu-project-profile.html | 1 + .../modules/admin-submenu-project-values.html | 1 + .../views/modules/admin-submenu-roles.html | 1 + .../modules/admin-submenu-third-parties.html | 1 + .../partials/views/modules/admin-submenu.html | 1 + .../modules/admin/admin-membership-table.html | 1 + .../views/modules/admin/default-values.html | 1 + .../views/modules/admin/project-points.html | 1 + .../views/modules/admin/project-status.html | 1 + .../views/modules/admin/project-types.html | 1 + .../modules/admin/project-us-status.html | 1 + .../views/modules/backlog-filters.html | 1 + .../partials/views/modules/backlog-table.html | 1 + dist/partials/views/modules/burndown.html | 1 + .../views/modules/cancel-account-form.html | 1 + .../views/modules/category-config.html | 1 + .../views/modules/change-email-form.html | 1 + .../change-password-from-recovery-form.html | 1 + dist/partials/views/modules/colors-table.html | 1 + .../views/modules/comment-activity.html | 1 + dist/partials/views/modules/filter-tags.html | 1 + dist/partials/views/modules/filters.html | 1 + dist/partials/views/modules/forgot-form.html | 1 + .../help-notions/lightbox-generic-notion.html | 1 + ...notion-admin-project-values-us-points.html | 3 + .../views/modules/invitation-login-form.html | 1 + .../modules/invitation-register-form.html | 1 + .../views/modules/issues-filters.html | 1 + dist/partials/views/modules/issues-table.html | 1 + dist/partials/views/modules/kanban-table.html | 1 + .../views/modules/lightbox-add-member.html | 1 + .../views/modules/lightbox-ask-choice.html | 1 + .../views/modules/lightbox-assigned-to.html | 1 + .../views/modules/lightbox-attachments.html | 1 + .../views/modules/lightbox-block.html | 1 + .../views/modules/lightbox-create-issue.html | 1 + .../modules/lightbox-delete-account.html | 1 + .../modules/lightbox-delete-project.html | 1 + .../views/modules/lightbox-feedback.html | 1 + .../views/modules/lightbox-generic-ask.html | 1 + .../views/modules/lightbox-generic-error.html | 1 + .../modules/lightbox-generic-success.html | 1 + .../views/modules/lightbox-issue-bulk.html | 1 + .../views/modules/lightbox-search.html | 1 + .../modules/lightbox-sprint-add-edit.html | 1 + .../views/modules/lightbox-task-bulk.html | 1 + .../modules/lightbox-task-create-edit.html | 1 + .../views/modules/lightbox-us-bulk.html | 1 + .../modules/lightbox-us-create-edit.html | 1 + .../views/modules/lightbox-users.html | 1 + .../views/modules/list-filters-kanban.html | 1 + dist/partials/views/modules/list-filters.html | 1 + dist/partials/views/modules/loader.html | 1 + dist/partials/views/modules/login-form.html | 1 + dist/partials/views/modules/nav.html | 1 + dist/partials/views/modules/projects-nav.html | 1 + .../partials/views/modules/register-form.html | 1 + .../partials/views/modules/related-tasks.html | 1 + .../partials/views/modules/search-filter.html | 1 + dist/partials/views/modules/search-in.html | 1 + .../modules/search-result-issues-table.html | 1 + .../views/modules/search-result-table.html | 1 + dist/partials/views/modules/sprint.html | 1 + dist/partials/views/modules/sprints.html | 1 + .../views/modules/taskboard-table.html | 1 + .../views/modules/team/team-filters.html | 1 + .../views/modules/team/team-table.html | 1 + .../views/modules/user-settings-menu.html | 1 + .../mail-notifications-table.html | 1 + dist/partials/views/modules/wiki-nav.html | 0 .../views/modules/wizard-create-project.html | 1 + dist/partials/views/team/team.html | 1 + dist/partials/wiki.html | 1 + dist/plugins/humanshtml/templates/humans.html | 10 + dist/robots.txt | 6 + dist/styles/main.css | 4 + dist/svg/logo-nav.svg | 44 + dist/svg/logo.svg | 23 + dist/svg/spinner.svg | 74 + 207 files changed, 23976 insertions(+) create mode 100644 dist/fonts/OpenSans-CondLight.eot create mode 100644 dist/fonts/OpenSans-CondLight.svg create mode 100644 dist/fonts/OpenSans-CondLight.ttf create mode 100644 dist/fonts/OpenSans-CondLight.woff create mode 100644 dist/fonts/opensans-regular.eot create mode 100644 dist/fonts/opensans-regular.svg create mode 100644 dist/fonts/opensans-regular.ttf create mode 100644 dist/fonts/opensans-regular.woff create mode 100644 dist/fonts/opensans-semibold.eot create mode 100644 dist/fonts/opensans-semibold.svg create mode 100644 dist/fonts/opensans-semibold.ttf create mode 100644 dist/fonts/opensans-semibold.woff create mode 100644 dist/fonts/taiga.eot create mode 100644 dist/fonts/taiga.svg create mode 100644 dist/fonts/taiga.ttf create mode 100644 dist/fonts/taiga.woff create mode 100644 dist/humans.txt create mode 100644 dist/images/beta.png create mode 100644 dist/images/bg.png create mode 100644 dist/images/favicon.png create mode 100644 dist/images/github-help.png create mode 100644 dist/images/invitation_bg.jpg create mode 100644 dist/images/logo.png create mode 100755 dist/images/markitup/bg-container.png create mode 100755 dist/images/markitup/bg-editor-bbcode.png create mode 100755 dist/images/markitup/bg-editor-dotclear.png create mode 100755 dist/images/markitup/bg-editor-html.png create mode 100755 dist/images/markitup/bg-editor-json.png create mode 100755 dist/images/markitup/bg-editor-markdown.png create mode 100755 dist/images/markitup/bg-editor-textile.png create mode 100755 dist/images/markitup/bg-editor-wiki.png create mode 100755 dist/images/markitup/bg-editor-xml.png create mode 100755 dist/images/markitup/bg-editor.png create mode 100755 dist/images/markitup/body.png create mode 100644 dist/images/markitup/bold.png create mode 100755 dist/images/markitup/clean.png create mode 100644 dist/images/markitup/code.png create mode 100644 dist/images/markitup/h1.png create mode 100644 dist/images/markitup/h2.png create mode 100644 dist/images/markitup/h3.png create mode 100644 dist/images/markitup/h4.png create mode 100644 dist/images/markitup/h5.png create mode 100644 dist/images/markitup/h6.png create mode 100755 dist/images/markitup/handle.png create mode 100644 dist/images/markitup/help.png create mode 100755 dist/images/markitup/image.png create mode 100644 dist/images/markitup/italic.png create mode 100755 dist/images/markitup/jaysalvat.png create mode 100755 dist/images/markitup/link.png create mode 100644 dist/images/markitup/list-bullet.png create mode 100755 dist/images/markitup/list-numeric.png create mode 100755 dist/images/markitup/markitup.png create mode 100755 dist/images/markitup/menu.png create mode 100644 dist/images/markitup/picture.png create mode 100755 dist/images/markitup/preview.png create mode 100644 dist/images/markitup/preview_ico.png create mode 100644 dist/images/markitup/quotes.png create mode 100644 dist/images/markitup/stroke.png create mode 100755 dist/images/markitup/submenu.png create mode 100644 dist/images/menu.png create mode 100644 dist/images/unnamed.png create mode 100644 dist/index.html create mode 100644 dist/js/app.js create mode 100644 dist/js/app.js.map create mode 100644 dist/js/conf.js create mode 100644 dist/js/libs.js create mode 100644 dist/js/libs.js.map create mode 100644 dist/partials/admin-memberships.html create mode 100644 dist/partials/admin-project-default-values.html create mode 100644 dist/partials/admin-project-modules.html create mode 100644 dist/partials/admin-project-profile.html create mode 100644 dist/partials/admin-project-values-issue-priorities.html create mode 100644 dist/partials/admin-project-values-issue-severities.html create mode 100644 dist/partials/admin-project-values-issue-status.html create mode 100644 dist/partials/admin-project-values-issue-types.html create mode 100644 dist/partials/admin-project-values-task-status.html create mode 100644 dist/partials/admin-project-values-us-points.html create mode 100644 dist/partials/admin-project-values-us-status.html create mode 100644 dist/partials/admin-roles.html create mode 100644 dist/partials/admin-third-parties-bitbucket.html create mode 100644 dist/partials/admin-third-parties-github.html create mode 100644 dist/partials/admin-third-parties-gitlab.html create mode 100644 dist/partials/backlog.html create mode 100644 dist/partials/cancel-account.html create mode 100644 dist/partials/change-email.html create mode 100644 dist/partials/change-password-from-recovery.html create mode 100644 dist/partials/dummy-layout.html create mode 100644 dist/partials/error.html create mode 100644 dist/partials/forgot-password.html create mode 100644 dist/partials/index.html create mode 100644 dist/partials/invitation.html create mode 100644 dist/partials/issues-detail.html create mode 100644 dist/partials/issues.html create mode 100644 dist/partials/kanban.html create mode 100644 dist/partials/layout.html create mode 100644 dist/partials/login-layout.html create mode 100644 dist/partials/login.html create mode 100644 dist/partials/mail-notifications.html create mode 100644 dist/partials/not-found.html create mode 100644 dist/partials/permission-denied.html create mode 100644 dist/partials/project-colors.html create mode 100644 dist/partials/project.html create mode 100644 dist/partials/projects.html create mode 100644 dist/partials/register.html create mode 100644 dist/partials/search-issues.html create mode 100644 dist/partials/search.html create mode 100644 dist/partials/task-detail.html create mode 100644 dist/partials/taskboard.html create mode 100644 dist/partials/us-detail.html create mode 100644 dist/partials/user-change-password.html create mode 100644 dist/partials/user-profile.html create mode 100644 dist/partials/views/components/addnewtask.html create mode 100644 dist/partials/views/components/addnewus.html create mode 100644 dist/partials/views/components/backlog-row.html create mode 100644 dist/partials/views/components/beta.html create mode 100644 dist/partials/views/components/filter.html create mode 100644 dist/partials/views/components/help-notion-button.html create mode 100644 dist/partials/views/components/kanban-task.html create mode 100644 dist/partials/views/components/large-summary.html create mode 100644 dist/partials/views/components/loading-bar.html create mode 100644 dist/partials/views/components/mainTitle.html create mode 100644 dist/partials/views/components/notification-message.html create mode 100644 dist/partials/views/components/select-color.html create mode 100644 dist/partials/views/components/sprint-summary.html create mode 100644 dist/partials/views/components/summary.html create mode 100644 dist/partials/views/components/taskboard-task.html create mode 100644 dist/partials/views/components/watchers.html create mode 100644 dist/partials/views/modules/admin-menu.html create mode 100644 dist/partials/views/modules/admin-submenu-project-profile.html create mode 100644 dist/partials/views/modules/admin-submenu-project-values.html create mode 100644 dist/partials/views/modules/admin-submenu-roles.html create mode 100644 dist/partials/views/modules/admin-submenu-third-parties.html create mode 100644 dist/partials/views/modules/admin-submenu.html create mode 100644 dist/partials/views/modules/admin/admin-membership-table.html create mode 100644 dist/partials/views/modules/admin/default-values.html create mode 100644 dist/partials/views/modules/admin/project-points.html create mode 100644 dist/partials/views/modules/admin/project-status.html create mode 100644 dist/partials/views/modules/admin/project-types.html create mode 100644 dist/partials/views/modules/admin/project-us-status.html create mode 100644 dist/partials/views/modules/backlog-filters.html create mode 100644 dist/partials/views/modules/backlog-table.html create mode 100644 dist/partials/views/modules/burndown.html create mode 100644 dist/partials/views/modules/cancel-account-form.html create mode 100644 dist/partials/views/modules/category-config.html create mode 100644 dist/partials/views/modules/change-email-form.html create mode 100644 dist/partials/views/modules/change-password-from-recovery-form.html create mode 100644 dist/partials/views/modules/colors-table.html create mode 100644 dist/partials/views/modules/comment-activity.html create mode 100644 dist/partials/views/modules/filter-tags.html create mode 100644 dist/partials/views/modules/filters.html create mode 100644 dist/partials/views/modules/forgot-form.html create mode 100644 dist/partials/views/modules/help-notions/lightbox-generic-notion.html create mode 100644 dist/partials/views/modules/help-notions/lightbox-notion-admin-project-values-us-points.html create mode 100644 dist/partials/views/modules/invitation-login-form.html create mode 100644 dist/partials/views/modules/invitation-register-form.html create mode 100644 dist/partials/views/modules/issues-filters.html create mode 100644 dist/partials/views/modules/issues-table.html create mode 100644 dist/partials/views/modules/kanban-table.html create mode 100644 dist/partials/views/modules/lightbox-add-member.html create mode 100644 dist/partials/views/modules/lightbox-ask-choice.html create mode 100644 dist/partials/views/modules/lightbox-assigned-to.html create mode 100644 dist/partials/views/modules/lightbox-attachments.html create mode 100644 dist/partials/views/modules/lightbox-block.html create mode 100644 dist/partials/views/modules/lightbox-create-issue.html create mode 100644 dist/partials/views/modules/lightbox-delete-account.html create mode 100644 dist/partials/views/modules/lightbox-delete-project.html create mode 100644 dist/partials/views/modules/lightbox-feedback.html create mode 100644 dist/partials/views/modules/lightbox-generic-ask.html create mode 100644 dist/partials/views/modules/lightbox-generic-error.html create mode 100644 dist/partials/views/modules/lightbox-generic-success.html create mode 100644 dist/partials/views/modules/lightbox-issue-bulk.html create mode 100644 dist/partials/views/modules/lightbox-search.html create mode 100644 dist/partials/views/modules/lightbox-sprint-add-edit.html create mode 100644 dist/partials/views/modules/lightbox-task-bulk.html create mode 100644 dist/partials/views/modules/lightbox-task-create-edit.html create mode 100644 dist/partials/views/modules/lightbox-us-bulk.html create mode 100644 dist/partials/views/modules/lightbox-us-create-edit.html create mode 100644 dist/partials/views/modules/lightbox-users.html create mode 100644 dist/partials/views/modules/list-filters-kanban.html create mode 100644 dist/partials/views/modules/list-filters.html create mode 100644 dist/partials/views/modules/loader.html create mode 100644 dist/partials/views/modules/login-form.html create mode 100644 dist/partials/views/modules/nav.html create mode 100644 dist/partials/views/modules/projects-nav.html create mode 100644 dist/partials/views/modules/register-form.html create mode 100644 dist/partials/views/modules/related-tasks.html create mode 100644 dist/partials/views/modules/search-filter.html create mode 100644 dist/partials/views/modules/search-in.html create mode 100644 dist/partials/views/modules/search-result-issues-table.html create mode 100644 dist/partials/views/modules/search-result-table.html create mode 100644 dist/partials/views/modules/sprint.html create mode 100644 dist/partials/views/modules/sprints.html create mode 100644 dist/partials/views/modules/taskboard-table.html create mode 100644 dist/partials/views/modules/team/team-filters.html create mode 100644 dist/partials/views/modules/team/team-table.html create mode 100644 dist/partials/views/modules/user-settings-menu.html create mode 100644 dist/partials/views/modules/user-settings/mail-notifications-table.html create mode 100644 dist/partials/views/modules/wiki-nav.html create mode 100644 dist/partials/views/modules/wizard-create-project.html create mode 100644 dist/partials/views/team/team.html create mode 100644 dist/partials/wiki.html create mode 100644 dist/plugins/humanshtml/templates/humans.html create mode 100644 dist/robots.txt create mode 100644 dist/styles/main.css create mode 100644 dist/svg/logo-nav.svg create mode 100644 dist/svg/logo.svg create mode 100644 dist/svg/spinner.svg diff --git a/dist/fonts/OpenSans-CondLight.eot b/dist/fonts/OpenSans-CondLight.eot new file mode 100644 index 0000000000000000000000000000000000000000..b8d5568a49a683503ed16449f62990e2935086ac GIT binary patch literal 69283 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/OpenSans-CondLight.svg b/dist/fonts/OpenSans-CondLight.svg new file mode 100644 index 0000000..d08e94d --- /dev/null +++ b/dist/fonts/OpenSans-CondLight.svg @@ -0,0 +1,19649 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/fonts/OpenSans-CondLight.ttf b/dist/fonts/OpenSans-CondLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f74e27ecb7e01180092ccce1fc9dce1905cb41b8 GIT binary patch literal 155608 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/opensans-regular.eot b/dist/fonts/opensans-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..6bbc3cf58cb011a6b4bf3cb1612ce212608f7274 GIT binary patch literal 19836 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 literal 0 HcmV?d00001 diff --git a/dist/images/favicon.png b/dist/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..14cfe78e12a875b171946cf7dc836f642d8d4918 GIT binary patch literal 6979 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 literal 0 HcmV?d00001 diff --git a/dist/images/github-help.png b/dist/images/github-help.png new file mode 100644 index 0000000000000000000000000000000000000000..795fd9f502759f5fc23381ac180d729d8d245de0 GIT binary patch literal 16267 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 wVuBPp(yQv2!uENA3#Dv0x$#^0s#NL0q6jL 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

  • 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�oZ*{6H>_d4;KLxLQxjF2zzV76 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%0Detsp|YX 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 literal 0 HcmV?d00001 diff --git a/dist/images/logo.png b/dist/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb374cf22a7a8fcb2ab63090a2cbe78f776575ae GIT binary patch literal 62174 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 literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bg-container.png b/dist/images/markitup/bg-container.png new file mode 100755 index 0000000000000000000000000000000000000000..823059b40691064bf1a24c7837750c1f1a10e0fb GIT binary patch literal 156 zcmV;N0Av4&P)Sie=?QHzi!so;u)lxSN&arBI#!V3Q7=yOa>xo;ZD_x+e_2OF-U6G2hXtMfBOKYncZIw5N#=sU z7uPen{z_#yzbIG%vdoEn)gQO`yajbH%r%v!No)9n-S5zQAwSqf$2?%(1;-Z--52&R zhnU$6(qihg-~00ai|-o{u6gnKr5)b_?-%x$lJ7rem?dB(qxOadGtAiE zbR5H5UH!&y)50C9PiHUK`;_;>ybF#m8ZI?yxaJxh0h)2EeBA*u5|j(xkbIiBIJeV9Of3j5Z=Fa z9!30HR7ybJS`hal+mE@|sb0ctp*=$`hisqNuHuFZjjI;g^LffOPJ;xQ2)FDD>0kN_ z_Ab9*E`P=X611T&_P49-whn;AA0xpCQ=*NkzI3ms0 zSaDcTAm4)R5wE&~&BEpjj0>4RbNnrty~>I;i9@!9&!uJGt!1mi9C+YzIkQ(;F@xne zWCg4YwqD3SV>V5L;Ni*g4}xxUcvxQ32-{8@60H%jm@3!slc5<@K`a#qrFBEqqSwn?OP> zF?Y{0E?l^N_Npl6i6GGyJ`UL#9xu#&zb8Ip>rgC-aC))bSNxZ*K(fd#ONSQ?AV2Kp z{=07FDr<#F7ZL*(GCQ$5t$SBLldXmCjOLf$%eeo_br_bUcY=L;ndfifnpJWQ22Sh? znFSZ-A6u2h+#+bjA$x*r?{CR;DGsi`8(%urvm|lIiiuh&lz=Q~oZI$~<%qBqH~{)D z%x|oKXx`885y^q;VFBvIt|s(LTEPDWL^tC?=KrF2wQQ;3RnfWzu5e!;yzD@Vu^s2fZ#9Ji^pmiU4&qApBM4g z@|6;qVba_6LVhdj|$KQ1skKg$!v|Mlm8UM@a zJ%{Wgr+CrZ7j}Q<>QF415dsokvHJHnCVmdt6>48fFLKxN9?4+a&m{{sEc(TF=UW%v zH%d6MFJu;6XwQ@BT+fiiA=|>&(sple&t@qOuG-Ju;=kBHhNZn|xWKrO*@^w1@)vi7 zc@R6Toa&h#amu#vxwQP_frcj7Tl*P4w(vQzgRSv=vEIREVKYQ`3*Vp67x^%LY0E!I zBy@26W$sWf5wHS<)d3Hu|14l*L9qh~J+Rdv>p@1s1VR1=OTYvLc8Q{iIJ`j84^f8D m57momD3LZHy9;FQk8iBO{gRLOq%i*kC09>ZKbLh*2~7YZ?hG3M literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bg-editor-markdown.png b/dist/images/markitup/bg-editor-markdown.png new file mode 100755 index 0000000000000000000000000000000000000000..ccca7ed71b4c36c5c5d8b399e8468862e59cce91 GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{Cz;J?tfq{V`u4l?*1_q{go-U3d6}R5rw$2lA z6li$3^S|m2#`FgasuL$qe867Uz{_^~hT4WKiS24`!B_8#Z^<&(c{zR8(z{P(FWmbi zmy!RIVaxU!mRr$wjBj=4H-4L@?@;Z;zL438J*%Z|(xbJ)3wRecUuYCtIDc7(1#6U$ z6^E>VRezxv_&9l9^nFYCB5xA9X8pA&lv-xZF(dc6PL_cJ4$wBY2`+H$s6?f&w>ssm&J}s}}yh*U|Bn$R2MHKsw#65+1>F?-cj zhs77%Zy_#`FgaiVq(@+`w~&@34_Hn^#Dz)jm>JIKF7O&}ivYZ?AH5Z{tf&*%rQ#mVb#Jo2r>F3tMr> zX7JShWzt<(FEc48Zb1uJHRD2NcZpxKG8brk*_Nu|mSj`CmIc}1Fd9g$0i*V;j+6yLKcqrnuUv5$i^VAkTC-zrP@y5Iy zvNJTl%uW>k#T)Qgp`^G0VqFX0pTigO+f}wZEIrDiP~!07fXKpn$w_bS9ryy$spa&4 z*Q6)sxxWZlamcRVj(r*+_3Q3Jm2wBkg@;$R{@Y!&7VPZfGQW1^uXPT8alcJvx4D7s z!o!}ed>pbfEWW&Vo^)4w1}OX-TwmBjWt%TF9=mW|U!f#n)`faLPc!`hrx#$mYZk7b z$=2nxU*2rteP+`ZK6Ozmu(;0ti)R^^F0|+Ilxy&U1k5vzzl9#3I6|yAYR{S|lq4*> zFu%?Bg}*~@^M$jFpm5`m{ZYTrp5Jp`qnA_rWG-0&uu*VtbI5{}pa??38zBgab8wu% vR0{0kbifcJ*;qzcRKtvQ0DB(Et{=1GQ)2(P%~jqX3QE(Su6{1-oD!MVt7 literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bg-editor-wiki.png b/dist/images/markitup/bg-editor-wiki.png new file mode 100755 index 0000000000000000000000000000000000000000..2150bd1f4a0c512ceebfbbd68afc638c05ddcf9b GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{Cz;J?tfq{V`u4l?*1_q{5PZ!6Kid%1QSo<+M zinv_7_h0P>V|D_gzmmH0!32YCKmRKxCgfOdTXy=ni|q80=Id`cI!g!FJ(c$JT$>x1Vx+(Qu)$vwd9=2XF1Zm8+gPNGxo=z_^gPwxw?G%2n$c4RYuF zn33u5!oh#xeV%Pj`x%o=gd4yLTHm>~-?<>(y!L{)0}seJJ`Py{D}$#O@*6AuFU+q! zHj}M|k3)7w+KXf-_Jz!ITld{rx@ww3k6B;!854yPhZhG-oXZzG=e<}RyDE$Ih=7%h z(~H*!ul4R@13NthWZnylFV+h4E`S`#xRBY2{hR17TLJ$UAl(k~3+)*`w(vQzD>>D( zJmQoES@uHti#nQmV}$zsaP_QE^#WD~6EECvr~o<8iM@r-N99X7ntpbK{(2^;egBz| z_3v+l>j#AZ$Z-t_Cxe^?5`;;B{Q(ke$z#G4LoxxZ5aKL6#yWrl0~$OK?FiLSyFfle c5!_$Luydhdp~Zn~g`kA!>FVdQ&MBb@01|x$WdHyG literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bg-editor-xml.png b/dist/images/markitup/bg-editor-xml.png new file mode 100755 index 0000000000000000000000000000000000000000..1e26751b3654dae9e24510441de93178dff1d43e GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{Cz;J?tfq{V`u4l?*1_q`EPZ!6Kid%25Tlz6O zinw09^~sg4g@^C8#f2_oT*z$OT4%R()wxCqC-#NRf(!MRg4sy;o*I) zd3+qawYDo(nF@Hm*pR=lerot(d*I`_}#%iB*mzG%46IJ13S5eM(zU;9_>Vmrhk`%Ur7 z?1`&>{bsUk;d5f&4mJy$FEB1- zu5GE~KO$_!A=|<6m$5?~=1=)Xu!o@PLtpqK)c@mwsb__%cX)BY$Elw65vMH3bO9@a z$rtWJ0tBxAJ(7M#n0{eo{r{QZ`V~qXUNnFl2MQdB5uo4)34(kMmVnr#P$IC46RsF8 zhHL^z5GDaviEb<-BruTeLUIH|JIH4!f`5LoJ+d=3xxDk!9#ER}boFyt=akR{09o_{ A&;S4c literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bg-editor.png b/dist/images/markitup/bg-editor.png new file mode 100755 index 0000000000000000000000000000000000000000..1bae2b4f8d8839653f150ac868d23bc53ee301bf GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{Cz;J?tfq{V`u4l?*1_q|fo-U3d6}R5rvCb25 zlxV$p>%ZC!#_R;f{VslPO@==h>ln8kWLd1WHCi}o@w(g3S(bLK|H5jTR11 z#am{9^|dUIw)#8l`6k(MeILWe7CtBT7QQorzaqo$KCELqB4EWK+rjZyTfqN?LWzR* zmyd4dTt`~#?)6?c-)P{}zPHuR&*4SG1;&NU>imDB!$TjlEaH%D;p32{LP^4=3+ww2)M7{`3 z<>TP}yKMC;X@yBJ6Qp@+Pnrmb{L0f)g-n*9@O$JGZpk4#!}QDX>#JS~awwMwSb_Z&{$Da(ii7L#%IMaAEJp;a z-e{G8LZWf!y%+7fGZi$xJkM*X+hNaa*uq!MUHc?Y9PFX`-K(tTv~y2*?D4{laUt{P z)_?0)uPS5;gvONkuSp=S)AK}saSJ%V*svPpI4AZ!7s1p$gD-_lpzs2P4#;B-7aU(W zwcED5J8c1W)o+N;Di(u1xF-=DFmUZ4Q<^Wd^4){P#B46ODPYq<#v&UH7K9jxY#%sz nARHmE3zh(o#GsCA4F1jE>AWxMrpuGvpk(gp>gTe~DWM4faw|zv0=Qw%uLJ-42%pQFoTJMiH}K)iJys`i2)B}#L8yG%EzyV kSQ&g~Q)Uk%7L` literal 0 HcmV?d00001 diff --git a/dist/images/markitup/bold.png b/dist/images/markitup/bold.png new file mode 100644 index 0000000000000000000000000000000000000000..05afce8ed7b7a8199399cfa8b46a1e4bc0386416 GIT binary patch literal 249 zcmV$v8>1TqSu{r#~w+!xD?RaAbEtYLO zT3;Ayp=)n{f^)p!X_FQTD?H)~2YnFp|3A|Q6dIo^9*&aB00000NkvXXu0mjfauQ{r literal 0 HcmV?d00001 diff --git a/dist/images/markitup/clean.png b/dist/images/markitup/clean.png new file mode 100755 index 0000000000000000000000000000000000000000..f7a7ebab4b3da46abe197e93fec1fed03bfc3c65 GIT binary patch literal 544 zcmV+*0^j|KP)ErZ@9Yt|@s+8$lfCU4j#a@j3| z-nl{q!&V)*L<7TC9JfRR!d4kLcG*0C+((+_NS)rj~ER;K4snBr8P2xn<^bpY>v7xbKB^`~+6w2b$(jQDi`{>`oa*0=w55&wP{|Aip`kxc*p|0}7F z<^TWyI&@M_Qve1A4-XF#5)vC58yhn-SXfwCZFhKhdVt2p#>U3o-rnBc-rnBc-{a)u z?(p#N@$vWf_xJnz{QUk2^WxM10059lL_t&-8I8f!5`sVg1<&&rm`DYvMj5=BxIr4ojyNM!p0<>-0JeRR;@1;DUJ%BSeDnGM0000f()@Q_zyHJh=^@wo55&U5MfF1M+ky#f*|-&#*)=ElSSpSWK*!I zui?Uqdeb=N4No}dJ)(L{A2_gI4eo4L05d);{|T%+4J%&5nN76`Fl)z16k*p*7>h@H z>Ls`mg=4L7q8D0@Jd4{B487@EjPPJ1!jePp1|{eii7)3GKFx&--{RiZWJzt;UaWbF qP`I@E>r72u{WAU2g9Y=`f7TC1#NG1X>x&xz0000VU3rfR7#?TR3S64i+Y!q~~$3CV1I!wJDYqzegykz$R+}22&0c4>ee2IUHLyJRLd* z1NSvp#FYseV-9-mYT(2c@Y~&STLUYm0EKIJ%grCym`;OE&s1SRk1n>M`4DKQ*Hd48 ZUtiNx^dz@rF?av~002ovPDHLkV1k9@P+tH5 literal 0 HcmV?d00001 diff --git a/dist/images/markitup/h2.png b/dist/images/markitup/h2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab10e73b6a0e0682cc52c8939a6297c39c959ef3 GIT binary patch literal 251 zcmVST5CzbaC}{+X;4t`=I&Wd1Cne=vL$pVO;{m%jP^>Ds)RXu;xTqo+xQ{^N$z-s0CvNlyPA4C@F4 z?p!pX90_Qlb^~V8P>|u9!j}kd&sz+duRHbm`~YAI>yCB;Yw!R7002ovPDHLkV1kDg BWKaMA literal 0 HcmV?d00001 diff --git a/dist/images/markitup/h3.png b/dist/images/markitup/h3.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7ca64bc81b28268ff4c4a8a51458ce85f16a0c GIT binary patch literal 253 zcmVtV*3aS0arngK?9>U{8<vX7!ez?v zw;!iCP<#$w0c%-hm1R@R+bBt58A5n^anrG|a*=ST5Cu?66f_8liYiw`*U?cSH?G{cp@?J#VS<|=8)SmpfC<=u32qH?0VkxQMAumQ zPv1V9)tryH1VoCgGpwc`0(*A!37Q+yuOUk0-D@mcT;c@$2ObGH?lyognCk;Pq@Tm+ zM>lqJs{o&1YpxE^OGphZ-vuo!8ZX6?QvyMJ0*wMFYg^f3%BQSJz>7-&8Du}@oPDqG qq)+2k*Tex>%eVD1GIZTnpU)dmuJI8A%=eT40000 z?XSZ`v8F08aAX;Dc%@d$D9Z0uhRDE@VW6-f z8BbJi{SodTU{k4vy2Pnanxn{duAY!!IPTQ@^9Fm^?6|z+%Mt(p002ovPDHLkV1g!W BYqtOZ literal 0 HcmV?d00001 diff --git a/dist/images/markitup/h6.png b/dist/images/markitup/h6.png new file mode 100644 index 0000000000000000000000000000000000000000..3a4884c712f93b5b7a9aaaaa3076f3c380b16e5f GIT binary patch literal 257 zcmV+c0sj7pP)mgD=tu`%#m=S$Y7joV6ZE=3RHnBxDHgobg&g{BfpKgV8y~F z4$V*B{22y{IgsB}&*83OCq4b1e-k7kT<9fePO`vDvh*6$@_#1nH@8 zcPno<+&DkR6jMn3c(jMWg~E zLjhL4*!fS^L*+k+K>htJ unR%V^?R9cYj0^&d3=B*R6F3P ztdgw7`NKe9=AYzGCLzYCUm=7FhuBDfCgCc^`1qqC#weKt)R-d{Fi)EB-PdcL4K)77 ztTX8h>VmMrLxHQi@vF?SU$NC2ZwD`#aVj{=xSwDZm$<+R&NI4Gm}ZDwOw#%dV;p33 zQ)n~92R`wPH7w&cqiahB9gZ==O@VJm>84BdgiUN0_+}{?>=gt@cpuo{zVwV8_OU*Y r%IdEm-QjvLNdFS$MLttl^gDk64p!SwB+z^)00000NkvXXu0mjfj2wTK literal 0 HcmV?d00001 diff --git a/dist/images/markitup/image.png b/dist/images/markitup/image.png new file mode 100755 index 0000000000000000000000000000000000000000..a33c43306b38641d4ff7df83ed28f25c14ed8cff GIT binary patch literal 463 zcmV;=0WkiFP)^PV@JoGPt@r=TbZ;--^}f}g<6$-xdHh~k#LlV}&w%~`}r1a}8Ng%mm# z17ah#L~5FxocFmssfm9f1$$j4iNlCAR#sm>NwwYF9;Ei}h<`bMC~{aVc>d<`jZUPI z+*Tgmy;LrjrI|$p2yiA02_$ePM5-%pKX`i!=tLUZyD2YEly?8=OHQ3RPM$eQIfNyG zK`;ox$b#`<<2{c$_ZTNL8j;3e1R+GupF7Ki%U8)lhLpe}m=Vk{3xp78WdV17icC3> z=WW`>F_4%?2oMvIDF?>YknwO2%#a*c!aZPsBr;3X)d0zviA+iGx&M(by*^{FaV5Tv zwy4r+j31Ws9rnKUL4ldblmwr)7HD;c?2|wx(vX=Q3c6kKyGX+U2|{*+kmbyiwc3bZ z0#g$ICDM>P2J|-9IY@7F9dr$M_C*@Tgm|{L3K;WU2P$SFjm0ALy&f)|Tre<0Ob7(x zZ$@2L>js1)gi#0h-^M z1K6H3X*6duO;HSHNd3X)kg+U=nWOpfJGMV!Obq2OIToKxuU!gqg{P~Z%Q~loCIEid BFlGP% literal 0 HcmV?d00001 diff --git a/dist/images/markitup/jaysalvat.png b/dist/images/markitup/jaysalvat.png new file mode 100755 index 0000000000000000000000000000000000000000..d487f6e33f384138ce15355481d82b27a9e96372 GIT binary patch literal 139 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 Gq5lUXX7N1$ literal 0 HcmV?d00001 diff --git a/dist/images/markitup/menu.png b/dist/images/markitup/menu.png new file mode 100755 index 0000000000000000000000000000000000000000..ae47f2372656f0eef72edfca231000479fd08458 GIT binary patch literal 168 zcmV;Z09XHsP)gL9n*}`(MJWzztYyAcDoWiSQM{G?{81TrQ94YOSVbF`1kdUcO5y zWrYh)U(6kcBtvU{;*8sPcX;5KWPq++qm%+0T(QPJN&oZbBu3i~Tl9_O)BG>QUS1S16%d5{Pi z(*9zr$-uxMUlQaO%)rPhsG{TQ;T4sTSWq~5*0Rl8ckDfQHq(wtUDrR7tK;RFkj-41Vh7RBe&fQTn=nI zw`(<8boXB4=P@xYKC0m5AHuBPbKS|s{oDiR^z#DlcVgFU&7AS~>l? literal 0 HcmV?d00001 diff --git a/dist/images/markitup/preview.png b/dist/images/markitup/preview.png new file mode 100755 index 0000000000000000000000000000000000000000..b402749728189c62ca4e95a8911624181abf7a59 GIT binary patch literal 264 zcmV+j0r&oiP)ZI*DHe?$lt9xNQQ zGXpz&7ny03v$c`>&kQ2sAR=xe;w2)U>%KqekeRDO-~^v|!yO*5EbO%9XQp0!g)Gr_ z)7!;k^=97;I`I-a7-3p9!XDm>Gw%&9s*$)Y?6AS6g)JKFJTq4z4n2l8;1~?B4H5Hh zgfWh)#y^hGn9P0=;^p8L8uHniHGbfD?HW6i3GVTVCtPDP#Et*|nZ5vh>C(FEZQ#}b O0000VU7=|D6K!XIjOSfRq&<%tV;iiL4LS08gm(bkY9R%eRHE2Vt;Ns>MAwffgJPm$_ zJJ22_B@=pj#Ts~>7@ z!}iQt)V9|h^nhDnv0;10B5HftK~i7T{vWny_M<1Ew$yjE`i}wC=xHUO3oL<~g4HMB zBI0x4pr9{-ZUQ>MJuoR0oB^*9p8{6}{SD}#&ecJQ&9UDYm*@j^o?>&eM#tUkpFaJME_fCey%^8h%GduJR0*Qj-M>Q4;S?clIPpQ`mQS|e4Y1--$>00000 LNkvXXu0mjfEZT+X literal 0 HcmV?d00001 diff --git a/dist/images/markitup/quotes.png b/dist/images/markitup/quotes.png new file mode 100644 index 0000000000000000000000000000000000000000..947a4a4086b5da9a2ecf562b857966501610caf4 GIT binary patch literal 301 zcmV+|0n+}7P)9 zUNd{bbV^CtypESFxWz)jR`Hx!A4@eWMAupHj>X1gmzjNF`4`KAd36f*uz7T2|j*cv#L673g8{VeV41)$2!h2?U?UJhYl&p z2-m2p+L^Bp-a%E(Fu`UY(AvToHn7|^-r%aq_6S_!sq;I8-KTH=!h$cRF)%QwdAc};a9mGLXlP{MFy(cc>%|b9KCNNp o<=%u>EsQg?+B5v$^ZZW literal 0 HcmV?d00001 diff --git a/dist/images/menu.png b/dist/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..9d22fe2ccd5ae4b6fa6e61f34bd3b3bc3ca1f1ec GIT binary patch literal 13984 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 Tx%UhJ004~i%ynySV&nfG8}P)J literal 0 HcmV?d00001 diff --git a/dist/images/unnamed.png b/dist/images/unnamed.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c900d17b8d237ae3bfdbc8037585ca17839009 GIT binary patch literal 2053 zcmV+g2>SPlP)4Ks<5QTaFcf+mKUTk+87eLt+b;e5&LPDxyGWM1FHN#T*;G7dS+c29ha| zYSRG0B<5=Ja)QbP&syOh2|8X}E3flff^96+_N4^V7^vwB35F3w5Di~OAe!JAD;U3H zf+wu-4+OIqt=TUT%opR2x0ap>9$BIF_Ay@ks1mF^QqCF#>G-jve8CFs{^w-5cJr1S zRf4IFJmt zgD1yRdOrL3-k+)j9US0t&FhkZoEVTK8@gC^z2FFa1GQk$< zkgx+?&lLejc1@7o_v$m!3hoec<6JKl!I@tZ!uxO338qpL(5eV(YY;0e)d{{Hn;<{i zl%T!_w!%c6VDQ)kq>eNS!m30$j4(mxu?a|>N`j-fE>sO8a%}|S2#k_~VJyy%Y8VlM zEi@YnqnzO|=BofNx;pmTaXevh6fCL{ zMucF1To~avCJH7%!-x zSn3gcl}C^lt3)Km5ivo*Umn6lk6=KLfISSs3dedFkGuk9C3qMyf(~;8btTTVI37V0 z#N6)LA@nt$8~sztSEU4Fg_I9tWr7+%IfS+rL2HuKJ1|N_d>m8J1mQ{CeXcVfbbst9 z6)O^~aN)vugcT^xp}l@nCV1c4b^tUSq^9z&!_@9zHRTm)CgJ=J1YG2y=C>6GeL~(=;dtzB@93TQV!CnRN_bh3WTFX z0aE*WUr`AIP#~`p)~ZkauNP6m=vsO^*%E*Z zL9^MWXBxVvzz$^up=PsD?gM2T6e>hGK%}Qa?nOf-3dPX-gCB(CwhRLxw~b+trNB{k zL6OD>O1S0F^qmO~P!<7s5Q-5uC&EhPLqi`l(nkOsh%1>5s##f3!VM(fQXqs>vUwP| z$c)HbnQE6t`yl;_5CwGrKalR=am{xl@cw{TLjEylZFxL^XIWBapSv=?A$KU860$>b zt*p3tAtXy|iEbfscTl@aW0eT;W;-(6)=MgY#LJg$aO?=VLlW+lhg1of0$HsOUWGs& zjW=YeLd$+f#e!dNJfn;@^l+;Qgg&ELk7 zDB;6TjoABxF%-sdTZ~}QG2MAq^duaLGXyFT!cWfVJCvc=!z=rjCdkSr1iR|}eYpjo zMDV8h7H8ul3NR+{ye%QvRR7=6jp|Bx>$c{btn5_73REV@$|3|m>^B6u8LvbZl%5_z zKkKoJ00kHmWc5P`mdt_!yCKg%)FXJ$55pG}U`>$Kf)FgYPdV(S5zDXnK5@hx2BQFH z0usi&xEJv|X5+gO#Z)!cBbXFDG9_3AI1?0MWa3z}LVgI8f2K#UphG$q*O42{z7y=Y zg{&2_L!kd#=@D3P@ke_PBNxZI71+}H!qI_y)IUS6?*u=!#XETKo(@4DY{8qL3?m;$ z(F(MNIt1@v3*qC_;!d!rFXydLme#knk%9?m7;AAvtuWRhm?)TlhOr*UJS9MbnGV51 z!2~pn^*CZySm_X`Xh6d##1Ye>rSS_0OX(b}OM)Ly$%{R80x*o?f&P>POY!um$I(y^ zqoDS(BoN~0Sn6>!l*3p&BLHC(;<$(RA8Y&`$x@jU-HO0bn2@kI8j4{AtYB9JyT>L# z<7jAH8EaP9Rs@?zvymi@hWeF}TH)Z@TWhtLGqqS*8{0WZOn}DGP`)yf(>TkfYkp|H zGLZFTw!-!wD1UDRh8}+odgLT_XLEUx2a{HB@cBJks>RWehjBIgE{3LG<>de$>|=Nx zWUTyK-E8BfFf{#Xf(+mr`iR{fe0)!rSR5gO;h@{Xe`DR6-~dy}-?L;O!(aN literal 0 HcmV?d00001 diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..8911345 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,149 @@ + + + + + Taiga + + + + + + + +
    +
    +

    Loading project...

    +
    +
    +
    + + +
    +
    +
    +

    Everything is ok

    +

    Our oompa Loompas saved all your changes!

    +
    +
    +
    +
    +
    +

    Oops, something happened...

    +

    Our oompa Loompas are sad, your changes were not saved!

    +
    +
    +
    +
    +

    Oops, something happened...

    +

    Our oompa Loompas are sad, your changes were not saved!

    +
    +
    +
    + + + + + + +
    +
    +
    +

    Loading...

    +
    +
    + + + + + \ No newline at end of file diff --git a/dist/js/app.js b/dist/js/app.js new file mode 100644 index 0000000..2243cd2 --- /dev/null +++ b/dist/js/app.js @@ -0,0 +1,17 @@ +(function(){var configure,init,module,modules,taiga;this.taiga=taiga={},taiga.generateHash=function(components){return null==components&&(components=[]),components=_.map(components,function(x){return JSON.stringify(x)}),hex_sha1(components.join(":"))},taiga.generateUniqueSessionIdentifier=function(){var date,randomNumber;return date=(new Date).getTime(),randomNumber=Math.floor(150994944*Math.random()),taiga.generateHash([date,randomNumber])},taiga.sessionId=taiga.generateUniqueSessionIdentifier(),configure=function($routeProvider,$locationProvider,$httpProvider,$provide,$tgEventsProvider,tgLoaderProvider){var authHttpIntercept,defaultHeaders,versionCheckHttpIntercept;return $routeProvider.when("/",{templateUrl:"/partials/projects.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/",{templateUrl:"/partials/project.html"}),$routeProvider.when("/project/:pslug/backlog",{templateUrl:"/partials/backlog.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/taskboard/:sslug",{templateUrl:"/partials/taskboard.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/search",{templateUrl:"/partials/search.html",reloadOnSearch:!1}),$routeProvider.when("/project/:pslug/kanban",{templateUrl:"/partials/kanban.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/us/:usref",{templateUrl:"/partials/us-detail.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/task/:taskref",{templateUrl:"/partials/task-detail.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/wiki",{redirectTo:function(params){return"/project/"+params.pslug+"/wiki/home"}}),$routeProvider.when("/project/:pslug/wiki/:slug",{templateUrl:"/partials/wiki.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/team",{templateUrl:"/partials/views/team/team.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/issues",{templateUrl:"/partials/issues.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/issue/:issueref",{templateUrl:"/partials/issues-detail.html",resolve:{loader:tgLoaderProvider.add()}}),$routeProvider.when("/project/:pslug/admin/project-profile/details",{templateUrl:"/partials/admin-project-profile.html"}),$routeProvider.when("/project/:pslug/admin/project-profile/default-values",{templateUrl:"/partials/admin-project-default-values.html"}),$routeProvider.when("/project/:pslug/admin/project-profile/modules",{templateUrl:"/partials/admin-project-modules.html"}),$routeProvider.when("/project/:pslug/admin/project-values/us-status",{templateUrl:"/partials/admin-project-values-us-status.html"}),$routeProvider.when("/project/:pslug/admin/project-values/us-points",{templateUrl:"/partials/admin-project-values-us-points.html"}),$routeProvider.when("/project/:pslug/admin/project-values/task-status",{templateUrl:"/partials/admin-project-values-task-status.html"}),$routeProvider.when("/project/:pslug/admin/project-values/issue-status",{templateUrl:"/partials/admin-project-values-issue-status.html"}),$routeProvider.when("/project/:pslug/admin/project-values/issue-types",{templateUrl:"/partials/admin-project-values-issue-types.html"}),$routeProvider.when("/project/:pslug/admin/project-values/issue-priorities",{templateUrl:"/partials/admin-project-values-issue-priorities.html"}),$routeProvider.when("/project/:pslug/admin/project-values/issue-severities",{templateUrl:"/partials/admin-project-values-issue-severities.html"}),$routeProvider.when("/project/:pslug/admin/memberships",{templateUrl:"/partials/admin-memberships.html"}),$routeProvider.when("/project/:pslug/admin/roles",{templateUrl:"/partials/admin-roles.html"}),$routeProvider.when("/project/:pslug/admin/third-parties/github",{templateUrl:"/partials/admin-third-parties-github.html"}),$routeProvider.when("/project/:pslug/admin/third-parties/gitlab",{templateUrl:"/partials/admin-third-parties-gitlab.html"}),$routeProvider.when("/project/:pslug/admin/third-parties/bitbucket",{templateUrl:"/partials/admin-third-parties-bitbucket.html"}),$routeProvider.when("/project/:pslug/user-settings/user-profile",{templateUrl:"/partials/user-profile.html"}),$routeProvider.when("/project/:pslug/user-settings/user-change-password",{templateUrl:"/partials/user-change-password.html"}),$routeProvider.when("/project/:pslug/user-settings/user-avatar",{templateUrl:"/partials/user-avatar.html"}),$routeProvider.when("/project/:pslug/user-settings/mail-notifications",{templateUrl:"/partials/mail-notifications.html"}),$routeProvider.when("/change-email/:email_token",{templateUrl:"/partials/change-email.html"}),$routeProvider.when("/cancel-account/:cancel_token",{templateUrl:"/partials/cancel-account.html"}),$routeProvider.when("/login",{templateUrl:"/partials/login.html"}),$routeProvider.when("/register",{templateUrl:"/partials/register.html"}),$routeProvider.when("/forgot-password",{templateUrl:"/partials/forgot-password.html"}),$routeProvider.when("/change-password",{templateUrl:"/partials/change-password-from-recovery.html"}),$routeProvider.when("/change-password/:token",{templateUrl:"/partials/change-password-from-recovery.html"}),$routeProvider.when("/invitation/:token",{templateUrl:"/partials/invitation.html"}),$routeProvider.when("/error",{templateUrl:"/partials/error.html"}),$routeProvider.when("/not-found",{templateUrl:"/partials/not-found.html"}),$routeProvider.when("/permission-denied",{templateUrl:"/partials/permission-denied.html"}),$routeProvider.otherwise({redirectTo:"/not-found"}),$locationProvider.html5Mode({enabled:!0,requireBase:!1}),defaultHeaders={"Content-Type":"application/json","Accept-Language":"en","X-Session-Id":taiga.sessionId},$httpProvider.defaults.headers["delete"]=defaultHeaders,$httpProvider.defaults.headers.patch=defaultHeaders,$httpProvider.defaults.headers.post=defaultHeaders,$httpProvider.defaults.headers.put=defaultHeaders,$httpProvider.defaults.headers.get={"X-Session-Id":taiga.sessionId},$tgEventsProvider.setSessionId(taiga.sessionId),authHttpIntercept=function($q,$location,$navUrls,$lightboxService){var httpResponseError;return httpResponseError=function(response){var nextPath;return 0===response.status?($lightboxService.closeAll(),$location.path($navUrls.resolve("error")),$location.replace()):401===response.status&&(nextPath=$location.path(),$location.url($navUrls.resolve("login")).search("next="+nextPath)),$q.reject(response)},{responseError:httpResponseError}},$provide.factory("authHttpIntercept",["$q","$location","$tgNavUrls","lightboxService",authHttpIntercept]),$httpProvider.interceptors.push("authHttpIntercept"),versionCheckHttpIntercept=function($q,$confirm){var httpResponseError,versionErrorMsg;return versionErrorMsg="Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost).",httpResponseError=function(response){return 400===response.status&&response.data.version?($confirm.notify("error",versionErrorMsg,null,1e4),$q.reject(response)):$q.reject(response)},{responseError:httpResponseError}},$provide.factory("versionCheckHttpIntercept",["$q","$tgConfirm",versionCheckHttpIntercept]),$httpProvider.interceptors.push("versionCheckHttpIntercept"),window.checksley.updateValidators({linewidth:function(val,width){var lines,valid;return lines=taiga.nl2br(val).split("
    "),valid=_.every(lines,function(line){return line.lengthi;i++)if(i in this&&this[i]===item)return i;return-1},__slice=[].slice,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};nl2br=function(){return function(str){var breakTag;return breakTag="
    ",(str+"").replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g,"$1"+breakTag+"$2")}}(this),bindMethods=function(){return function(object){var dependencies,methods;return dependencies=_.keys(object),methods=[],_.forIn(object,function(value,key){return __indexOf.call(dependencies,key)<0?methods.push(key):void 0}),_.bindAll(object,methods)}}(this),bindOnce=function(){return function(scope,attr,continuation){var delBind,val;return val=scope.$eval(attr),void 0!==val?continuation(val):(delBind=null,delBind=scope.$watch(attr,function(val){return void 0!==val?(continuation(val),delBind?delBind():void 0):void 0}))}}(this),mixOf=function(){var Mixed,base,method,mixin,mixins,name,_i,_ref;for(base=arguments[0],mixins=2<=arguments.length?__slice.call(arguments,1):[],Mixed=function(_super){function Mixed(){return Mixed.__super__.constructor.apply(this,arguments)}return __extends(Mixed,_super),Mixed}(base),_i=mixins.length-1;_i>=0;_i+=-1){mixin=mixins[_i],_ref=mixin.prototype;for(name in _ref)method=_ref[name],Mixed.prototype[name]=method}return Mixed},trim=function(data,char){return _.str.trim(data,char)},slugify=function(data){return _.str.slugify(data)},unslugify=function(data){return data?_.str.capitalize(data.replace(/-/g," ")):data},toggleText=function(element,texts){var nextTextPosition,text;return nextTextPosition=element.data("nextTextPosition"),(null==nextTextPosition||nextTextPosition>=texts.length)&&(nextTextPosition=0),text=texts[nextTextPosition],element.data("nextTextPosition",nextTextPosition+1),element.text(text)},groupBy=function(coll,pred){var item,result,_i,_len;for(result={},_i=0,_len=coll.length;_len>_i;_i++)item=coll[_i],result[pred(item)]=item;return result},timeout=function(wait,continuation){return window.setTimeout(continuation,wait)},cancelTimeout=function(timeoutVar){return window.clearTimeout(timeoutVar)},scopeDefer=function(scope,func){return _.defer(function(){return function(){return scope.$apply(func)}}(this))},toString=function(value){return _.isNumber(value)?value+"":_.isString(value)?value:_.isPlainObject(value)?JSON.stringify(value):_.isUndefined(value)?"":value.toString()},joinStr=function(str,coll){return _.str.join(str,coll)},debounce=function(wait,func){return _.debounce(func,wait,{leading:!0,trailing:!1})},debounceLeading=function(wait,func){return _.debounce(func,wait,{leading:!1,trailing:!0})},startswith=function(str1,str2){return _.str.startsWith(str1,str2)},sizeFormat=function(input,precision){var number,size,units;return null==precision&&(precision=1),isNaN(parseFloat(input))||!isFinite(input)?"-":0===input?"0 bytes":(units=["bytes","KB","MB","GB","TB","PB"],number=Math.floor(Math.log(input)/Math.log(1024)),number>5&&(number=5),size=(input/Math.pow(1024,number)).toFixed(precision),""+size+" "+units[number])},taiga=this.taiga,taiga.nl2br=nl2br,taiga.bindMethods=bindMethods,taiga.bindOnce=bindOnce,taiga.mixOf=mixOf,taiga.trim=trim,taiga.slugify=slugify,taiga.unslugify=unslugify,taiga.toggleText=toggleText,taiga.groupBy=groupBy,taiga.timeout=timeout,taiga.cancelTimeout=cancelTimeout,taiga.scopeDefer=scopeDefer,taiga.toString=toString,taiga.joinStr=joinStr,taiga.debounce=debounce,taiga.debounceLeading=debounceLeading,taiga.startswith=startswith,taiga.sizeFormat=sizeFormat}.call(this),function(){var FiltersMixin,PageMixin,groupBy,joinStr,taiga,toString,trim;taiga=this.taiga,groupBy=this.taiga.groupBy,joinStr=this.taiga.joinStr,trim=this.taiga.trim,toString=this.taiga.toString,PageMixin=function(){function PageMixin(){}return PageMixin.prototype.fillUsersAndRoles=function(users,roles){var activeUsers,availableRoles;return activeUsers=_.filter(users,function(){return function(user){return user.is_active}}(this)),this.scope.activeUsers=_.sortBy(activeUsers,"full_name_display"),this.scope.activeUsersById=groupBy(this.scope.activeUsers,function(e){return e.id}),this.scope.users=_.sortBy(users,"full_name_display"),this.scope.usersById=groupBy(this.scope.users,function(e){return e.id}),this.scope.roles=_.sortBy(roles,"order"),availableRoles=_(this.scope.project.memberships).map("role").uniq().value(),this.scope.computableRoles=_(roles).filter("computable").filter(function(x){return _.contains(availableRoles,x.id)}).value()},PageMixin.prototype.loadUsersAndRoles=function(){var promise;return promise=this.q.all([this.rs.projects.usersList(this.scope.projectId),this.rs.projects.rolesList(this.scope.projectId)]),promise.then(function(_this){return function(results){var roles,users;return users=results[0],roles=results[1],_this.fillUsersAndRoles(users,roles),results}}(this))},PageMixin}(),taiga.PageMixin=PageMixin,FiltersMixin=function(){function FiltersMixin(){}return FiltersMixin.prototype.selectFilter=function(name,value,load){var existing,location,params;return null==load&&(load=!1),params=this.location.search(),void 0!==params[name]&&"page"!==name&&(existing=_.map(taiga.toString(params[name]).split(","),function(x){return trim(x)}),existing.push(taiga.toString(value)),existing=_.compact(existing),value=joinStr(",",_.uniq(existing))),location=load?this.location:this.location.noreload(this.scope),location.search(name,value)},FiltersMixin.prototype.replaceFilter=function(name,value,load){var location;return null==load&&(load=!1),location=load?this.location:this.location.noreload(this.scope),location.search(name,value)},FiltersMixin.prototype.replaceAllFilters=function(filters,load){var location;return null==load&&(load=!1),location=load?this.location:this.location.noreload(this.scope),location.search(filters)},FiltersMixin.prototype.unselectFilter=function(name,value,load){var location,newValues,params,parsedValues;return null==load&&(load=!1),params=this.location.search(),void 0!==params[name]?((void 0===value||null===value)&&delete params[name],parsedValues=_.map(taiga.toString(params[name]).split(","),function(x){return trim(x)}),newValues=_.reject(parsedValues,function(x){return x===taiga.toString(value)}),newValues=_.compact(newValues),value=_.isEmpty(newValues)?null:joinStr(",",_.uniq(newValues)),location=load?this.location:this.location.noreload(this.scope),location.search(name,value)):void 0},FiltersMixin}(),taiga.FiltersMixin=FiltersMixin}.call(this),function(){var module;module=angular.module("taigaAdmin",[])}.call(this),function(){var AuthService,CancelAccountDirective,ChangeEmailDirective,ChangePasswordFromRecoveryDirective,ForgotPasswordDirective,InvitationDirective,LoginDirective,PublicRegisterMessageDirective,RegisterDirective,debounce,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,debounce=this.taiga.debounce,module=angular.module("taigaAuth",["taigaResources"]),AuthService=function(_super){function AuthService(rootscope,storage,model,rs,http,urls){this.rootscope=rootscope,this.storage=storage,this.model=model,this.rs=rs,this.http=http,this.urls=urls,AuthService.__super__.constructor.call(this)}return __extends(AuthService,_super),AuthService.$inject=["$rootScope","$tgStorage","$tgModel","$tgResources","$tgHttp","$tgUrls"],AuthService.prototype.getUser=function(){var user,userData;return this.rootscope.user?this.rootscope.user:(userData=this.storage.get("userInfo"),userData?(user=this.model.make_model("users",userData),this.rootscope.user=user,user):null)},AuthService.prototype.setUser=function(user){return this.rootscope.auth=user,this.rootscope.$broadcast("i18n:change",user.default_language),this.storage.set("userInfo",user.getAttrs()),this.rootscope.user=user},AuthService.prototype.clear=function(){return this.rootscope.auth=null,this.rootscope.user=null,this.storage.remove("userInfo")},AuthService.prototype.setToken=function(token){return this.storage.set("token",token)},AuthService.prototype.getToken=function(){return this.storage.get("token")},AuthService.prototype.removeToken=function(){return this.storage.remove("token")},AuthService.prototype.isAuthenticated=function(){return null!==this.getUser()?!0:!1},AuthService.prototype.login=function(data,type){var url;return url=this.urls.resolve("auth"),data=_.clone(data,!1),data.type=type?type:"normal",this.removeToken(),this.http.post(url,data).then(function(_this){return function(data){var user;return user=_this.model.make_model("users",data.data),_this.setToken(user.auth_token),_this.setUser(user),user}}(this))},AuthService.prototype.logout=function(){return this.removeToken(),this.clear()},AuthService.prototype.register=function(data,type,existing){var url;return url=this.urls.resolve("auth-register"),data=_.clone(data,!1),data.type=type?type:"public","private"===type&&(data.existing=existing?existing:!1),this.removeToken(),this.http.post(url,data).then(function(_this){return function(response){var user;return user=_this.model.make_model("users",response.data),_this.setToken(user.auth_token),_this.setUser(user),user}}(this))},AuthService.prototype.getInvitation=function(token){return this.rs.invitations.get(token)},AuthService.prototype.acceptInvitiationWithNewUser=function(data){return this.register(data,"private",!1)},AuthService.prototype.acceptInvitiationWithExistingUser=function(data){return this.register(data,"private",!0)},AuthService.prototype.forgotPassword=function(data){var url;return url=this.urls.resolve("users-password-recovery"),data=_.clone(data,!1),this.removeToken(),this.http.post(url,data)},AuthService.prototype.changePasswordFromRecovery=function(data){var url;return url=this.urls.resolve("users-change-password-from-recovery"),data=_.clone(data,!1),this.removeToken(),this.http.post(url,data)},AuthService.prototype.changeEmail=function(data){var url;return url=this.urls.resolve("users-change-email"),data=_.clone(data,!1),this.http.post(url,data)},AuthService.prototype.cancelAccount=function(data){var url;return url=this.urls.resolve("users-cancel-account"),data=_.clone(data,!1),this.http.post(url,data)},AuthService}(taiga.Service),module.service("$tgAuth",AuthService),PublicRegisterMessageDirective=function($config,$navUrls){var template,templateFn;return template=_.template(''),templateFn=function(){var publicRegisterEnabled;return publicRegisterEnabled=$config.get("publicRegisterEnabled"),publicRegisterEnabled?template({url:$navUrls.resolve("register")}):""},{restrict:"AE",scope:{},template:templateFn}},module.directive("tgPublicRegisterMessage",["$tgConfig","$tgNavUrls",PublicRegisterMessageDirective]),LoginDirective=function($auth,$confirm,$location,$config,$routeParams,$navUrls,$events){var link;return link=function($scope,$el){var onError,onSuccess,submit;return onSuccess=function(){var nextUrl;return nextUrl=$routeParams.next&&$routeParams.next!==$navUrls.resolve("login")?$routeParams.next:$navUrls.resolve("home"),$events.setupConnection(),$location.path(nextUrl)},onError=function(){return $confirm.notify("light-error","According to our Oompa Loompas, your username/email or password are incorrect.")},submit=debounce(2e3,function(){return function(event){var data,form,promise;return event.preventDefault(),form=new checksley.Form($el.find("form.login-form")),form.validate()?(data={username:$el.find("form.login-form input[name=username]").val(),password:$el.find("form.login-form input[name=password]").val()},promise=$auth.login(data),promise.then(onSuccess,onError)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgLogin",["$tgAuth","$tgConfirm","$tgLocation","$tgConfig","$routeParams","$tgNavUrls","$tgEvents",LoginDirective]),RegisterDirective=function($auth,$confirm,$location,$navUrls,$config,$analytics){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit;return $config.get("publicRegisterEnabled")||($location.path($navUrls.resolve("not-found")),$location.replace()),$scope.data={},form=$el.find("form").checksley({onlyOneErrorElement:!0}),onSuccessSubmit=function(){return $analytics.trackEvent("auth","register","user registration",1),$confirm.notify("success","Our Oompa Loompas are happy, welcome to Taiga."),$location.path($navUrls.resolve("home"))},onErrorSubmit=function(response){return null!=response.data._error_message&&$confirm.notify("light-error","According to our Oompa Loompas there was an error. "+response.data._error_message),form.setErrors(response.data)},submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?(promise=$auth.register($scope.data),promise.then(onSuccessSubmit,onErrorSubmit)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgRegister",["$tgAuth","$tgConfirm","$tgLocation","$tgNavUrls","$tgConfig","$tgAnalytics",RegisterDirective]),ForgotPasswordDirective=function($auth,$confirm,$location,$navUrls){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit;return $scope.data={},form=$el.find("form").checksley(),onSuccessSubmit=function(response){return $location.path($navUrls.resolve("login")),$confirm.success("Check your inbox!
    We have sent a mail to
    "+response.data.email+"
    with the instructions to set a new password")},onErrorSubmit=function(){return $confirm.notify("light-error","According to our Oompa Loompas, your are not registered yet.")},submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?(promise=$auth.forgotPassword($scope.data),promise.then(onSuccessSubmit,onErrorSubmit)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgForgotPassword",["$tgAuth","$tgConfirm","$tgLocation","$tgNavUrls",ForgotPasswordDirective]),ChangePasswordFromRecoveryDirective=function($auth,$confirm,$location,$params,$navUrls){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit;return $scope.data={},null!=$params.token?($scope.tokenInParams=!0,$scope.data.token=$params.token):$scope.tokenInParams=!1,form=$el.find("form").checksley(),onSuccessSubmit=function(){return $location.path($navUrls.resolve("login")),$confirm.success("Our Oompa Loompas saved your new password.
    Try to sign in with it.")},onErrorSubmit=function(response){return $confirm.notify("light-error","One of our Oompa Loompas say '"+response.data._error_message+"'.")},submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?(promise=$auth.changePasswordFromRecovery($scope.data),promise.then(onSuccessSubmit,onErrorSubmit)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgChangePasswordFromRecovery",["$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls",ChangePasswordFromRecoveryDirective]),InvitationDirective=function($auth,$confirm,$location,$params,$navUrls,$analytics){var link;return link=function($scope,$el){var loginForm,onErrorSubmitLogin,onErrorSubmitRegister,onSuccessSubmitLogin,onSuccessSubmitRegister,promise,registerForm,submitLogin,submitRegister,token;return token=$params.token,promise=$auth.getInvitation(token),promise.then(function(invitation){return $scope.invitation=invitation}),promise.then(null,function(){return $location.path($navUrls.resolve("login")),$confirm.success("Ooops, we have a problem
    Our Oompa Loompas can't find your invitation.")}),$scope.dataLogin={token:token},loginForm=$el.find("form.login-form").checksley({onlyOneErrorElement:!0}),onSuccessSubmitLogin=function(){return $analytics.trackEvent("auth","invitationAccept","invitation accept with existing user",1),$location.path($navUrls.resolve("project",{project:$scope.invitation.project_slug})),$confirm.notify("success","You've successfully joined this project","Welcome to "+_.escape($scope.invitation.project_name))},onErrorSubmitLogin=function(){return $confirm.notify("light-error","According to our Oompa Loompas, your are not registered yet or typed an invalid password.")},submitLogin=debounce(2e3,function(){return function(event){return event.preventDefault(),loginForm.validate()?(promise=$auth.acceptInvitiationWithExistingUser($scope.dataLogin),promise.then(onSuccessSubmitLogin,onErrorSubmitLogin)):void 0}}(this)),$el.on("submit","form.login-form",submitLogin),$el.on("click",".button-login",submitLogin),$scope.dataRegister={token:token},registerForm=$el.find("form.register-form").checksley(),onSuccessSubmitRegister=function(){return $analytics.trackEvent("auth","invitationAccept","invitation accept with new user",1),$location.path($navUrls.resolve("project",{project:$scope.invitation.project_slug})),$confirm.notify("success","You've successfully joined this project","Welcome to "+_.escape($scope.invitation.project_name))},onErrorSubmitRegister=function(){return $confirm.notify("light-error","According to our Oompa Loompas, that username or email is already in use.")},submitRegister=debounce(2e3,function(){return function(event){return event.preventDefault(),registerForm.validate()?(promise=$auth.acceptInvitiationWithNewUser($scope.dataRegister),promise.then(onSuccessSubmitRegister,onErrorSubmitRegister)):void 0}}(this)),$el.on("submit","form.register-form",submitRegister),$el.on("click",".button-register",submitRegister)},{link:link}},module.directive("tgInvitation",["$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls","$tgAnalytics",InvitationDirective]),ChangeEmailDirective=function($repo,$model,$auth,$confirm,$location,$params,$navUrls){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit;return $scope.data={},$scope.data.email_token=$params.email_token,form=$el.find("form").checksley(),onSuccessSubmit=function(){return $repo.queryOne("users",$auth.getUser().id).then(function(){return function(data){return $auth.setUser(data),$location.path($navUrls.resolve("home")),$confirm.success("Our Oompa Loompas updated your email")}}(this))},onErrorSubmit=function(response){return $confirm.notify("error","One of our Oompa Loompas says '"+response.data._error_message+"'.")},submit=function(){var promise;if(form.validate())return promise=$auth.changeEmail($scope.data),promise.then(onSuccessSubmit,onErrorSubmit)},$el.on("submit",function(event){return event.preventDefault(),submit()}),$el.on("click","a.button-change-email",function(event){return event.preventDefault(),submit()})},{link:link}},module.directive("tgChangeEmail",["$tgRepo","$tgModel","$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls",ChangeEmailDirective]),CancelAccountDirective=function($repo,$model,$auth,$confirm,$location,$params,$navUrls){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit;return $scope.data={},$scope.data.cancel_token=$params.cancel_token,form=$el.find("form").checksley(),onSuccessSubmit=function(){return $auth.logout(),$location.path($navUrls.resolve("home")),$confirm.success("Our Oompa Loompas removed your account")},onErrorSubmit=function(response){return $confirm.notify("error","One of our Oompa Loompas says '"+response.data._error_message+"'.")},submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?(promise=$auth.cancelAccount($scope.data),promise.then(onSuccessSubmit,onErrorSubmit)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgCancelAccount",["$tgRepo","$tgModel","$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls",CancelAccountDirective])}.call(this),function(){var module;module=angular.module("taigaBacklog",[])}.call(this),function(){var TaigaMainDirective,bindOnce,groupBy,init,module,taiga,urls;taiga=this.taiga,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,module=angular.module("taigaBase",["taigaLocales"]),TaigaMainDirective=function($rootscope,$window){var link;return link=function(){return $window.onresize=function(){return $rootscope.$broadcast("resize")}},{link:link}},module.directive("tgMain",["$rootScope","$window",TaigaMainDirective]),urls={home:"/",error:"/error","not-found":"/not-found","permission-denied":"/permission-denied",login:"/login","forgot-password":"/forgot-password","change-password":"/change-password/:token","change-email":"/change-email/:token","cancel-account":"/cancel-account/:token",register:"/register",invitation:"/invitation/:token","create-project":"/create-project",profile:"/:user",project:"/project/:project","project-backlog":"/project/:project/backlog","project-taskboard":"/project/:project/taskboard/:sprint","project-kanban":"/project/:project/kanban","project-issues":"/project/:project/issues","project-search":"/project/:project/search","project-userstories-detail":"/project/:project/us/:ref","project-tasks-detail":"/project/:project/task/:ref","project-issues-detail":"/project/:project/issue/:ref","project-wiki":"/project/:project/wiki","project-wiki-page":"/project/:project/wiki/:slug","project-team":"/project/:project/team","project-admin-home":"/project/:project/admin/project-profile/details","project-admin-project-profile-details":"/project/:project/admin/project-profile/details","project-admin-project-profile-default-values":"/project/:project/admin/project-profile/default-values","project-admin-project-profile-modules":"/project/:project/admin/project-profile/modules","project-admin-project-values-us-status":"/project/:project/admin/project-values/us-status","project-admin-project-values-us-points":"/project/:project/admin/project-values/us-points","project-admin-project-values-task-status":"/project/:project/admin/project-values/task-status","project-admin-project-values-issue-status":"/project/:project/admin/project-values/issue-status","project-admin-project-values-issue-types":"/project/:project/admin/project-values/issue-types","project-admin-project-values-issue-priorities":"/project/:project/admin/project-values/issue-priorities","project-admin-project-values-issue-severities":"/project/:project/admin/project-values/issue-severities","project-admin-memberships":"/project/:project/admin/memberships","project-admin-roles":"/project/:project/admin/roles","project-admin-third-parties-github":"/project/:project/admin/third-parties/github","project-admin-third-parties-gitlab":"/project/:project/admin/third-parties/gitlab","project-admin-third-parties-bitbucket":"/project/:project/admin/third-parties/bitbucket","user-settings-user-profile":"/project/:project/user-settings/user-profile","user-settings-user-change-password":"/project/:project/user-settings/user-change-password","user-settings-user-avatar":"/project/:project/user-settings/user-avatar","user-settings-mail-notifications":"/project/:project/user-settings/mail-notifications"},init=function($log,$navurls){return $log.debug("Initialize navigation urls"),$navurls.update(urls) +},module.run(["$log","$tgNavUrls",init])}.call(this),function(){var AnimationFrame,AppTitle,CheckPermissionDirective,LimitLineLengthDirective,ProjectUrl,Qqueue,SelectedText,ToggleCommentDirective,module,taiga,__slice=[].slice;taiga=this.taiga,module=angular.module("taigaCommon",[]),SelectedText=function($window,$document){var get;return get=function(){return $window.getSelection?$window.getSelection().toString():$document.selection?$document.selection.createRange().text:""},{get:get}},module.factory("$selectedText",["$window","$document",SelectedText]),CheckPermissionDirective=function(){var link,render;return render=function($el,project,permission){return project.my_permissions.indexOf(permission)>-1?$el.removeClass("hidden"):void 0},link=function($scope,$el,$attrs){var permission;return $el.addClass("hidden"),permission=$attrs.tgCheckPermission,$scope.$watch("project",function(project){return null!=project?render($el,project,permission):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgCheckPermission",CheckPermissionDirective),AnimationFrame=function(){var add,animationFrame,performAnimation,tail;return animationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,performAnimation=function(){return function(){var fn;return fn=tail.shift(),fn(),tail.length?animationFrame(performAnimation):void 0}}(this),tail=[],add=function(){var fn,_i,_len,_results;for(_results=[],_i=0,_len=arguments.length;_len>_i;_i++)fn=arguments[_i],tail.push(fn),_results.push(1===tail.length?animationFrame(performAnimation):void 0);return _results},{add:add}},module.factory("animationFrame",AnimationFrame),ToggleCommentDirective=function(){var link;return link=function($scope,$el){return $el.find("textarea").on("focus",function(){return $el.addClass("active")})},{link:link}},module.directive("tgToggleComment",ToggleCommentDirective),AppTitle=function(){var set;return set=function(text){return $("title").text(text)},{set:set}},module.factory("$appTitle",AppTitle),ProjectUrl=function($navurls){var get;return get=function(project){var ctx;return ctx={project:project.slug},project.is_backlog_activated&&project.my_permissions.indexOf("view_us")>-1?$navurls.resolve("project-backlog",ctx):project.is_kanban_activated&&project.my_permissions.indexOf("view_us")>-1?$navurls.resolve("project-kanban",ctx):project.is_wiki_activated&&project.my_permissions.indexOf("view_wiki_pages")>-1?$navurls.resolve("project-wiki",ctx):project.is_issues_activated&&project.my_permissions.indexOf("view_issues")>-1?$navurls.resolve("project-issues",ctx):$navurls.resolve("project",ctx)},{get:get}},module.factory("$projectUrl",["$tgNavUrls",ProjectUrl]),LimitLineLengthDirective=function(){var link;return link=function($scope,$el){var maxColsPerLine;return maxColsPerLine=parseInt($el.attr("cols")),$el.on("keyup",function(event){var code,lines;return code=event.keyCode,lines=$el.val().split("\n"),_.each(lines,function(line,index){return lines[index]=line.substring(0,maxColsPerLine-2)}),$el.val(lines.join("\n"))})},{link:link}},module.directive("tgLimitLineLength",LimitLineLengthDirective),Qqueue=function($q){var deferred,lastPromise,qqueue;return deferred=$q.defer(),deferred.resolve(),lastPromise=deferred.promise,qqueue={bindAdd:function(_this){return function(fn){return function(){var args;return args=1<=arguments.length?__slice.call(arguments,0):[],lastPromise=lastPromise.then(function(){return fn.apply(_this,args)})}}}(this),add:function(){return function(fn){return lastPromise=lastPromise?lastPromise.then(fn):fn(),qqueue}}(this)}},module.factory("$tgQqueue",["$q",Qqueue])}.call(this),function(){var EventsProvider,EventsService,bindMethods,module,startswith,taiga;taiga=this.taiga,startswith=this.taiga.startswith,bindMethods=this.taiga.bindMethods,module=angular.module("taigaEvents",[]),EventsService=function(){function EventsService(win,log,config,auth){this.win=win,this.log=log,this.config=config,this.auth=auth,bindMethods(this)}return EventsService.prototype.initialize=function(sessionId){return this.sessionId=sessionId,this.subscriptions={},this.connected=!1,this.error=!1,this.pendingMessages=[],void 0===this.win.WebSocket?this.log.info("WebSockets not supported on your browser"):void 0},EventsService.prototype.setupConnection=function(){var loc,path,scheme,url;return this.stopExistingConnection(),(url=this.config.get("eventsUrl"))?(startswith(url,"ws:")||startswith(url,"wss:")||(loc=this.win.location,scheme="https:"===loc.protocol?"wss:":"ws:",path=_.str.ltrim(url,"/"),url=""+scheme+"//"+loc.host+"/"+path),this.ws=new this.win.WebSocket(url),this.ws.addEventListener("open",this.onOpen),this.ws.addEventListener("message",this.onMessage),this.ws.addEventListener("error",this.onError),this.ws.addEventListener("close",this.onClose)):void 0},EventsService.prototype.stopExistingConnection=function(){return void 0!==this.ws?(this.ws.removeEventListener("open",this.onOpen),this.ws.removeEventListener("close",this.onClose),this.ws.removeEventListener("error",this.onError),this.ws.removeEventListener("message",this.onMessage),this.ws.close(),delete this.ws):void 0},EventsService.prototype.serialize=function(message){return _.isObject(message)?JSON.stringify(message):message},EventsService.prototype.sendMessage=function(message){var messages,msg,_i,_len,_results;if(this.pendingMessages.push(message),this.connected){for(messages=_.map(this.pendingMessages,this.serialize),this.pendingMessages=[],_results=[],_i=0,_len=messages.length;_len>_i;_i++)msg=messages[_i],_results.push(this.ws.send(msg));return _results}},EventsService.prototype.subscribe=function(scope,routingKey,callback){var message,subscription;if(!this.error)return this.log.debug("Subscribe to: "+routingKey),subscription={scope:scope,routingKey:routingKey,callback:_.debounce(callback,500,{leading:!0,trailing:!1})},message={cmd:"subscribe",routing_key:routingKey},this.subscriptions[routingKey]=subscription,this.sendMessage(message),scope.$on("$destroy",function(_this){return function(){return _this.unsubscribe(routingKey)}}(this))},EventsService.prototype.unsubscribe=function(routingKey){var message;if(!this.error)return this.log.debug("Unsubscribe from: "+routingKey),message={cmd:"unsubscribe",routing_key:routingKey},this.sendMessage(message)},EventsService.prototype.onOpen=function(){var message,token;return this.connected=!0,this.log.debug("WebSocket connection opened"),token=this.auth.getToken(),message={cmd:"auth",data:{token:token,sessionId:this.sessionId}},this.sendMessage(message)},EventsService.prototype.onMessage=function(event){var data,routingKey,subscription;return this.log.debug("WebSocket message received: "+event.data),data=JSON.parse(event.data),routingKey=data.routing_key,null!=this.subscriptions[routingKey]?(subscription=this.subscriptions[routingKey],subscription.scope.$apply(function(){return subscription.callback(data.data)})):void 0},EventsService.prototype.onError=function(error){return this.log.error("WebSocket error: "+error),this.error=!0},EventsService.prototype.onClose=function(){return this.log.debug("WebSocket closed."),this.connected=!1},EventsService}(),EventsProvider=function(){function EventsProvider(){}return EventsProvider.prototype.setSessionId=function(sessionId){return this.sessionId=sessionId},EventsProvider.prototype.$get=function($win,$log,$conf,$auth){var service;return service=new EventsService($win,$log,$conf,$auth),service.initialize(this.sessionId),service},EventsProvider.prototype.$get.$inject=["$window","$log","$tgConfig","$tgAuth"],EventsProvider}(),module.provider("$tgEvents",EventsProvider)}.call(this),function(){var FeedbackDirective,bindOnce,debounce,groupBy,mixOf,module,taiga,trim;taiga=this.taiga,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,mixOf=this.taiga.mixOf,debounce=this.taiga.debounce,trim=this.taiga.trim,module=angular.module("taigaFeedback",[]),FeedbackDirective=function($lightboxService,$repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley(),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.create("feedback",$scope.feedback),promise.then(function(){return $loading.finish(submitButton),$lightboxService.close($el),$confirm.notify("success","\\o/ we'll be happy to read your")}),promise.then(null,function(){return $loading.finish(submitButton),$confirm.notify("error")})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("feedback:show",function(){return $scope.$apply(function(){return $scope.feedback={}}),$lightboxService.open($el),$el.find("textarea").focus()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbFeedback",["lightboxService","$tgRepo","$tgConfirm","$tgLoading",FeedbackDirective])}.call(this),function(){var module;module=angular.module("taigaIntegrations",[])}.call(this),function(){var module;module=angular.module("taigaIssues",[])}.call(this),function(){var module;module=angular.module("taigaKanban",[])}.call(this),function(){var module;module=angular.module("taigaLocales",[])}.call(this),function(){var ProjectMenuDirective,ProjectsNavigationController,ProjectsNavigationDirective,bindOnce,groupBy,module,taiga,timeout,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,timeout=this.taiga.timeout,module=angular.module("taigaNavMenu",[]),ProjectsNavigationController=function(_super){function ProjectsNavigationController(scope,rootscope,rs,navurls,projectUrl){var promise;this.scope=scope,this.rootscope=rootscope,this.rs=rs,this.navurls=navurls,this.projectUrl=projectUrl,promise=this.loadInitialData(),promise.then(null,function(){return console.log("FAIL")}),this.scope.$on("projects:reload",function(_this){return function(){return _this.loadInitialData()}}(this)),this.scope.$on("project:loaded",function(_this){return function(){return _this.loadInitialData()}}(this))}return __extends(ProjectsNavigationController,_super),ProjectsNavigationController.$inject=["$scope","$rootScope","$tgResources","$tgNavUrls","$projectUrl"],ProjectsNavigationController.prototype.loadInitialData=function(){return this.rs.projects.list().then(function(_this){return function(projects){var project,_i,_len;for(_i=0,_len=projects.length;_len>_i;_i++)project=projects[_i],project.url=_this.projectUrl.get(project);return _this.scope.projects=projects,_this.scope.filteredProjects=projects,_this.scope.filterText="",projects}}(this))},ProjectsNavigationController.prototype.newProject=function(){return this.scope.$apply(function(_this){return function(){return _this.rootscope.$broadcast("projects:create")}}(this))},ProjectsNavigationController.prototype.filterProjects=function(text){return this.scope.filteredProjects=_.filter(this.scope.projects,function(project){return project.name.toLowerCase().indexOf(text)>-1}),this.scope.filterText=text,this.rootscope.$broadcast("projects:filtered")},ProjectsNavigationController}(taiga.Controller),module.controller("ProjectsNavigationController",ProjectsNavigationController),ProjectsNavigationDirective=function($rootscope,animationFrame,$timeout,tgLoader,$location,$compile){var baseTemplate,hideMenu,link,loadingStart,overlay,projectsTemplate;return baseTemplate=_.template('

    Your projects

    \n
    \n
    \n \n \n
    \n
    \n\n\n\n
    \n \n
    \n
      \n
    \n
    \n \n
    '),projectsTemplate=_.template('<% _.each(projects, function(project) { %>\n
    +
    +
    +
    +

    Choose a template

    +

    Which template would fit better in your project?

    +
    +
    +
    +
    + + +

    {{ template.description }}

    +
    +
    +
    +
    Next
    +
    +
    +
    +

    Create Project

    +

    Fresh and clean. So exciting!

    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    Template selectionName and description + +
    +
    +
    +
    +
    +
  • \n \n <%- project.name %>\n \n \n
  • \n<% }) %>'),overlay=$(".projects-nav-overlay"),loadingStart=0,hideMenu=function(){var difftime,timeoutValue;return overlay.is(":visible")?(difftime=(new Date).getTime()-loadingStart,timeoutValue=0,1e3>difftime&&(timeoutValue=1e3-timeoutValue),timeout(timeoutValue,function(){return overlay.one("transitionend",function(){return $(document.body).removeClass("loading-project open-projects-nav closed-projects-nav").css("overflow-x","visible"),overlay.hide()}),$(document.body).addClass("closed-projects-nav"),tgLoader.disablePreventLoading()})):void 0},link=function($scope,$el,$attrs,$ctrls){var $ctrl,render,renderProjects;return $ctrl=$ctrls[0],$rootscope.$on("project:loaded",hideMenu),renderProjects=function(projects){var html;return html=projectsTemplate({projects:projects}),$el.find(".projects-list").html(html),$scope.$emit("regenerate:project-pagination")},render=function(projects){return $el.html($compile(baseTemplate())($scope)),renderProjects(projects)},overlay.on("click",function(){return hideMenu()}),$(document).on("keydown",function(){return function(e){var code;return code=e.keyCode?e.keyCode:e.which,27===code?hideMenu():void 0}}(this)),$scope.$on("nav:projects-list:open",function(){return $(document.body).hasClass("open-projects-nav")||animationFrame.add(function(){return function(){return overlay.show()}}(this)),animationFrame.add(function(){return function(){return $(document.body).css("overflow-x","hidden")}}(this),function(){return function(){return $(document.body).toggleClass("open-projects-nav")}}(this))}),$el.on("click",".projects-list > li > a",function(event){var currentUrl,nextUrl,target;return target=angular.element(event.currentTarget),nextUrl=target.prop("href"),currentUrl=$location.absUrl(),nextUrl===currentUrl?void hideMenu():($(document.body).addClass("loading-project"),tgLoader.preventLoading(),loadingStart=(new Date).getTime())}),$el.on("click",".create-project-button .button",function(event){return event.preventDefault(),$ctrl.newProject()}),$el.on("keyup",".search-project",function(event){var target;return target=angular.element(event.currentTarget),$ctrl.filterProjects(target.val())}),$scope.$on("projects:filtered",function(){return renderProjects($scope.filteredProjects)}),$scope.$watch("projects",function(projects){return null!=projects?render(projects):void 0})},{require:["tgProjectsNav"],controller:ProjectsNavigationController,link:link}},module.directive("tgProjectsNav",["$rootScope","animationFrame","$timeout","tgLoader","$tgLocation","$compile",ProjectsNavigationDirective]),ProjectMenuDirective=function($log,$compile,$auth,$rootscope,$tgAuth,$location,$navUrls,$config){var getSectionName,link,mainTemplate,menuEntriesTemplate,renderMainMenu,renderMenuEntries,videoConferenceUrl;return menuEntriesTemplate=_.template(''),mainTemplate=_.template('\n'),getSectionName=function($el,sectionName,project){var oldSectionName,_ref;return oldSectionName=null!=(_ref=$el.find("a.active").parent().attr("id"))?_ref.replace("nav-",""):void 0,"backlog-kanban"===sectionName&&("backlog"===oldSectionName||"kanban"===oldSectionName?sectionName=oldSectionName:project.is_backlog_activated&&!project.is_kanban_activated?sectionName="backlog":!project.is_backlog_activated&&project.is_kanban_activated&&(sectionName="kanban")),sectionName},renderMainMenu=function($el){var html;return html=mainTemplate({}),$el.html(html)},renderMenuEntries=function($el,targetScope,project){var container,ctx,dom,sectionName;return null==project&&(project={}),container=$el.find(".menu-container"),sectionName=getSectionName($el,targetScope.section,project),ctx={user:$auth.getUser(),project:project,feedbackEnabled:$config.get("feedbackEnabled")},dom=$compile(menuEntriesTemplate(ctx))(targetScope),dom.find("a.active").removeClass("active"),dom.find("#nav-"+sectionName+" > a").addClass("active"),container.replaceWith(dom)},videoConferenceUrl=function(project){var baseUrl,url;if("appear-in"===project.videoconferences)baseUrl="https://appear.in/";else{if("talky"!==project.videoconferences)return"";baseUrl="https://talky.io/"}return url=project.videoconferences_salt?""+project.slug+"-"+project.videoconferences_salt:""+project.slug,baseUrl+url},link=function($scope,$el){var project;return renderMainMenu($el),project=null,$el.on("click",".logo",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),$rootscope.$broadcast("nav:projects-list:open")}),$el.on("click",".user-settings .avatar",function(event){return event.preventDefault(),$el.find(".user-settings .popover").popover().open()}),$el.on("click",".logout",function(event){return event.preventDefault(),$auth.logout(),$scope.$apply(function(){return $location.path($navUrls.resolve("login"))})}),$el.on("click","#nav-search > a",function(event){return event.preventDefault(),$rootscope.$broadcast("search-box:show",project)}),$el.on("click",".feedback",function(event){return event.preventDefault(),$rootscope.$broadcast("feedback:show")}),$scope.$on("projects:loaded",function(listener){return $el.addClass("hidden"),listener.stopPropagation()}),$scope.$on("project:loaded",function(ctx,newProject){return project=newProject,$el.hasClass("hidden")&&$el.removeClass("hidden"),project.videoconferenceUrl=videoConferenceUrl(project),renderMenuEntries($el,ctx.targetScope,project)})},{link:link}},module.directive("tgProjectMenu",["$log","$compile","$tgAuth","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","$tgConfig",ProjectMenuDirective])}.call(this),function(){var module;module=angular.module("taigaProject",[])}.call(this),function(){var RelatedTaskAssignedToInlineEditionDirective,RelatedTaskCreateButtonDirective,RelatedTaskCreateFormDirective,RelatedTaskRowDirective,RelatedTasksDirective,debounce,module,taiga,trim;taiga=this.taiga,trim=this.taiga.trim,debounce=this.taiga.debounce,module=angular.module("taigaRelatedTasks",[]),RelatedTaskRowDirective=function($repo,$compile,$confirm,$rootscope,$loading){var link,templateEdit,templateView;return templateView=_.template('
    \n
    \n \n \n #<%- task.ref %>\n <%- task.subject %>\n \n
    \n <% if(perms.modify_task) { %>\n \n <% } %>\n <% if(perms.delete_task) { %>\n \n <% } %>\n
    \n
    \n
    \n\n
    \n
    \n
    \n <% if(perms.modify_task) { %>\n \n <% } %>\n
    \n
    '),templateEdit=_.template('
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    '),link=function($scope,$el,$attrs,$model){var renderEdit,renderView,saveTask;return saveTask=debounce(2e3,function(task){var promise;return task.subject=$el.find("input").val(),$loading.start($el.find(".task-name")),promise=$repo.save(task),promise.then(function(){return function(){return $loading.finish($el.find(".task-name")),$confirm.notify("success"),$rootscope.$broadcast("related-tasks:update")}}(this)),promise.then(null,function(){return function(){return $loading.finish($el.find(".task-name")),$el.find("input").val(task.subject),$confirm.notify("error")}}(this)),promise}),renderEdit=function(task){return $el.html($compile(templateEdit({task:task}))($scope)),$el.on("keyup","input",function(event){return 13===event.keyCode?saveTask($model.$modelValue).then(function(){return renderView($model.$modelValue)}):27===event.keyCode?renderView($model.$modelValue):void 0}),$el.on("click",".icon-floppy",function(){return saveTask($model.$modelValue).then(function(){return renderView($model.$modelValue)})}),$el.on("click",".cancel-edit",function(){return renderView($model.$modelValue)})},renderView=function(task){var perms;return $el.off(),perms={modify_task:-1!==$scope.project.my_permissions.indexOf("modify_task"),delete_task:-1!==$scope.project.my_permissions.indexOf("delete_task")},$el.html($compile(templateView({task:task,perms:perms}))($scope)),$el.on("click",".icon-edit",function(){return renderEdit($model.$modelValue),$el.find("input").focus().select()}),$el.on("click",".delete-task",function(){var message,title;return task=$model.$modelValue,title="Delete Task",message=task.subject,$confirm.askOnDelete(title,message).then(function(finish){var promise;return promise=$repo.remove(task),promise.then(function(){return finish(),$confirm.notify("success"),$scope.$emit("related-tasks:delete")}),promise.then(null,function(){return $confirm.notify("error")})})})},$scope.$watch($attrs.ngModel,function(val){return val?renderView(val):void 0}),$scope.$on("related-tasks:assigned-to-changed",function(){return $rootscope.$broadcast("related-tasks:update")}),$scope.$on("related-tasks:status-changed",function(){return $rootscope.$broadcast("related-tasks:update")}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel"}},module.directive("tgRelatedTaskRow",["$tgRepo","$compile","$tgConfirm","$rootScope","$tgLoading","$tgAnalytics",RelatedTaskRowDirective]),RelatedTaskCreateFormDirective=function($repo,$compile,$confirm,$tgmodel,$loading,$analytics){var link,newTask,template;return template=_.template('
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    '),newTask={subject:"",assigned_to:null},link=function($scope,$el){var createTask,render;return createTask=debounce(2e3,function(task){var promise;return task.subject=$el.find("input").val(),task.assigned_to=$scope.newTask.assigned_to,task.status=$scope.newTask.status,$scope.newTask.status=$scope.project.default_task_status,$scope.newTask.assigned_to=null,$loading.start($el.find(".task-name")),promise=$repo.create("tasks",task),promise.then(function(){return $analytics.trackEvent("task","create","create task on userstory",1),$loading.finish($el.find(".task-name")),$scope.$emit("related-tasks:add"),$confirm.notify("success")}),promise.then(null,function(){return $el.find("input").val(task.subject),$loading.finish($el.find(".task-name")),$confirm.notify("error")}),promise}),render=function(){return $el.off(),$el.html($compile(template())($scope)),$el.find("input").focus().select(),$el.addClass("active"),$el.on("keyup","input",function(event){return 13===event.keyCode?createTask(newTask).then(function(){return render()}):27===event.keyCode?$el.html(""):void 0}),$el.on("click",".icon-delete",function(){return $el.html("")}),$el.on("click",".icon-floppy",function(){return createTask(newTask).then(function(){return $el.html("")})})},taiga.bindOnce($scope,"us",function(){return newTask.status=$scope.project.default_task_status,newTask.project=$scope.project.id,newTask.user_story=$scope.us.id,$scope.newTask=$tgmodel.make_model("tasks",newTask),$el.html("")}),$scope.$on("related-tasks:show-form",function(){return render()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRelatedTaskCreateForm",["$tgRepo","$compile","$tgConfirm","$tgModel","$tgLoading","$tgAnalytics",RelatedTaskCreateFormDirective]),RelatedTaskCreateButtonDirective=function(){var link,template;return template=_.template(''),link=function($scope,$el){return $scope.$watch("project",function(val){return val?($el.off(),$el.html(-1!==$scope.project.my_permissions.indexOf("add_task")?template():""),$el.on("click",".icon",function(){return $scope.$emit("related-tasks:add-new-clicked")})):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRelatedTaskCreateButton",["$tgRepo","$compile","$tgConfirm","$tgModel",RelatedTaskCreateButtonDirective]),RelatedTasksDirective=function($repo,$rs,$rootscope){var link;return link=function($scope,$el){var loadTasks;return loadTasks=function(){return $rs.tasks.list($scope.projectId,null,$scope.usId).then(function(){return function(tasks){return $scope.tasks=tasks,tasks +}}(this))},$scope.$on("related-tasks:add",function(){return loadTasks().then(function(){return $rootscope.$broadcast("related-tasks:update")})}),$scope.$on("related-tasks:delete",function(){return loadTasks().then(function(){return $rootscope.$broadcast("related-tasks:update")})}),$scope.$on("related-tasks:add-new-clicked",function(){return $scope.$broadcast("related-tasks:show-form")}),taiga.bindOnce($scope,"us",function(){return loadTasks()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRelatedTasks",["$tgRepo","$tgResources","$rootScope",RelatedTasksDirective]),RelatedTaskAssignedToInlineEditionDirective=function($repo,$rootscope){var link,template;return template=_.template('<%- name %>\n
    <%- name %>
    '),link=function($scope,$el,$attrs){var $ctrl,autoSave,notAutoSave,task,updateRelatedTask;return updateRelatedTask=function(task){var ctx,member;return ctx={name:"Unassigned",imgurl:"/images/unnamed.png"},member=$scope.usersById[task.assigned_to],member&&(ctx.imgurl=member.photo,ctx.name=member.full_name_display),$el.find(".avatar").html(template(ctx)),$el.find(".task-assignedto").attr("title",ctx.name)},$ctrl=$el.controller(),task=$scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition),notAutoSave=$scope.$eval($attrs.notAutoSave),autoSave=!notAutoSave,updateRelatedTask(task),$el.on("click",".task-assignedto",function(){return $rootscope.$broadcast("assigned-to:add",task)}),taiga.bindOnce($scope,"project",function(project){return-1===project.my_permissions.indexOf("modify_task")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0}),$scope.$on("assigned-to:added",debounce(2e3,function(){return function(ctx,userId,updatedRelatedTask){return updatedRelatedTask.id===task.id?(updatedRelatedTask.assigned_to=userId,autoSave&&$repo.save(updatedRelatedTask).then(function(){return $scope.$emit("related-tasks:assigned-to-changed")}),updateRelatedTask(updatedRelatedTask)):void 0}}(this))),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRelatedTaskAssignedToInlineEdition",["$tgRepo","$rootScope",RelatedTaskAssignedToInlineEditionDirective])}.call(this),function(){var ResourcesService,initResources,initUrls,module,taiga,urls,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,ResourcesService=function(_super){function ResourcesService(){return ResourcesService.__super__.constructor.apply(this,arguments)}return __extends(ResourcesService,_super),ResourcesService}(taiga.Service),urls={auth:"/auth","auth-register":"/auth/register",invitations:"/invitations",permissions:"/permissions",roles:"/roles",projects:"/projects",memberships:"/memberships","notify-policies":"/notify-policies","bulk-create-memberships":"/memberships/bulk_create",milestones:"/milestones",userstories:"/userstories","bulk-create-us":"/userstories/bulk_create","bulk-update-us-backlog-order":"/userstories/bulk_update_backlog_order","bulk-update-us-sprint-order":"/userstories/bulk_update_sprint_order","bulk-update-us-kanban-order":"/userstories/bulk_update_kanban_order","userstories-restore":"/userstories/%s/restore",tasks:"/tasks","bulk-create-tasks":"/tasks/bulk_create","bulk-update-task-taskboard-order":"/tasks/bulk_update_taskboard_order","tasks-restore":"/tasks/%s/restore",issues:"/issues","bulk-create-issues":"/issues/bulk_create","issues-restore":"/issues/%s/restore",wiki:"/wiki","wiki-restore":"/wiki/%s/restore","wiki-links":"/wiki-links","choices/userstory-statuses":"/userstory-statuses","choices/userstory-statuses/bulk-update-order":"/userstory-statuses/bulk_update_order","choices/points":"/points","choices/points/bulk-update-order":"/points/bulk_update_order","choices/task-statuses":"/task-statuses","choices/task-statuses/bulk-update-order":"/task-statuses/bulk_update_order","choices/issue-statuses":"/issue-statuses","choices/issue-statuses/bulk-update-order":"/issue-statuses/bulk_update_order","choices/issue-types":"/issue-types","choices/issue-types/bulk-update-order":"/issue-types/bulk_update_order","choices/priorities":"/priorities","choices/priorities/bulk-update-order":"/priorities/bulk_update_order","choices/severities":"/severities","choices/severities/bulk-update-order":"/severities/bulk_update_order",search:"/search",sites:"/sites","project-templates":"/project-templates","site-members":"/site-members","site-projects":"/site-projects",users:"/users","users-password-recovery":"/users/password_recovery","users-change-password-from-recovery":"/users/change_password_from_recovery","users-change-password":"/users/change_password","users-change-email":"/users/change_email","users-cancel-account":"/users/cancel","user-storage":"/user-storage",resolver:"/resolver","userstory-statuses":"/userstory-statuses",points:"/points","task-statuses":"/task-statuses","issue-statuses":"/issue-statuses","issue-types":"/issue-types",priorities:"/priorities",severities:"/severities","project-modules":"/projects/%s/modules","history/us":"/history/userstory","history/issue":"/history/issue","history/task":"/history/task","history/wiki":"/history/wiki","attachments/us":"/userstories/attachments","attachments/issue":"/issues/attachments","attachments/task":"/tasks/attachments","attachments/wiki_page":"/wiki/attachments",feedback:"/feedback"},initUrls=function($log,$urls){return $log.debug("Initialize api urls"),$urls.update(urls)},initResources=function($log,$rs){var provider,providers,_i,_len,_results;for($log.debug("Initialize resources"),providers=_.toArray(arguments).slice(2),_results=[],_i=0,_len=providers.length;_len>_i;_i++)provider=providers[_i],_results.push(provider($rs));return _results},module=angular.module("taigaResources",["taigaBase"]),module.service("$tgResources",ResourcesService),module.run(["$log","$tgUrls",initUrls]),module.run(["$log","$tgResources","$tgProjectsResourcesProvider","$tgMembershipsResourcesProvider","$tgNotifyPoliciesResourcesProvider","$tgInvitationsResourcesProvider","$tgRolesResourcesProvider","$tgUserSettingsResourcesProvider","$tgSprintsResourcesProvider","$tgUserstoriesResourcesProvider","$tgTasksResourcesProvider","$tgIssuesResourcesProvider","$tgWikiResourcesProvider","$tgSearchResourcesProvider","$tgAttachmentsResourcesProvider","$tgMdRenderResourcesProvider","$tgHistoryResourcesProvider","$tgKanbanResourcesProvider","$tgModulesResourcesProvider",initResources])}.call(this),function(){var SearchBoxDirective,SearchController,SearchDirective,bindOnce,debounce,debounceLeading,groupBy,mixOf,module,taiga,trim,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,mixOf=this.taiga.mixOf,debounceLeading=this.taiga.debounceLeading,trim=this.taiga.trim,debounce=this.taiga.debounce,module=angular.module("taigaSearch",[]),SearchController=function(_super){function SearchController(scope,repo,rs,params,q,location,appTitle,navUrls,tgLoader){var loadSearchData,promise;this.scope=scope,this.repo=repo,this.rs=rs,this.params=params,this.q=q,this.location=location,this.appTitle=appTitle,this.navUrls=navUrls,this.tgLoader=tgLoader,this.scope.sectionName="Search",promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Search")}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.searchTerm="",loadSearchData=debounceLeading(100,function(_this){return function(t){return _this.loadSearchData(t)}}(this)),this.scope.$watch("searchTerm",function(_this){return function(term){return term?loadSearchData(term):_this.tgLoader.pageLoaded()}}(this))}return __extends(SearchController,_super),SearchController.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$q","$tgLocation","$appTitle","$tgNavUrls","tgLoader"],SearchController.prototype.loadFilters=function(){var defered;return defered=this.q.defer(),defered.resolve(),defered.promise},SearchController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.issueStatusById=groupBy(project.issue_statuses,function(x){return x.id}),_this.scope.taskStatusById=groupBy(project.task_statuses,function(x){return x.id}),_this.scope.severityById=groupBy(project.severities,function(x){return x.id}),_this.scope.priorityById=groupBy(project.priorities,function(x){return x.id}),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),_this.scope.usStatusById=groupBy(project.us_statuses,function(x){return x.id}),project}}(this))},SearchController.prototype.loadSearchData=function(term){var promise;return promise=this.rs.search["do"](this.scope.projectId,term).then(function(_this){return function(data){return _this.scope.searchResults=data,data}}(this)),promise["finally"](function(_this){return function(){return _this.tgLoader.pageLoaded()}}(this)),promise},SearchController.prototype.loadInitialData=function(){return this.loadProject().then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.fillUsersAndRoles(project.users,project.roles)}}(this))},SearchController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("SearchController",SearchController),SearchBoxDirective=function($lightboxService,$navurls,$location,$route){var link;return link=function($scope,$el){var project,submit;return project=null,submit=debounce(2e3,function(){return function(event){var form,text,url;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?(text=$el.find("#search-text").val(),url=$navurls.resolve("project-search",{project:project.slug}),$lightboxService.close($el),$scope.$apply(function(){return $location.path(url),$location.search("text",text).path(url),$route.reload()})):void 0}}(this)),$scope.$on("search-box:show",function(ctx,newProject){return project=newProject,$lightboxService.open($el),$el.find("#search-text").val("")}),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgSearchBox",["lightboxService","$tgNavUrls","$tgLocation","$route",SearchBoxDirective]),SearchDirective=function($log,$compile,$templatecache,$routeparams,$location){var link,linkTable;return linkTable=function($scope,$el){var getActiveSection,lastSeatchResults,markSectionTabActive,renderFilterTabs,renderTableContent,tabsDom,templates;return tabsDom=$el.find("section.search-filter"),lastSeatchResults=null,getActiveSection=function(data){var maxVal,name,selectedSectionData,selectedSectionName,value;maxVal=0,selectedSectionName=null,selectedSectionData=null;for(name in data)value=data[name],"count"!==name&&value.length>maxVal&&(maxVal=value.length,selectedSectionName=name,selectedSectionData=value);return 0===maxVal?{name:"userstories",value:[]}:{name:selectedSectionName,value:selectedSectionData}},renderFilterTabs=function(data){var name,value,_results;_results=[];for(name in data)value=data[name],"count"!==name&&_results.push(tabsDom.find("li."+name+" .num").html(value.length));return _results},markSectionTabActive=function(section){return tabsDom.find("a.active").removeClass("active"),tabsDom.find("li."+section.name+" a").addClass("active")},templates={issues:$templatecache.get("search-issues"),tasks:$templatecache.get("search-tasks"),userstories:$templatecache.get("search-userstories"),wikipages:$templatecache.get("search-wikipages")},renderTableContent=function(section){var element,oldElements,oldScope,scope,template;return oldElements=$el.find(".search-result-table").children(),oldScope=oldElements.scope(),oldScope&&(oldScope.$destroy(),oldElements.remove()),scope=$scope.$new(),scope[section.name]=section.value,template=angular.element.parseHTML(trim(templates[section.name])),element=$compile(template)(scope),$el.find(".search-result-table").html(element)},$scope.$watch("searchResults",function(data){var activeSection;return lastSeatchResults=data,activeSection=getActiveSection(data),renderFilterTabs(data),renderTableContent(activeSection),markSectionTabActive(activeSection)}),$scope.$watch("searchTerm",function(searchTerm){return searchTerm?$location.search("text",searchTerm):void 0}),$el.on("click",".search-filter li > a",function(event){var section,sectionData,sectionName,target;return event.preventDefault(),target=angular.element(event.currentTarget),sectionName=target.parent().data("name"),sectionData=lastSeatchResults[sectionName],section={name:sectionName,value:sectionData},$scope.$apply(function(){return renderTableContent(section),markSectionTabActive(section)})})},link=function($scope,$el,$attrs){var $ctrl,searchText;return $ctrl=$el.controller(),linkTable($scope,$el,$attrs,$ctrl),searchText=$routeparams.text,$scope.$watch("projectId",function(projectId){return null!=projectId?$scope.searchTerm=searchText:void 0})},{link:link}},module.directive("tgSearch",["$log","$compile","$templateCache","$routeParams","$tgLocation",SearchDirective])}.call(this),function(){var module;module=angular.module("taigaTaskboard",[])}.call(this),function(){var module;module=angular.module("taigaTasks",[])}.call(this),function(){var module;module=angular.module("taigaTeam",[])}.call(this),function(){var module;module=angular.module("taigaUserSettings",[])}.call(this),function(){var module;module=angular.module("taigaUserStories",[])}.call(this),function(){var module;module=angular.module("taigaWiki",[])}.call(this),function(){var AnalyticsService,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,module=angular.module("taigaCommon"),AnalyticsService=function(_super){function AnalyticsService(rootscope,log,config,win,doc,location){var conf;this.rootscope=rootscope,this.log=log,this.config=config,this.win=win,this.doc=doc,this.location=location,this.initialized=!1,conf=this.config.get("analytics",{}),this.accountId=conf.accountId,this.pageEvent=conf.pageEvent||"$routeChangeSuccess",this.trackRoutes=conf.trackRoutes||!0,this.ignoreFirstPageLoad=conf.ignoreFirstPageLoad||!1}return __extends(AnalyticsService,_super),AnalyticsService.$inject=["$rootScope","$log","$tgConfig","$window","$document","$location"],AnalyticsService.prototype.initialize=function(){return this.accountId?(this.injectAnalytics(),this.win.ga("create",this.accountId,"auto"),this.win.ga("require","displayfeatures"),this.trackRoutes&&!this.ignoreFirstPageLoad&&this.win.ga("send","pageview",this.getUrl()),this.trackRoutes&&this.rootscope.$on(this.pageEvent,function(_this){return function(){return _this.trackPage(_this.getUrl(),"Taiga")}}(this)),this.initialized=!0):void this.log.debug("Analytics: no acount id provided. Disabling.")},AnalyticsService.prototype.getUrl=function(){return this.location.path()},AnalyticsService.prototype.injectAnalytics=function(){var fn;return(fn=function(i,s,o,g,r,a,m){i.GoogleAnalyticsObject=r,i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date,a=s.createElement(o),m=s.getElementsByTagName(o)[0],a.async=1,a.src=g,m.parentNode.insertBefore(a,m)})(window,document,"script","//www.google-analytics.com/analytics.js","ga")},AnalyticsService.prototype.trackPage=function(url,title){return this.initialized&&this.win.ga?(title=title||this.doc[0].title,this.win.ga("send","pageview",{page:url,title:title})):void 0},AnalyticsService.prototype.trackEvent=function(category,action,label,value){return this.initialized&&this.win.ga?this.win.ga("send","event",category,action,label,value):void 0},AnalyticsService}(taiga.Service),module.service("$tgAnalytics",AnalyticsService)}.call(this),function(){var AttachmentDirective,AttachmentsController,AttachmentsDirective,bindMethods,bindOnce,module,sizeFormat,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,sizeFormat=this.taiga.sizeFormat,bindOnce=this.taiga.bindOnce,bindMethods=this.taiga.bindMethods,module=angular.module("taigaCommon"),AttachmentsController=function(_super){function AttachmentsController(scope,rootscope,repo,rs,confirm,q){this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.rs=rs,this.confirm=confirm,this.q=q,bindMethods(this),this.type=null,this.objectId=null,this.projectId=null,this.uploadingAttachments=[],this.attachments=[],this.attachmentsCount=0,this.deprecatedAttachmentsCount=0,this.showDeprecated=!1}return __extends(AttachmentsController,_super),AttachmentsController.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$tgConfirm","$q"],AttachmentsController.prototype.initialize=function(type,objectId){return this.type=type,this.objectId=objectId,this.projectId=this.scope.projectId},AttachmentsController.prototype.loadAttachments=function(){var urlname;return this.objectId?(urlname="attachments/"+this.type,this.rs.attachments.list(urlname,this.objectId,this.projectId).then(function(_this){return function(attachments){return _this.attachments=_.sortBy(attachments,"order"),_this.updateCounters(),attachments}}(this))):this.attachments},AttachmentsController.prototype.updateCounters=function(){return this.attachmentsCount=this.attachments.length,this.deprecatedAttachmentsCount=_.filter(this.attachments,{is_deprecated:!0}).length},AttachmentsController.prototype._createAttachment=function(attachment){var promise,urlName;return urlName="attachments/"+this.type,promise=this.rs.attachments.create(urlName,this.projectId,this.objectId,attachment),promise=promise.then(function(_this){return function(data){var index;return data.isCreatedRightNow=!0,index=_this.uploadingAttachments.indexOf(attachment),_this.uploadingAttachments.splice(index,1),_this.attachments.push(data),_this.rootscope.$broadcast("attachment:create")}}(this)),promise=promise.then(null,function(_this){return function(data){var index;return 413===data.status&&_this.scope.$emit("attachments:size-error"),index=_this.uploadingAttachments.indexOf(attachment),_this.uploadingAttachments.splice(index,1),_this.confirm.notify("error","We have not been able to upload '"+attachment.name+"'. "+data.data._error_message),_this.q.reject(data)}}(this))},AttachmentsController.prototype.createAttachments=function(attachments){var promises;return promises=_.map(attachments,function(_this){return function(x){return _this._createAttachment(x)}}(this)),this.q.all(promises).then(function(_this){return function(){return _this.updateCounters()}}(this))},AttachmentsController.prototype.addUploadingAttachments=function(attachments){return this.uploadingAttachments=_.union(this.uploadingAttachments,attachments)},AttachmentsController.prototype.reorderAttachment=function(attachment,newIndex){var oldIndex;return oldIndex=this.attachments.indexOf(attachment),oldIndex!==newIndex?(this.attachments.splice(oldIndex,1),this.attachments.splice(newIndex,0,attachment),_.each(this.attachments,function(x,i){return x.order=i+1})):void 0},AttachmentsController.prototype.updateAttachment=function(attachment){var onError,onSuccess;return onSuccess=function(_this){return function(){return _this.updateCounters(),_this.rootscope.$broadcast("attachment:edit")}}(this),onError=function(_this){return function(response){return 413===response.status&&$scope.$emit("attachments:size-error"),_this.confirm.notify("error"),_this.q.reject()}}(this),this.repo.save(attachment).then(onSuccess,onError)},AttachmentsController.prototype.saveAttachments=function(){return this.repo.saveAll(this.attachments).then(null,function(_this){return function(){var item,_i,_len,_ref;for(_ref=_this.attachments,_i=0,_len=_ref.length;_len>_i;_i++)item=_ref[_i],item.revert();return _this.attachments=_.sorBy(_this.attachments,"order")}}(this))},AttachmentsController.prototype.removeAttachment=function(attachment){var message,title;return title="Delete attachment",message="the attachment '"+attachment.name+"'",this.confirm.askOnDelete(title,message).then(function(_this){return function(finish){var onError,onSuccess;return onSuccess=function(){var index;return finish(),index=_this.attachments.indexOf(attachment),_this.attachments.splice(index,1),_this.updateCounters(),_this.rootscope.$broadcast("attachment:delete")},onError=function(){return finish(!1),_this.confirm.notify("error",null,"We have not been able to delete "+message+"."),_this.q.reject()},_this.repo.remove(attachment).then(onSuccess,onError)}}(this))},AttachmentsController.prototype.filterAttachments=function(item){return this.showDeprecated?!0:!item.is_deprecated},AttachmentsController}(taiga.Controller),AttachmentsDirective=function($config){var link,template,templateFn;return template=_.template('
    \n
    \n

    \n \n attachments\n

    \n
    \n <% if (maxFileSize){ %>\n \n <% }; %>\n \n \n
    \n
    \n\n \n
    '),link=function($scope,$el,$attrs,$ctrls){var $ctrl,$model,showSizeInfo,tdom;return $ctrl=$ctrls[0],$model=$ctrls[1],bindOnce($scope,$attrs.ngModel,function(value){return $ctrl.initialize($attrs.type,value.id),$ctrl.loadAttachments()}),tdom=$el.find("div.attachment-body.sortable"),tdom.sortable({items:"div.single-attachment",handle:"a.settings.icon.icon-drag-v",containment:".attachments",dropOnEmpty:!0,scroll:!1,tolerance:"pointer",placeholder:"sortable-placeholder single-attachment"}),tdom.on("sortstop",function(event,ui){var attachment,newIndex;return attachment=ui.item.scope().attach,newIndex=ui.item.index(),$ctrl.reorderAttachment(attachment,newIndex),$ctrl.saveAttachments()}),showSizeInfo=function(){return $el.find(".size-info").removeClass("hidden")},$scope.$on("attachments:size-error",function(){return showSizeInfo()}),$el.on("change",".attachments-header input",function(event){var files;return files=_.toArray(event.target.files),files.length<1?void 0:$scope.$apply(function(){return $ctrl.addUploadingAttachments(files),$ctrl.createAttachments(files)})}),$el.on("click",".more-attachments",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),$scope.$apply(function(){return $ctrl.showDeprecated=!$ctrl.showDeprecated}),target.find("span.text").addClass("hidden"),$ctrl.showDeprecated?(target.find("span[data-type=hide]").removeClass("hidden"),target.find("more-attachments-num").addClass("hidden")):(target.find("span[data-type=show]").removeClass("hidden"),target.find("more-attachments-num").removeClass("hidden"))}),$scope.$on("$destroy",function(){return $el.off()})},templateFn=function($el,$attrs){var ctx,maxFileSize,maxFileSizeMsg;return maxFileSize=$config.get("maxUploadFileSize",null),maxFileSize&&(maxFileSize=sizeFormat(maxFileSize)),maxFileSizeMsg=maxFileSize?"Maximum upload size is "+maxFileSize:"",ctx={type:$attrs.type,maxFileSize:maxFileSize,maxFileSizeMsg:maxFileSizeMsg},template(ctx)},{require:["tgAttachments","ngModel"],controller:AttachmentsController,controllerAs:"ctrl",restrict:"AE",scope:!0,link:link,template:templateFn}},module.directive("tgAttachments",["$tgConfig","$tgConfirm",AttachmentsDirective]),AttachmentDirective=function(){var link,template,templateEdit;return template=_.template('\n
    \n <%- size %>\n
    \n
    \n <% if (isDeprecated){ %> (deprecated) <% } %>\n <%- description %>\n
    \n<% if (modifyPermission) {%>\n
    \n \n \n \n
    \n<% } %>'),templateEdit=_.template('
    \n \n <%- name %>\n
    \n
    \n <%- size %>\n
    \n
    \n \n
    \n
    \n checked<% } %> />\n \n
    \n
    \n \n \n
    '),link=function($scope,$el,$attrs,$ctrl){var attachment,render,saveAttachment;return render=function(attachment,edit){var ctx,html,modifyPermission,permissions;return null==edit&&(edit=!1),permissions=$scope.project.my_permissions,modifyPermission=permissions.indexOf("modify_"+$ctrl.type)>-1,ctx={id:attachment.id,name:attachment.name,created_date:moment(attachment.created_date).format("DD MMM YYYY [at] hh:mm"),url:attachment.url,size:sizeFormat(attachment.size),description:attachment.description,isDeprecated:attachment.is_deprecated,modifyPermission:modifyPermission},html=edit?templateEdit(ctx):template(ctx),$el.html(html),attachment.is_deprecated?$el.addClass("deprecated"):void 0},saveAttachment=function(){return attachment.description=$el.find("input[name='description']").val(),attachment.is_deprecated=$el.find("input[name='is-deprecated']").prop("checked"),$scope.$apply(function(){return $ctrl.updateAttachment(attachment).then(function(){return render(attachment,!1)})})},$el.on("click","a.editable-settings.icon-floppy",function(event){return event.preventDefault(),saveAttachment()}),$el.on("keyup","input[name=description]",function(event){return 13===event.keyCode?saveAttachment():27===event.keyCode?render(attachment,!1):void 0}),$el.on("click","a.editable-settings.icon-delete",function(event){return event.preventDefault(),render(attachment,!1)}),$el.on("click","a.settings.icon-edit",function(event){return event.preventDefault(),render(attachment,!0),$el.find("input[name='description']").focus().select()}),$el.on("click","a.settings.icon-delete",function(event){return event.preventDefault(),$scope.$apply(function(){return $ctrl.removeAttachment(attachment)})}),$scope.$on("$destroy",function(){return $el.off()}),attachment=$scope.$eval($attrs.tgAttachment),render(attachment,attachment.isCreatedRightNow),attachment.isCreatedRightNow?$el.find("input[name='description']").focus().select():void 0},{link:link,require:"^tgAttachments",restrict:"AE"}},module.directive("tgAttachment",AttachmentDirective)}.call(this),function(){var AssignedToDirective,BlockButtonDirective,CreatedByDisplayDirective,DateRangeDirective,DateSelectorDirective,DeleteButtonDirective,EditableDescriptionDirective,EditableSubjectDirective,ListItemAssignedtoDirective,ListItemIssueStatusDirective,ListItemPriorityDirective,ListItemSeverityDirective,ListItemTaskStatusDirective,ListItemTypeDirective,ListItemUsStatusDirective,SprintProgressBarDirective,TgMainTitleDirective,TgProgressBarDirective,WatchersDirective,bindOnce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,module=angular.module("taigaCommon"),DateRangeDirective=function(){var link,renderRange;return renderRange=function($el,first,second){var endDate,initDate;return initDate=moment(first).format("DD MMM YYYY"),endDate=moment(second).format("DD MMM YYYY"),$el.html(""+initDate+"-"+endDate)},link=function($scope,$el,$attrs){var first,second,_ref;return _ref=$attrs.tgDateRange.split(","),first=_ref[0],second=_ref[1],bindOnce($scope,first,function(valFirst){return bindOnce($scope,second,function(valSecond){return renderRange($el,valFirst,valSecond)})})},{link:link}},module.directive("tgDateRange",DateRangeDirective),DateSelectorDirective=function(){var link;return link=function($scope,$el,$attrs){var selectedDate;return selectedDate=null,$el.picker=new Pikaday({field:$el[0],format:"DD MMM YYYY",onSelect:function(){return function(date){return selectedDate=date}}(this),onOpen:function(){return function(){return null!=selectedDate?$el.picker.setDate(selectedDate):void 0}}(this)}),$scope.$watch($attrs.ngModel,function(val){return null!=val?$el.picker.setDate(val):void 0})},{link:link,require:"ngModel"}},module.directive("tgDateSelector",DateSelectorDirective),SprintProgressBarDirective=function(){var link,renderProgress;return renderProgress=function($el,percentage,visual_percentage){return $el.hasClass(".current-progress")?$el.css("width",""+percentage+"%"):($el.find(".current-progress").css("width",""+visual_percentage+"%"),$el.find(".number").html(""+percentage+" %"))},link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgSprintProgressbar,function(sprint){var closedPoints,percentage,totalPoints,visual_percentage;return closedPoints=sprint.closed_points,totalPoints=sprint.total_points,percentage=0,0!==totalPoints&&(percentage=Math.round(100*(closedPoints/totalPoints))),visual_percentage=0,0!==totalPoints&&(visual_percentage=Math.round(98*(closedPoints/totalPoints))),renderProgress($el,percentage,visual_percentage) +})},{link:link}},module.directive("tgSprintProgressbar",SprintProgressBarDirective),CreatedByDisplayDirective=function(){var link,template;return template=_.template('
    \n <%- owner.full_name_display %>\n
    \n\n
    \n Created by <%- owner.full_name_display %>\n <%- date %>\n
    '),link=function($scope,$el,$attrs){var render;return render=function(model){var html,owner,_ref;return owner=(null!=(_ref=$scope.usersById)?_ref[model.owner]:void 0)||{full_name_display:"external user",photo:"/images/unnamed.png"},html=template({owner:owner,date:moment(model.created_date).format("DD MMM YYYY HH:mm")}),$el.html(html)},bindOnce($scope,$attrs.ngModel,function(model){return null!=model?render(model):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgCreatedByDisplay",CreatedByDisplayDirective),WatchersDirective=function($rootscope,$confirm,$repo,$qqueue){var link,template;return template=_.template('<% if(isEditable){ %>\n
    \n watchers\n \n
    \n<% } else if(watchers.length > 0){ %>\n
    \n watchers\n
    \n<% }; %>\n\n<% _.each(watchers, function(watcher) { %>\n<% if(watcher) { %>\n
    \n
    \n \n <%- watcher.full_name_display %>\n \n
    \n
    \n <%- watcher.full_name_display %>\n\n <% if(isEditable){ %>\n \n \n <% }; %>\n
    \n
    \n<% } %>\n<% }); %>'),link=function($scope,$el,$attrs,$model){var deleteWatcher,isEditable,renderWatchers,save;return isEditable=function(){var _ref,_ref1;return-1!==(null!=(_ref=$scope.project)&&null!=(_ref1=_ref.my_permissions)?_ref1.indexOf($attrs.requiredPerm):void 0)},save=$qqueue.bindAdd(function(){return function(watchers){var item,promise;return item=$model.$modelValue.clone(),item.watchers=watchers,$model.$setViewValue(item),promise=$repo.save($model.$modelValue),promise.then(function(){return $confirm.notify("success"),watchers=_.map(watchers,function(watcherId){return $scope.usersById[watcherId]}),renderWatchers(watchers),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return $model.$modelValue.revert()})}}(this)),deleteWatcher=$qqueue.bindAdd(function(){return function(watcherIds){var item,promise;return item=$model.$modelValue.clone(),item.watchers=watcherIds,$model.$setViewValue(item),promise=$repo.save($model.$modelValue),promise.then(function(){var watchers;return $confirm.notify("success"),watchers=_.map(item.watchers,function(watcherId){return $scope.usersById[watcherId]}),renderWatchers(watchers),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return item.revert(),$confirm.notify("error")})}}(this)),renderWatchers=function(watchers){var ctx,html;return ctx={watchers:watchers,isEditable:isEditable()},html=template(ctx),$el.html(html),isEditable()&&0===watchers.length?($el.find(".title").text("Add watchers"),$el.find(".watchers-header").addClass("no-watchers")):void 0},$el.on("click",".icon-delete",function(event){var message,target,title,watcherId;return event.preventDefault(),isEditable()?(target=angular.element(event.currentTarget),watcherId=target.data("watcher-id"),title="Delete watcher",message=$scope.usersById[watcherId].full_name_display,$confirm.askOnDelete(title,message).then(function(){return function(finish){var watcherIds;return finish(),watcherIds=_.clone($model.$modelValue.watchers,!1),watcherIds=_.pull(watcherIds,watcherId),deleteWatcher(watcherIds)}}(this))):void 0}),$el.on("click",".add-watcher",function(event){return event.preventDefault(),isEditable()?$scope.$apply(function(){return $rootscope.$broadcast("watcher:add",$model.$modelValue)}):void 0}),$scope.$on("watcher:added",function(ctx,watcherId){var watchers;return watchers=_.clone($model.$modelValue.watchers,!1),watchers.push(watcherId),watchers=_.uniq(watchers),save(watchers)}),$scope.$watch($attrs.ngModel,function(item){var watchers;if(null!=item)return watchers=_.map(item.watchers,function(watcherId){return $scope.usersById[watcherId]}),renderWatchers(watchers)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel"}},module.directive("tgWatchers",["$rootScope","$tgConfirm","$tgRepo","$tgQqueue",WatchersDirective]),AssignedToDirective=function($rootscope,$confirm,$repo,$loading,$qqueue){var link,template;return template=_.template('<% if (assignedTo) { %>\n
    \n <%- assignedTo.full_name_display %>\n
    \n<% } %>\n\n'),link=function($scope,$el,$attrs,$model){var isEditable,renderAssignedTo,save;return isEditable=function(){var _ref,_ref1;return-1!==(null!=(_ref=$scope.project)&&null!=(_ref1=_ref.my_permissions)?_ref1.indexOf($attrs.requiredPerm):void 0)},save=$qqueue.bindAdd(function(){return function(userId){var promise;return $model.$modelValue.assigned_to=userId,$loading.start($el),promise=$repo.save($model.$modelValue),promise.then(function(){return $loading.finish($el),$confirm.notify("success"),renderAssignedTo($model.$modelValue),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return $model.$modelValue.revert(),$confirm.notify("error"),$loading.finish($el)}),promise}}(this)),renderAssignedTo=function(issue){var assignedTo,assignedToId,ctx,html;return assignedToId=null!=issue?issue.assigned_to:void 0,assignedTo=null!=assignedToId?$scope.usersById[assignedToId]:null,ctx={assignedTo:assignedTo,isEditable:isEditable()},html=template(ctx),$el.html(html)},$el.on("click",".user-assigned",function(event){return event.preventDefault(),isEditable()?$scope.$apply(function(){return $rootscope.$broadcast("assigned-to:add",$model.$modelValue)}):void 0}),$el.on("click",".icon-delete",function(event){var title;return event.preventDefault(),isEditable()?(title="Are you sure you want to leave it unassigned?",$confirm.ask(title).then(function(){return function(finish){return finish(),$model.$modelValue.assigned_to=null,save(null)}}(this))):void 0}),$scope.$on("assigned-to:added",function(ctx,userId,item){return item.id===$model.$modelValue.id?save(userId):void 0}),$scope.$watch($attrs.ngModel,function(instance){return renderAssignedTo(instance)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel"}},module.directive("tgAssignedTo",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQqueue",AssignedToDirective]),BlockButtonDirective=function($rootscope,$loading){var link,template;return template='Block\nUnblock',link=function($scope,$el,$attrs,$model){var isEditable;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_us")},$scope.$watch($attrs.ngModel,function(item){return item?(isEditable()&&$el.find(".item-block").addClass("editable"),item.is_blocked?($el.find(".item-block").hide(),$el.find(".item-unblock").show()):($el.find(".item-block").show(),$el.find(".item-unblock").hide())):void 0}),$el.on("click",".item-block",function(event){return event.preventDefault(),$rootscope.$broadcast("block",$model.$modelValue)}),$el.on("click",".item-unblock",function(event){var finish;return event.preventDefault(),$loading.start($el.find(".item-unblock")),finish=function(){return $loading.finish($el.find(".item-unblock"))},$rootscope.$broadcast("unblock",$model.$modelValue,finish)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel",template:template}},module.directive("tgBlockButton",["$rootScope","$tgLoading",BlockButtonDirective]),DeleteButtonDirective=function($log,$repo,$confirm,$location){var link,template;return template='Delete',link=function($scope,$el,$attrs,$model){return $attrs.onDeleteGoToUrl?$attrs.onDeleteTitle?($el.on("click",".button",function(){var subtitle,title;return title=$scope.$eval($attrs.onDeleteTitle),subtitle=$model.$modelValue.subject,$confirm.askOnDelete(title,subtitle).then(function(){return function(finish){var promise;return promise=$repo.remove($model.$modelValue),promise.then(function(){var url;return finish(),url=$scope.$eval($attrs.onDeleteGoToUrl),$location.path(url)}),promise.then(null,function(){return finish(!1),$confirm.notify("error")})}}(this))}),$scope.$on("$destroy",function(){return $el.off()})):$log.error("DeleteButtonDirective requires on-delete-title set in scope."):$log.error("DeleteButtonDirective requires on-delete-go-to-url set in scope.")},{link:link,restrict:"EA",require:"ngModel",template:template}},module.directive("tgDeleteButton",["$log","$tgRepo","$tgConfirm","$tgLocation",DeleteButtonDirective]),EditableSubjectDirective=function($rootscope,$repo,$confirm,$loading,$qqueue){var link,template;return template='
    \n {{ item.subject }}\n \n
    \n',link=function($scope,$el,$attrs,$model){var isEditable,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf($attrs.requiredPerm)},save=$qqueue.bindAdd(function(){return function(subject){var promise;return $model.$modelValue.subject=subject,$loading.start($el.find(".save-container")),promise=$repo.save($model.$modelValue),promise.then(function(){return $confirm.notify("success"),$rootscope.$broadcast("history:reload"),$el.find(".edit-subject").hide(),$el.find(".view-subject").show()}),promise.then(null,function(){return $confirm.notify("error")}),promise["finally"](function(){return $loading.finish($el.find(".save-container"))}),promise}}(this)),$el.click(function(){return isEditable()?($el.find(".edit-subject").show(),$el.find(".view-subject").hide(),$el.find("input").focus()):void 0}),$el.on("click",".save",function(){var subject;return subject=$scope.item.subject,save(subject)}),$el.on("keyup","input",function(event){var subject;return 13===event.keyCode?(subject=$scope.item.subject,save(subject)):27===event.keyCode?($scope.$apply(function(){return function(){return $model.$modelValue.revert()}}(this)),$el.find("div.edit-subject").hide(),$el.find("div.view-subject").show()):void 0}),$el.find("div.edit-subject").hide(),$el.find("div.view-subject span.edit").hide(),$scope.$watch($attrs.ngModel,function(value){return value?($scope.item=value,isEditable()?void 0:$el.find(".view-subject .edit").remove()):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel",template:template}},module.directive("tgEditableSubject",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",EditableSubjectDirective]),EditableDescriptionDirective=function($rootscope,$repo,$confirm,$compile,$loading,$selectedText,$qqueue){var link,noDescriptionMegEditMode,noDescriptionMegReadMode,template;return template='
    \n
    \n \n
    \n
    ',noDescriptionMegEditMode='

    \n Empty space is so boring...\n go on be descriptive...\n A rose by any other name would smell as sweet...\n

    ',noDescriptionMegReadMode='

    \n No description yet.\n

    ',link=function($scope,$el,$attrs,$model){var isEditable,save;return $el.find(".edit-description").hide(),$el.find(".view-description .edit").hide(),isEditable=function(){return-1!==$scope.project.my_permissions.indexOf($attrs.requiredPerm)},save=$qqueue.bindAdd(function(){return function(description){var promise;return $model.$modelValue.description=description,$loading.start($el.find(".save-container")),promise=$repo.save($model.$modelValue),promise.then(function(){return $confirm.notify("success"),$rootscope.$broadcast("history:reload"),$el.find(".edit-description").hide(),$el.find(".view-description").show()}),promise.then(null,function(){return $confirm.notify("error")}),promise["finally"](function(){return $loading.finish($el.find(".save-container"))})}}(this)),$el.on("mouseup",".view-description",function(event){var target;return target=angular.element(event.target),!isEditable()||target.is("a")||$selectedText.get().length?void 0:($el.find(".edit-description").show(),$el.find(".view-description").hide(),$el.find("textarea").focus())}),$el.on("click",".save",function(){var description;return description=$scope.item.description,save(description)}),$el.on("keydown","textarea",function(event){return 27===event.keyCode?($scope.$apply(function(){return function(){return $scope.item.revert()}}(this)),$el.find(".edit-description").hide(),$el.find(".view-description").show()):void 0}),$scope.$watch($attrs.ngModel,function(value){return value?($scope.item=value,isEditable()?($el.find(".view-description .edit").show(),$el.find(".view-description .us-content").addClass("editable"),$scope.noDescriptionMsg=noDescriptionMegEditMode):$scope.noDescriptionMsg=noDescriptionMegReadMode):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel",template:template}},module.directive("tgEditableDescription",["$rootScope","$tgRepo","$tgConfirm","$compile","$tgLoading","$selectedText","$tgQqueue",EditableDescriptionDirective]),ListItemIssueStatusDirective=function(){var link;return link=function($scope,$el,$attrs){var issue;return issue=$scope.$eval($attrs.tgListitemIssueStatus),bindOnce($scope,"issueStatusById",function(issueStatusById){return $el.html(issueStatusById[issue.status].name)})},{link:link}},ListItemTaskStatusDirective=function(){var link;return link=function($scope,$el,$attrs){var task;return task=$scope.$eval($attrs.tgListitemTaskStatus),bindOnce($scope,"taskStatusById",function(taskStatusById){return $el.html(taskStatusById[task.status].name)})},{link:link}},ListItemUsStatusDirective=function(){var link;return link=function($scope,$el,$attrs){var us;return us=$scope.$eval($attrs.tgListitemUsStatus),bindOnce($scope,"usStatusById",function(usStatusById){return $el.html(usStatusById[us.status].name)})},{link:link}},ListItemAssignedtoDirective=function(){var link,template;return template=_.template('
    \n <%- name %>\n
    <%- name %>
    \n
    '),link=function($scope,$el,$attrs){return bindOnce($scope,"membersById",function(membersById){var ctx,item,member;return item=$scope.$eval($attrs.tgListitemAssignedto),ctx={name:"Unassigned",imgurl:"/images/unnamed.png"},member=membersById[item.assigned_to],member&&(ctx.imgurl=member.photo,ctx.name=member.full_name),$el.html(template(ctx))})},{link:link}},ListItemPriorityDirective=function(){var link,template;return template='
    ',link=function($scope,$el,$attrs){var render;return render=function(priorityById,issue){var domNode,priority;return priority=priorityById[issue.priority],domNode=$el.find(".level"),domNode.css("background-color",priority.color),domNode.attr("title",priority.name)},bindOnce($scope,"priorityById",function(priorityById){var issue;return issue=$scope.$eval($attrs.tgListitemPriority),render(priorityById,issue)}),$scope.$watch($attrs.tgListitemPriority,function(issue){return render($scope.priorityById,issue)})},{link:link,template:template}},ListItemSeverityDirective=function(){var link,template;return template='
    ',link=function($scope,$el,$attrs){var render;return render=function(severityById,issue){var domNode,severity;return severity=severityById[issue.severity],domNode=$el.find(".level"),domNode.css("background-color",severity.color),domNode.attr("title",severity.name)},bindOnce($scope,"severityById",function(severityById){var issue;return issue=$scope.$eval($attrs.tgListitemSeverity),render(severityById,issue)}),$scope.$watch($attrs.tgListitemSeverity,function(issue){return render($scope.severityById,issue)})},{link:link,template:template}},ListItemTypeDirective=function(){var link,template;return template='
    ',link=function($scope,$el,$attrs){var render;return render=function(issueTypeById,issue){var domNode,type;return type=issueTypeById[issue.type],domNode=$el.find(".level"),domNode.css("background-color",type.color),domNode.attr("title",type.name)},bindOnce($scope,"issueTypeById",function(issueTypeById){var issue;return issue=$scope.$eval($attrs.tgListitemType),render(issueTypeById,issue)}),$scope.$watch($attrs.tgListitemType,function(issue){return render($scope.issueTypeById,issue)})},{link:link,template:template}},TgProgressBarDirective=function(){var link,render,template;return template=_.template('
    '),render=function(el,percentage){return el.html(template({percentage:percentage}))},link=function($scope,$el,$attrs){var element;return element=angular.element($el),$scope.$watch($attrs.tgProgressBar,function(percentage){return percentage=_.max([0,percentage]),percentage=_.min([100,percentage]),render($el,percentage)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},TgMainTitleDirective=function(){var link,render,template;return template=_.template('<%- projectName %>\n<%- sectionName %>'),render=function(el,projectName,sectionName){return el.html(template({projectName:projectName,sectionName:sectionName}))},link=function($scope,$el){var element;return element=angular.element($el),$scope.$watch("project",function(project){return project?render($el,project.name,$scope.sectionName):void 0}),$scope.$on("project:loaded",function(){return function(ctx,project){return render($el,project.name,$scope.sectionName)}}(this)),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgListitemType",ListItemTypeDirective),module.directive("tgListitemIssueStatus",ListItemIssueStatusDirective),module.directive("tgListitemAssignedto",ListItemAssignedtoDirective),module.directive("tgListitemPriority",ListItemPriorityDirective),module.directive("tgListitemSeverity",ListItemSeverityDirective),module.directive("tgListitemTaskStatus",ListItemTaskStatusDirective),module.directive("tgListitemUsStatus",ListItemUsStatusDirective),module.directive("tgProgressBar",TgProgressBarDirective),module.directive("tgMainTitle",TgMainTitleDirective)}.call(this),function(){var ConfirmService,NOTIFICATION_MSG,bindMethods,cancelTimeout,debounce,module,taiga,timeout,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,timeout=this.taiga.timeout,cancelTimeout=this.taiga.cancelTimeout,debounce=this.taiga.debounce,bindMethods=this.taiga.bindMethods,NOTIFICATION_MSG={success:{title:"Everything is ok",message:"Our Oompa Loompas saved all your changes!"},error:{title:"Oops, something happened...",message:"Our Oompa Loompas are sad, your changes were not saved!"},"light-error":{title:"Oops, something happened...",message:"Our Oompa Loompas are sad, your changes were not saved!"}},ConfirmService=function(_super){function ConfirmService(q,lightboxService,loading){this.q=q,this.lightboxService=lightboxService,this.loading=loading,bindMethods(this)}return __extends(ConfirmService,_super),ConfirmService.$inject=["$q","lightboxService","$tgLoading"],ConfirmService.prototype.hide=function(el){return el?(this.lightboxService.close(el),el.off(".confirm-dialog")):void 0},ConfirmService.prototype.ask=function(title,subtitle,message,lightboxSelector){var defered,el;return null==lightboxSelector&&(lightboxSelector=".lightbox-generic-ask"),el=angular.element(lightboxSelector),el.find("h2.title").html(title),el.find("span.subtitle").html(subtitle),el.find("span.message").html(message),defered=this.q.defer(),el.on("click.confirm-dialog","a.button-green",debounce(2e3,function(_this){return function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),_this.loading.start(target),defered.resolve(function(ok){return null==ok&&(ok=!0),_this.loading.finish(target),ok?_this.hide(el):void 0})}}(this))),el.on("click.confirm-dialog","a.button-red",function(_this){return function(event){return event.preventDefault(),defered.reject(),_this.hide(el)}}(this)),this.lightboxService.open(el),defered.promise},ConfirmService.prototype.askOnDelete=function(title,message){return this.ask(title,"Are you sure you want to delete?",message)},ConfirmService.prototype.askChoice=function(title,subtitle,choices,replacement,warning,lightboxSelector){var choicesField,defered,el;return null==lightboxSelector&&(lightboxSelector=".lightbox-ask-choice"),el=angular.element(lightboxSelector),el.find(".title").html(title),el.find(".subtitle").html(subtitle),replacement?el.find(".replacement").html(replacement):el.find(".replacement").remove(),warning?el.find(".warning").html(warning):el.find(".warning").remove(),choicesField=el.find(".choices"),choicesField.html(""),_.each(choices,function(value,key){return choicesField.append(angular.element(""))}),defered=this.q.defer(),el.on("click.confirm-dialog","a.button-green",debounce(2e3,function(_this){return function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),_this.loading.start(target),defered.resolve({selected:choicesField.val(),finish:function(){return _this.loading.finish(target),_this.hide(el)}})}}(this))),el.on("click.confirm-dialog","a.button-red",function(_this){return function(event){return event.preventDefault(),defered.reject(),_this.hide(el)}}(this)),this.lightboxService.open(el),defered.promise},ConfirmService.prototype.error=function(message){var defered,el;return el=angular.element(".lightbox-generic-error"),el.find("h2.title").html(message),defered=this.q.defer(),el.on("click.confirm-dialog","a.button-green",function(_this){return function(event){return event.preventDefault(),defered.resolve(),_this.hide(el)}}(this)),el.on("click.confirm-dialog","a.close",function(_this){return function(event){return event.preventDefault(),defered.resolve(),_this.hide(el)}}(this)),this.lightboxService.open(el),defered.promise},ConfirmService.prototype.success=function(message){var defered,el;return el=angular.element(".lightbox-generic-success"),el.find("h2.title").html(message),defered=this.q.defer(),el.on("click.confirm-dialog","a.button-green",function(_this){return function(event){return event.preventDefault(),defered.resolve(),_this.hide(el)}}(this)),el.on("click.confirm-dialog","a.close",function(_this){return function(event){return event.preventDefault(),defered.resolve(),_this.hide(el)}}(this)),this.lightboxService.open(el),defered.promise},ConfirmService.prototype.notify=function(type,message,title,time){var body,el,selector;return selector=".notification-message-"+type,el=angular.element(selector),el.hasClass("active")?void 0:(el.find("h4").html(title?title:NOTIFICATION_MSG[type].title),el.find("p").html(message?message:NOTIFICATION_MSG[type].message),body=angular.element("body"),body.find(".notification-message .notification-light").removeClass("active").addClass("inactive"),body.find(selector).removeClass("inactive").addClass("active"),this.tsem&&cancelTimeout(this.tsem),time||(time="error"===type||"light-error"===type?3500:1500),this.tsem=timeout(time,function(_this){return function(){return body.find(selector).removeClass("active").addClass("inactive"),delete _this.tsem}}(this)),el.on("click",".icon-delete",function(){return function(){return body.find(selector).removeClass("active").addClass("inactive")}}(this)))},ConfirmService}(taiga.Service),module=angular.module("taigaCommon"),module.service("$tgConfirm",ConfirmService)}.call(this),function(){var LbUsEstimationDirective,UsEstimationDirective,module,taiga;taiga=this.taiga,module=angular.module("taigaCommon"),LbUsEstimationDirective=function(){var link,mainTemplate,pointsTemplate;return mainTemplate=_.template('
      \n
    • \n <%- totalPoints %>\n total\n
    • \n <% _.each(roles, function(role) { %>\n
    • \n <%- role.points %>\n <%- role.name %>
    • \n <% }); %>\n
    '),pointsTemplate=_.template('
    '),link=function($scope,$el,$attrs,$model){var calculateTotalPoints,render,renderPoints;return render=function(points){var computableRoles,ctx,html,roles,totalPoints;return totalPoints=calculateTotalPoints(points)||0,computableRoles=_.filter($scope.project.roles,"computable"),roles=_.map(computableRoles,function(role){var pointId,pointObj;return pointId=points[role.id],pointObj=$scope.pointsById[pointId],role=_.clone(role,!0),role.points=null!=pointObj&&null!=pointObj.name?pointObj.name:"?",role}),ctx={totalPoints:totalPoints,roles:roles},html=mainTemplate(ctx),$el.html(html)},renderPoints=function(target,usPoints,roleId){var html,points;return points=_.map($scope.project.points,function(point){return point=_.clone(point,!0),point.selected=usPoints[roleId]===point.id?!1:!0,point}),html=pointsTemplate({points:points,roleId:roleId}),$el.find(".popover").popover().close(),$el.find(".pop-points-open").remove(),null==$el.find(".pop-role:visible").css("left")&&$el.find(".pop-points-open").css("left","110px"),$el.find(".pop-points-open").remove(),$el.find(target).append(html),$el.find(".pop-points-open").popover().open(function(){return $(this).removeClass("active")}),$el.find(".pop-points-open").show()},calculateTotalPoints=function(points){var values;return values=_.map(points,function(v){var _ref;return(null!=(_ref=$scope.pointsById[v])?_ref.value:void 0)||0}),0===values.length?"0":_.reduce(values,function(acc,num){return acc+num})},$el.on("click",".total.clickable",function(event){var points,roleId,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),roleId=target.data("role-id"),points=$model.$modelValue,renderPoints(target,points,roleId),target.siblings().removeClass("active"),target.addClass("active")}),$el.on("click",".point",function(event){var pointId,points,roleId,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),roleId=target.data("role-id"),pointId=target.data("point-id"),$el.find(".popover").popover().close(),points=_.clone($model.$modelValue,!0),points[roleId]=pointId,$scope.$apply(function(){return $model.$setViewValue(points)})}),$scope.$watch($attrs.ngModel,function(points){return points?render(points):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgLbUsEstimation",["$rootScope","$tgRepo","$tgConfirm",LbUsEstimationDirective]),UsEstimationDirective=function($rootScope,$repo,$confirm,$qqueue){var link,mainTemplate,pointsTemplate;return mainTemplate=_.template('
      \n
    • \n <%- totalPoints %>\n total\n
    • \n <% _.each(roles, function(role) { %>\n
    • \n <%- role.points %>\n <%- role.name %>
    • \n <% }); %>\n
    '),pointsTemplate=_.template(''),link=function($scope,$el,$attrs,$model){var calculateTotalPoints,isEditable,render,renderPoints,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_us")},render=function(us){var computableRoles,ctx,html,roles,totalPoints;return totalPoints=null!=us.total_points?us.total_points:"?",computableRoles=_.filter($scope.project.roles,"computable"),roles=_.map(computableRoles,function(role){var pointId,pointObj;return pointId=us.points[role.id],pointObj=$scope.pointsById[pointId],role=_.clone(role,!0),role.points=null!=pointObj&&null!=pointObj.name?pointObj.name:"?",role}),ctx={totalPoints:totalPoints,roles:roles,editable:isEditable()},html=mainTemplate(ctx),$el.html(html)},renderPoints=function(target,us,roleId){var html,points;return points=_.map($scope.project.points,function(point){return point=_.clone(point,!0),point.selected=us.points[roleId]===point.id?!1:!0,point}),html=pointsTemplate({points:points,roleId:roleId}),$el.find(".popover").popover().close(),$el.find(".pop-points-open").remove(),null==$el.find(".pop-role:visible").css("left")&&$el.find(".pop-points-open").css("left","110px"),$el.find(".pop-points-open").remove(),$el.find(target).append(html),$el.find(".pop-points-open").popover().open(function(){return $(this).removeClass("active").closest("li").removeClass("active") +}),$el.find(".pop-points-open").show()},calculateTotalPoints=function(us){var notNullValues,values;return values=_.map(us.points,function(v){var _ref;return null!=(_ref=$scope.pointsById[v])?_ref.value:void 0}),0===values.length?"0":(notNullValues=_.filter(values,function(v){return null!=v}),0===notNullValues.length?"?":_.reduce(notNullValues,function(acc,num){return acc+num}))},save=$qqueue.bindAdd(function(){return function(roleId,pointId){var onError,onSuccess,points,us;return $el.find(".popover").popover().close(),us=angular.copy($model.$modelValue),points=_.clone($model.$modelValue.points,!0),points[roleId]=pointId,us.setAttr("points",points),us.points=points,us.total_points=calculateTotalPoints(us),$model.$setViewValue(us),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload")},onError=function(){return $confirm.notify("error"),us.revert(),$model.$setViewValue(us)},$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".total.clickable",function(event){var roleId,target,us;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),roleId=target.data("role-id"),us=$model.$modelValue,renderPoints(target,us,roleId),target.siblings().removeClass("active"),target.addClass("active")):void 0}),$el.on("click",".point",function(event){var pointId,roleId,target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),roleId=target.data("role-id"),pointId=target.data("point-id"),save(roleId,pointId)):void 0}),$scope.$watch($attrs.ngModel,function(us){return us?render(us):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsEstimation",["$rootScope","$tgRepo","$tgConfirm","$tgQqueue",UsEstimationDirective])}.call(this),function(){var defaultFilter,module,momentFormat,momentFromNow,taiga,unslugify,yesNoFilter;taiga=this.taiga,module=angular.module("taigaCommon"),defaultFilter=function(){return function(value,defaultValue){return value===[null,void 0]?defaultValue:value}},module.filter("default",defaultFilter),yesNoFilter=function(){return function(value){return value?"Yes":"No"}},module.filter("yesNo",yesNoFilter),unslugify=function(){return taiga.unslugify},module.filter("unslugify",unslugify),momentFormat=function(){return function(input,format){return input?moment(input).format(format):""}},module.filter("momentFormat",momentFormat),momentFromNow=function(){return function(input,without_suffix){return input?moment(input).fromNow(without_suffix||!1):""}},module.filter("momentFromNow",momentFromNow)}.call(this),function(){var HistoryController,HistoryDirective,bindOnce,debounce,module,taiga,trim,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,trim=this.taiga.trim,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaCommon"),HistoryController=function(_super){function HistoryController(scope,repo,rs){this.scope=scope,this.repo=repo,this.rs=rs}return __extends(HistoryController,_super),HistoryController.$inject=["$scope","$tgRepo","$tgResources"],HistoryController.prototype.initialize=function(type,objectId){return this.type=type,this.objectId=objectId},HistoryController.prototype.loadHistory=function(type,objectId){return this.rs.history.get(type,objectId).then(function(_this){return function(history){var historyResult,_i,_len;for(_i=0,_len=history.length;_len>_i;_i++)historyResult=history[_i],null!=historyResult.values_diff.description_diff&&(historyResult.values_diff.description=historyResult.values_diff.description_diff),delete historyResult.values_diff.description_html,delete historyResult.values_diff.description_diff;return _this.scope.history=history,_this.scope.comments=_.filter(history,function(item){return""!==item.comment})}}(this))},HistoryController.prototype.deleteComment=function(type,objectId,activityId){return this.rs.history.deleteComment(type,objectId,activityId).then(function(_this){return function(){return _this.loadHistory(type,objectId)}}(this))},HistoryController.prototype.undeleteComment=function(type,objectId,activityId){return this.rs.history.undeleteComment(type,objectId,activityId).then(function(_this){return function(){return _this.loadHistory(type,objectId)}}(this))},HistoryController}(taiga.Controller),HistoryDirective=function($log,$loading,$qqueue){var link,templateActivity,templateBase,templateBaseEntries,templateChangeAttachment,templateChangeDiff,templateChangeGeneric,templateChangePoints,templateDeletedComment,templateFn;return templateChangeDiff=_.template('
    \n
    \n <%- name %>\n
    \n
    \n

    \n <%= diff %>\n

    \n
    \n
    '),templateChangePoints=_.template('<% _.each(points, function(point, name) { %>\n
    \n
    \n US points (<%- name.toLowerCase() %>)\n
    \n
    \n

    \n from
    \n <%- point[0] %>\n

    \n

    \n to
    \n <%- point[1] %>\n

    \n
    \n
    \n<% }); %>'),templateChangeGeneric=_.template('
    \n
    \n <%- name %>\n
    \n
    \n

    \n from
    \n <%- from %>\n

    \n

    \n to
    \n <%- to %>\n

    \n
    \n
    '),templateChangeAttachment=_.template('
    \n
    \n <%- name %>\n
    \n
    \n <% _.each(diff, function(change) { %>\n

    \n <%- change.name %> from
    \n <%- change.from %>\n

    \n

    \n <%- change.name %> to
    \n <%- change.to %>\n

    \n <% }) %>\n
    \n
    '),templateDeletedComment=_.template('
    \n
    \n Comment deleted by <%- deleteCommentUser %> on <%- deleteCommentDate %>\n (Show deleted comment)\n \n
    <%= deleteComment %>
    \n
    \n <% if (canRestoreComment) { %>\n \n \n Restore comment\n \n <% } %>\n
    '),templateActivity=_.template('
    \n
    \n \n <%- userFullName %>\n \n
    \n
    \n
    \n \n <%- userFullName %>\n \n \n <%- creationDate %>\n \n
    \n\n <% if (comment.length > 0) { %>\n <% if ((deleteCommentDate || deleteCommentUser)) { %>\n
    \n Comment deleted by <%- deleteCommentUser %> on <%- deleteCommentDate %>\n
    \n <% } %>\n
    \n <%= comment %>\n
    \n <% if (!deleteCommentDate && mode !== "activity" && canDeleteComment) { %>\n \n <% } %>\n <% } %>\n\n <% if(changes.length > 0) { %>\n
    \n <% if (mode != "activity") { %>\n \n <%- changesText %>\n \n \n <% } %>\n\n <% _.each(changes, function(change) { %>\n <%= change %>\n <% }) %>\n
    \n <% } %>\n
    \n
    '),templateBaseEntries=_.template('\n<% if (showMore > 0) { %>\n\n+ Show previous entries (<%- showMore %> more)\n\n<% } %>\n<% _.each(entries, function(entry) { %>\n <%= entry %>\n<% }) %>'),templateBase=_.template('
    \n \n
    \n
    \n
    \n \n <% if (mode !== "edit") { %>\n \n \n Markdown syntax help\n \n Comment\n <% } %>\n
    \n
    \n \n
    '),link=function($scope,$el,$attrs,$ctrl){var countChanges,formatChange,getHumanizedFieldName,getUserAvatar,getUserFullName,objectId,renderActivity,renderAttachmentEntry,renderChange,renderChangeEntries,renderChangeEntry,renderChangesHelperText,renderComment,renderComments,renderHistory,save,showAllActivity,showAllComments,type;return type=$attrs.type,objectId=null,showAllComments=!1,showAllActivity=!1,bindOnce($scope,$attrs.ngModel,function(model){return type=$attrs.type,objectId=model.id,$ctrl.initialize(type,objectId),$ctrl.loadHistory(type,objectId)}),getHumanizedFieldName=function(field){var humanizedFieldNames;return humanizedFieldNames={assigned_to:"assigned to",is_closed:"is closed",finish_date:"finish date",client_requirement:"client requirement",team_requirement:"team requirement",milestone:"sprint",user_story:"user story",is_iocaine:"is iocaine",is_deprecated:"is deprecated"},humanizedFieldNames[field]||field},getUserFullName=function(userId){var _ref;return null!=(_ref=$scope.usersById[userId])?_ref.full_name_display:void 0},getUserAvatar=function(userId){return null!=$scope.usersById[userId]?$scope.usersById[userId].photo:"/images/unnamed.png"},countChanges=function(comment){return _.keys(comment.values_diff).length},formatChange=function(change){return _.isArray(change)?0===change.length?"nil":change.join(", "):""===change?"nil":change===!0?"yes":change===!1?"no":change},renderAttachmentEntry=function(value){var attachments;return attachments=_.map(value,function(changes,type){return"new"===type?_.map(changes,function(change){return templateChangeDiff({name:"new attachment",diff:change.filename})}):"deleted"===type?_.map(changes,function(change){return templateChangeDiff({name:"deleted attachment",diff:change.filename})}):_.map(changes,function(change){var diff,name;return name="updated attachment "+change.filename,diff=_.map(change.changes,function(values,name){return{name:getHumanizedFieldName(name),from:formatChange(values[0]),to:formatChange(values[1])}}),templateChangeAttachment({name:name,diff:diff})})}),_.flatten(attachments).join("\n")},renderChangeEntry=function(field,value){var from,name,to;return"description"===field?templateChangeDiff({name:"description",diff:value[1]}):"points"===field?templateChangePoints({points:value}):"attachments"===field?renderAttachmentEntry(value):"assigned_to"===field?(name=getHumanizedFieldName(field),from=formatChange(value[0]||"Unassigned"),to=formatChange(value[1]||"Unassigned"),templateChangeGeneric({name:name,from:from,to:to})):(name=getHumanizedFieldName(field),from=formatChange(value[0]),to=formatChange(value[1]),templateChangeGeneric({name:name,from:from,to:to}))},renderChangeEntries=function(change,join){var entries;return null==join&&(join=!0),entries=_.map(change.values_diff,function(value,field){return renderChangeEntry(field,value)}),join?entries.join("\n"):entries},renderChangesHelperText=function(change){var size;return size=countChanges(change),1===size?"Made "+size+" change":"Made "+size+" changes"},renderComment=function(comment){var _ref;return comment.delete_comment_date||comment.delete_comment_user?templateDeletedComment({deleteCommentDate:moment(comment.delete_comment_date).format("DD MMM YYYY HH:mm"),deleteCommentUser:comment.delete_comment_user.name,deleteComment:comment.comment_html,activityId:comment.id,canRestoreComment:comment.delete_comment_user.pk===$scope.user.id||$scope.project.my_permissions.indexOf("modify_project")>-1}):templateActivity({avatar:getUserAvatar(comment.user.pk),userFullName:comment.user.name,creationDate:moment(comment.created_at).format("DD MMM YYYY HH:mm"),comment:comment.comment_html,changesText:renderChangesHelperText(comment),changes:renderChangeEntries(comment,!1),mode:"comment",deleteCommentDate:comment.delete_comment_date?moment(comment.delete_comment_date).format("DD MMM YYYY HH:mm"):void 0,deleteCommentUser:(null!=(_ref=comment.delete_comment_user)?_ref.name:void 0)?comment.delete_comment_user.name:void 0,activityId:comment.id,canDeleteComment:comment.user.pk===$scope.user.id||$scope.project.my_permissions.indexOf("modify_project")>-1})},renderChange=function(change){var _ref;return templateActivity({avatar:getUserAvatar(change.user.pk),userFullName:change.user.name,creationDate:moment(change.created_at).format("DD MMM YYYY HH:mm"),comment:change.comment_html,changes:renderChangeEntries(change,!1),changesText:"",mode:"activity",deleteCommentDate:change.delete_comment_date?moment(change.delete_comment_date).format("DD MMM YYYY HH:mm"):void 0,deleteCommentUser:(null!=(_ref=change.delete_comment_user)?_ref.name:void 0)?change.delete_comment_user.name:void 0,activityId:change.id})},renderHistory=function(entries,totalEntries){var showMore;return showMore=entries.length===totalEntries?0:totalEntries-entries.length,templateBaseEntries({entries:entries,showMore:showMore})},renderComments=function(){var comments,html,totalComments;return comments=$scope.comments||[],totalComments=comments.length,showAllComments||(comments=_.last(comments,4)),comments=_.map(comments,function(x){return renderComment(x)}),html=renderHistory(comments,totalComments),$el.find(".comments-list").html(html)},renderActivity=function(){var changes,html,totalChanges;return changes=$scope.history||[],totalChanges=changes.length,showAllActivity||(changes=_.last(changes,4)),changes=_.map(changes,function(x){return renderChange(x)}),html=renderHistory(changes,totalChanges),$el.find(".changes-list").html(html)},save=$qqueue.bindAdd(function(){return function(target){var model,onError,onSuccess;return $scope.$broadcast("markdown-editor:submit"),$el.find(".comment-list").addClass("activeanimation"),onSuccess=function(){return $ctrl.loadHistory(type,objectId)["finally"](function(){return $loading.finish(target)})},onError=function(){return $loading.finish(target),$confirm.notify("error")},model=$scope.$eval($attrs.ngModel),$loading.start(target),$ctrl.repo.save(model).then(onSuccess,onError)}}(this)),$scope.$watch("comments",renderComments),$scope.$watch("history",renderActivity),$scope.$on("history:reload",function(){return $ctrl.loadHistory(type,objectId)}),$el.on("click",".add-comment a.button-green",debounce(2e3,function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),save(target)})),$el.on("click",".show-more",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.parent().is(".changes-list")?(showAllActivity=!showAllActivity,renderActivity()):(showAllComments=!showAllComments,renderComments())}),$el.on("click",".show-deleted-comment",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.parents(".activity-single").find(".hide-deleted-comment").show(),target.parents(".activity-single").find(".show-deleted-comment").hide(),target.parents(".activity-single").find(".comment-body").show()}),$el.on("click",".hide-deleted-comment",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.parents(".activity-single").find(".hide-deleted-comment").hide(),target.parents(".activity-single").find(".show-deleted-comment").show(),target.parents(".activity-single").find(".comment-body").hide()}),$el.on("click",".changes-title",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.parent().find(".change-entry").toggleClass("active")}),$el.on("focus",".add-comment textarea",function(){return $(this).addClass("active")}),$el.on("click",".history-tabs li a",function(){return $el.find(".history-tabs li a").toggleClass("active"),$el.find(".history section").toggleClass("hidden")}),$el.on("click",".comment-delete",debounce(2e3,function(event){var activityId,target;return target=angular.element(event.currentTarget),activityId=target.data("activity-id"),$ctrl.deleteComment(type,objectId,activityId)})),$el.on("click",".comment-restore",debounce(2e3,function(event){var activityId,target;return target=angular.element(event.currentTarget),activityId=target.data("activity-id"),$ctrl.undeleteComment(type,objectId,activityId)})),$scope.$on("$destroy",function(){return $el.off()})},templateFn=function($el,$attrs){return templateBase({ngmodel:$attrs.ngModel,type:$attrs.type,mode:$attrs.mode})},{controller:HistoryController,template:templateFn,restrict:"AE",link:link}},module.directive("tgHistory",["$log","$tgLoading","$tgQqueue",HistoryDirective])}.call(this),function(){var AssignedToLightboxDirective,BlockLightboxDirective,BlockingMessageInputDirective,CreateBulkUserstoriesDirective,CreateEditUserstoryDirective,LightboxDirective,LightboxKeyboardNavigationService,LightboxService,NotionButtonDirective,NotionLightboxDirective,WatchersLightboxDirective,bindOnce,debounce,module,timeout,usersTemplate,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};module=angular.module("taigaCommon"),bindOnce=this.taiga.bindOnce,timeout=this.taiga.timeout,debounce=this.taiga.debounce,LightboxService=function(_super){function LightboxService(animationFrame){this.animationFrame=animationFrame}return __extends(LightboxService,_super),LightboxService.prototype.open=function($el){var docEl,lightboxContent;return lightboxContent=$el.children().not(".close"),lightboxContent.hide(),$el.css("display","flex"),$el.find("input,textarea").first().focus(),this.animationFrame.add(function(){return function(){return $el.addClass("open"),lightboxContent.show()}}(this)),docEl=angular.element(document),docEl.on("keydown.lightbox",function(_this){return function(e){var code;return code=e.keyCode?e.keyCode:e.which,27===code?_this.close($el):void 0}}(this))},LightboxService.prototype.close=function($el){var docEl;return docEl=angular.element(document),docEl.off(".lightbox"),docEl.off(".keyboard-navigation"),$el.one("transitionend",function(){return function(){return $el.removeAttr("style"),$el.removeClass("open").removeClass("close")}}(this)),$el.addClass("close")},LightboxService.prototype.closeAll=function(){var docEl,lightboxEl,_i,_len,_ref,_results;for(docEl=angular.element(document),_ref=docEl.find(".lightbox.open"),_results=[],_i=0,_len=_ref.length;_len>_i;_i++)lightboxEl=_ref[_i],_results.push(this.close($(lightboxEl)));return _results},LightboxService}(taiga.Service),module.service("lightboxService",["animationFrame",LightboxService]),LightboxKeyboardNavigationService=function(_super){function LightboxKeyboardNavigationService(){return LightboxKeyboardNavigationService.__super__.constructor.apply(this,arguments)}return __extends(LightboxKeyboardNavigationService,_super),LightboxKeyboardNavigationService.prototype.stop=function(){var docEl;return docEl=angular.element(document),docEl.off(".keyboard-navigation")},LightboxKeyboardNavigationService.prototype.dispatch=function($el,code){var activeElement,next,prev;if(activeElement=$el.find(".active"),13===code)return activeElement.trigger("click");if(40===code){if(!activeElement.length)return $el.find(".watcher-single:first").addClass("active");if(next=activeElement.next(".watcher-single"),next.length)return activeElement.removeClass("active"),next.addClass("active")}else if(38===code){if(!activeElement.length)return $el.find(".watcher-single:last").addClass("active");if(prev=activeElement.prev(".watcher-single"),prev.length)return activeElement.removeClass("active"),prev.addClass("active")}},LightboxKeyboardNavigationService.prototype.init=function($el){var docEl;return this.stop(),docEl=angular.element(document),docEl.on("keydown.keyboard-navigation",function(_this){return function(event){var code;return code=event.keyCode?event.keyCode:event.which,40===code||38===code||13===code?(event.preventDefault(),_this.dispatch($el,code)):void 0}}(this))},LightboxKeyboardNavigationService}(taiga.Service),module.service("lightboxKeyboardNavigationService",LightboxKeyboardNavigationService),LightboxDirective=function(lightboxService){var link;return link=function($scope,$el){return $el.on("click",".close",function(event){return event.preventDefault(),lightboxService.close($el)})},{restrict:"C",link:link}},module.directive("lightbox",["lightboxService",LightboxDirective]),BlockLightboxDirective=function($rootscope,$tgrepo,$confirm,lightboxService,$loading,$qqueue){var link;return link=function($scope,$el,$attrs,$model){var block,unblock;return $el.find("h2.title").text($attrs.title),unblock=$qqueue.bindAdd(function(){return function(item,finishCallback){var promise;return promise=$tgrepo.save(item),promise.then(function(){return $confirm.notify("success"),$rootscope.$broadcast("history:reload"),$model.$setViewValue(item),finishCallback()}),promise.then(null,function(){return $confirm.notify("error"),item.revert(),$model.$setViewValue(item)}),promise["finally"](function(){return finishCallback()}),promise}}(this)),block=$qqueue.bindAdd(function(){return function(item){var promise;return $model.$setViewValue(item),$loading.start($el.find(".button-green")),promise=$tgrepo.save($model.$modelValue),promise.then(function(){return $confirm.notify("success"),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return $confirm.notify("error"),item.revert(),$model.$setViewValue(item)}),promise["finally"](function(){return $loading.finish($el.find(".button-green")),lightboxService.close($el)})}}(this)),$scope.$on("block",function(){return $el.find(".reason").val($model.$modelValue.blocked_note),lightboxService.open($el)}),$scope.$on("unblock",function(){return function(event,model,finishCallback){var item;return item=$model.$modelValue.clone(),item.is_blocked=!1,item.blocked_note="",unblock(item,finishCallback)}}(this)),$scope.$on("$destroy",function(){return $el.off()}),$el.on("click",".button-green",function(event){var item;return event.preventDefault(),item=$model.$modelValue.clone(),item.is_blocked=!0,item.blocked_note=$el.find(".reason").val(),block(item)})},{templateUrl:"/partials/views/modules/lightbox-block.html",link:link,require:"ngModel"}},module.directive("tgLbBlock",["$rootScope","$tgRepo","$tgConfirm","lightboxService","$tgLoading","$tgQqueue",BlockLightboxDirective]),BlockingMessageInputDirective=function($log){var link,template,templateFn;return template=_.template(''),link=function($scope,$el,$attrs){return $attrs.watch?$scope.$watch($attrs.watch,function(value){return value===!0&&value===!0?$el.find(".blocked-note").removeClass("hidden"):$el.find(".blocked-note").addClass("hidden")}):$log.error("No watch attribute on tg-blocking-message-input directive")},templateFn=function($el,$attrs){return template({ngmodel:$attrs.ngModel})},{template:templateFn,link:link,require:"ngModel",restrict:"EA"}},module.directive("tgBlockingMessageInput",["$log",BlockingMessageInputDirective]),CreateEditUserstoryDirective=function($repo,$model,$rs,$rootScope,lightboxService,$loading){var link;return link=function($scope,$el){var submit,submitButton;return $scope.isNew=!0,$scope.$on("usform:new",function(ctx,projectId,status,statusList){return $scope.isNew=!0,$scope.usStatusList=statusList,$scope.us=$model.make_model("userstories",{project:projectId,points:{},status:status,is_archived:!1,tags:[]}),$el.find(".button-green").html("Create"),$el.find(".title").html("New user story "),$el.find(".tag-input").val(""),$el.find(".blocked-note").addClass("hidden"),$el.find("label.blocked").removeClass("selected"),$el.find("label.team-requirement").removeClass("selected"),$el.find("label.client-requirement").removeClass("selected"),lightboxService.open($el)}),$scope.$on("usform:edit",function(ctx,us){return $scope.us=us,$scope.isNew=!1,$el.find(".button-green").html("Save"),$el.find(".title").html("Edit user story "),$el.find(".tag-input").val(""),us.is_blocked?($el.find(".blocked-note").removeClass("hidden"),$el.find("label.blocked").addClass("selected")):($el.find(".blocked-note").addClass("hidden"),$el.find("label.blocked").removeClass("selected")),us.team_requirement?$el.find("label.team-requirement").addClass("selected"):$el.find("label.team-requirement").removeClass("selected"),us.client_requirement?$el.find("label.client-requirement").addClass("selected"):$el.find("label.client-requirement").removeClass("selected"),lightboxService.open($el)}),submit=debounce(2e3,function(){return function(event){var broadcastEvent,form,promise;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?($loading.start(submitButton),$scope.isNew?(promise=$repo.create("userstories",$scope.us),broadcastEvent="usform:new:success"):(promise=$repo.save($scope.us),broadcastEvent="usform:edit:success"),promise.then(function(data){return $loading.finish(submitButton),lightboxService.close($el),$rootScope.$broadcast(broadcastEvent,data)}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$el.on("click",".close",function(event){return event.preventDefault(),$scope.$apply(function(){return $scope.us.revert()}),lightboxService.close($el)}),$el.keydown(function(event){var code;return code=event.keyCode?event.keyCode:event.which,27===code?(lightboxService.close($el),$scope.$apply(function(){return $scope.us.revert()})):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbCreateEditUserstory",["$tgRepo","$tgModel","$tgResources","$rootScope","lightboxService","$tgLoading",CreateEditUserstoryDirective]),CreateBulkUserstoriesDirective=function($repo,$rs,$rootscope,lightboxService,$loading){var link;return link=function($scope,$el){var submit,submitButton;return $scope.$on("usform:bulk",function(ctx,projectId,status){return $scope["new"]={projectId:projectId,statusId:status,bulk:""},lightboxService.open($el)}),submit=debounce(2e3,function(){return function(event){var form,promise;return event.preventDefault(),form=$el.find("form").checksley({onlyOneErrorElement:!0}),form.validate()?($loading.start(submitButton),promise=$rs.userstories.bulkCreate($scope["new"].projectId,$scope["new"].statusId,$scope["new"].bulk),promise.then(function(result){return $loading.finish(submitButton),$rootscope.$broadcast("usform:bulk:success",result),lightboxService.close($el)}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbCreateBulkUserstories",["$tgRepo","$tgResources","$rootScope","lightboxService","$tgLoading",CreateBulkUserstoriesDirective]),usersTemplate=_.template('<% if (selected) { %>\n\n<% } %>\n\n<% _.each(users, function(user) { %>\n\n<% }) %>\n\n<% if (showMore) { %>\n
    \n ...too many users, keep filtering\n
    \n<% } %>'),AssignedToLightboxDirective=function(lightboxService,lightboxKeyboardNavigationService){var link;return link=function($scope,$el){var closeLightbox,filterUsers,normalizeString,render,selectedItem,selectedUser;return selectedUser=null,selectedItem=null,normalizeString=function(string){var normalizedString;return normalizedString=string,normalizedString=normalizedString.replace("Á","A").replace("Ä","A").replace("À","A"),normalizedString=normalizedString.replace("É","E").replace("Ë","E").replace("È","E"),normalizedString=normalizedString.replace("Í","I").replace("Ï","I").replace("Ì","I"),normalizedString=normalizedString.replace("Ó","O").replace("Ö","O").replace("Ò","O"),normalizedString=normalizedString.replace("Ú","U").replace("Ü","U").replace("Ù","U")},filterUsers=function(text,user){var username;return username=user.full_name_display.toUpperCase(),username=normalizeString(username),text=text.toUpperCase(),text=normalizeString(text),_.contains(username,text) +},render=function(selected,text){var ctx,html,users;return $el.find("input").focus(),users=_.clone($scope.activeUsers,!0),null!=selected&&(users=_.reject(users,{id:selected.id})),null!=text&&(users=_.filter(users,_.partial(filterUsers,text))),ctx={selected:selected,users:_.first(users,5),showMore:users.length>5},html=usersTemplate(ctx),$el.find("div.watchers").html(html),lightboxKeyboardNavigationService.init($el)},closeLightbox=function(){return lightboxKeyboardNavigationService.stop(),lightboxService.close($el)},$scope.$on("assigned-to:add",function(ctx,item){var assignedToId;return selectedItem=item,assignedToId=item.assigned_to,selectedUser=$scope.usersById[assignedToId],render(selectedUser),lightboxService.open($el),$el.find("input").focus()}),$scope.$watch("usersSearch",function(searchingText){return null!=searchingText?render(selectedUser,searchingText):void 0}),$el.on("click",".watcher-single",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),closeLightbox(),$scope.$apply(function(){return $scope.$broadcast("assigned-to:added",target.data("user-id"),selectedItem),$scope.usersSearch=null})}),$el.on("click",".remove-assigned-to",function(event){return event.preventDefault(),event.stopPropagation(),closeLightbox(),$scope.$apply(function(){return $scope.usersSearch=null,$scope.$broadcast("assigned-to:added",null,selectedItem)})}),$el.on("click",".close",function(event){return event.preventDefault(),closeLightbox(),$scope.$apply(function(){return $scope.usersSearch=null})}),$scope.$on("$destroy",function(){return $el.off()})},{templateUrl:"/partials/views/modules/lightbox-assigned-to.html",link:link}},module.directive("tgLbAssignedto",["lightboxService","lightboxKeyboardNavigationService",AssignedToLightboxDirective]),WatchersLightboxDirective=function($repo,lightboxService,lightboxKeyboardNavigationService){var link;return link=function($scope,$el){var closeLightbox,getFilteredUsers,render,selectedItem;return selectedItem=null,getFilteredUsers=function(text){var users,_filterUsers;return null==text&&(text=""),_filterUsers=function(text,user){var username;return selectedItem&&_.find(selectedItem.watchers,function(x){return x===user.id})?!1:(username=user.full_name_display.toUpperCase(),text=text.toUpperCase(),_.contains(username,text))},users=_.clone($scope.activeUsers,!0),users=_.filter(users,_.partial(_filterUsers,text))},render=function(users){var ctx,html;return $el.find("input").focus(),ctx={selected:!1,users:_.first(users,5),showMore:users.length>5},html=usersTemplate(ctx),$el.find("div.watchers").html(html)},closeLightbox=function(){return lightboxKeyboardNavigationService.stop(),lightboxService.close($el)},$scope.$on("watcher:add",function(ctx,item){var users;return selectedItem=item,users=getFilteredUsers(),render(users),lightboxService.open($el),lightboxKeyboardNavigationService.init($el)}),$scope.$watch("usersSearch",function(searchingText){var users;if(null!=searchingText)return users=getFilteredUsers(searchingText),render(users)}),$el.on("click",".watcher-single",debounce(2e3,function(event){var target;return closeLightbox(),event.preventDefault(),target=angular.element(event.currentTarget),$scope.$apply(function(){return $scope.usersSearch=null,$scope.$broadcast("watcher:added",target.data("user-id"))})})),$el.on("click",".close",function(event){return event.preventDefault(),closeLightbox(),$scope.$apply(function(){return $scope.usersSearch=null})}),$scope.$on("$destroy",function(){return $el.off()})},{templateUrl:"/partials/views/modules/lightbox-users.html",link:link}},module.directive("tgLbWatchers",["$tgRepo","lightboxService","lightboxKeyboardNavigationService",WatchersLightboxDirective]),NotionLightboxDirective=function(lightboxService){var link;return link=function($scope,$el){return $scope.$on("notion:open",function(event,lightboxId){return $el.attr("id")===lightboxId?lightboxService.open($el):void 0}),$el.on("click",".button-green",function(){return lightboxService.close($el)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbNotion",["lightboxService",NotionLightboxDirective]),NotionButtonDirective=function($log,$rootScope){var link;return link=function($scope,$el,$attrs){return null==$attrs.tgLbNotionButton?$log.error("NotionButtonDirective: the directive need the id of the notion lightbox"):($el.on("click",function(){return $rootScope.$broadcast("notion:open",$attrs.tgLbNotionButton)}),$scope.$on("$destroy",function(){return $el.off()}))},{link:link}},module.directive("tgLbNotionButton",["$log","$rootScope",NotionButtonDirective])}.call(this),function(){var Loader,LoaderDirective,module,sizeFormat,taiga,timeout;taiga=this.taiga,sizeFormat=this.taiga.sizeFormat,timeout=this.taiga.timeout,module=angular.module("taigaCommon"),LoaderDirective=function(tgLoader,$rootscope){var link;return link=function($scope,$el){return tgLoader.onStart(function(){return $(document.body).addClass("loader-active"),$el.addClass("active")}),tgLoader.onEnd(function(){return $(document.body).removeClass("loader-active"),$el.removeClass("active")}),$rootscope.$on("$routeChangeSuccess",function(){return tgLoader.startCurrentPageLoader()}),$rootscope.$on("$locationChangeSuccess",function(){return tgLoader.reset()})},{link:link}},module.directive("tgLoader",["tgLoader","$rootScope",LoaderDirective]),Loader=function(){var config,defaultConfig,forceDisabled;forceDisabled=!1,defaultConfig={enabled:!1,minTime:300},config=_.merge({},defaultConfig),this.add=function(){return function(){return forceDisabled?void 0:config.enabled=!0}},this.$get=["$rootScope",function($rootscope){var pageLoaded,reset,start,startLoadTime;return startLoadTime=0,reset=function(){return config=_.merge({},defaultConfig)},pageLoaded=function(force){var diff,endTime,timeoutValue;return null==force&&(force=!1),startLoadTime?(timeoutValue=0,force||(endTime=(new Date).getTime(),diff=endTime-startLoadTime,diff"))},TgLoadingService.prototype.finish=function(target){var oldContent;return target.hasClass("loading")?(oldContent=target.data("loading-old-content"),target.data("loading-old-content",null),target.html(oldContent),target.removeClass("loading")):void 0},TgLoadingService}(taiga.Service),module.service("$tgLoading",TgLoadingService)}.call(this),function(){var RelatedTaskStatusDirective,UsStatusDirective,bindOnce,debounce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaCommon"),UsStatusDirective=function($repo){var link,template;return template=_.template(''),link=function($scope,$el,$attrs){var $ctrl,render,us;return $ctrl=$el.controller(),render=function(us){var usStatusById,usStatusDom,usStatusDomParent;return usStatusDomParent=$el.find(".us-status"),usStatusDom=$el.find(".us-status .us-status-bind"),usStatusById=$scope.usStatusById,usStatusById[us.status]?(usStatusDom.text(usStatusById[us.status].name),usStatusDomParent.css("color",usStatusById[us.status].color)):void 0},$el.on("click",".us-status",function(event){return event.preventDefault(),event.stopPropagation(),$el.find(".pop-status").popover().open()}),$el.on("click",".status",debounce(2e3,function(event){var target,us;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),us=$scope.$eval($attrs.tgUsStatus),us.status=target.data("status-id"),render(us),$el.find(".pop-status").popover().close(),$scope.$apply(function(){return $repo.save(us).then(function(){return $scope.$eval($attrs.onUpdate)})})})),$scope.$on("userstories:loaded",function(){return render($scope.$eval($attrs.tgUsStatus))}),$scope.$on("$destroy",function(){return $el.off()}),us=$scope.$eval($attrs.tgUsStatus),render(us),bindOnce($scope,"project",function(project){var html;return html=template({statuses:project.us_statuses}),$el.append(html),-1===$scope.project.my_permissions.indexOf("modify_us")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0})},{link:link}},module.directive("tgUsStatus",["$tgRepo",UsStatusDirective]),RelatedTaskStatusDirective=function($repo){var link,selectionTemplate,updateTaskStatus;return selectionTemplate=_.template(''),updateTaskStatus=function($el,task,taskStatusById){var taskStatusDom,taskStatusDomParent;return taskStatusDomParent=$el.find(".us-status"),taskStatusDom=$el.find(".task-status .task-status-bind"),taskStatusById[task.status]?(taskStatusDom.text(taskStatusById[task.status].name),taskStatusDomParent.css("color",taskStatusById[task.status].color)):void 0},link=function($scope,$el,$attrs){var $ctrl,autoSave,notAutoSave,task;return $ctrl=$el.controller(),task=$scope.$eval($attrs.tgRelatedTaskStatus),notAutoSave=$scope.$eval($attrs.notAutoSave),autoSave=!notAutoSave,$el.on("click",".task-status",function(event){return event.preventDefault(),event.stopPropagation(),$el.find(".pop-status").popover().open()}),$el.on("click",".status",debounce(2e3,function(event){var target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),task.status=target.data("status-id"),$el.find(".pop-status").popover().close(),updateTaskStatus($el,task,$scope.taskStatusById),autoSave?$scope.$apply(function(){return $repo.save(task).then(function(){return $scope.$eval($attrs.onUpdate),$scope.$emit("related-tasks:status-changed")})}):void 0})),taiga.bindOnce($scope,"project",function(project){return $el.append(selectionTemplate({statuses:project.task_statuses})),updateTaskStatus($el,task,$scope.taskStatusById),-1===project.my_permissions.indexOf("modify_task")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRelatedTaskStatus",["$tgRepo",RelatedTaskStatusDirective]),$.fn.popover=function(){var $el,close,closeAll,closePopover,isVisible,open;return $el=this,isVisible=function(){return function(){var docViewBottom,docViewLeft,docViewRight,docViewTop,docViewWidth,elemBottom,elemLeft,elemRight,elemTop,elemWidth;return $el.css({display:"block",visibility:"hidden"}),docViewTop=$(window).scrollTop(),docViewBottom=docViewTop+$(window).height(),docViewWidth=$(window).width(),docViewRight=docViewWidth,docViewLeft=0,elemTop=$el.offset().top,elemBottom=elemTop+$el.height(),elemWidth=$el.width(),elemLeft=$el.offset().left,elemRight=$el.offset().left+elemWidth,$el.css({display:"none",visibility:"visible"}),docViewBottom>=elemBottom&&elemTop>=docViewTop&&elemLeft>=docViewLeft&&docViewRight>=elemRight}}(this),closePopover=function(){return function(onClose){return onClose&&onClose.call($el),$el.fadeOut(function(){return $el.removeClass("active").removeClass("fix")}),$el.off("popup:close")}}(this),closeAll=function(){return function(){return $(".popover.active").each(function(){return $(this).trigger("popup:close")})}}(this),open=function(){return function(onClose){return $el.hasClass("active")?close():(closeAll(),isVisible()||$el.addClass("fix"),$el.fadeIn(function(){return $el.addClass("active"),$(document.body).off("popover"),$(document.body).one("click.popover",function(){return closeAll()})}),$el.on("popup:close",function(){return closePopover(onClose)}))}}(this),close=function(){return function(){return $el.trigger("popup:close")}}(this),{open:open,close:close,closeAll:closeAll}}}.call(this),function(){var ExceptionHandlerFactory,module,taiga;taiga=this.taiga,module=angular.module("taigaCommon"),ExceptionHandlerFactory=function($log,config){var ravenConfig;return this.config=config,ravenConfig=this.config.get("ravenConfig",null),ravenConfig?($log.debug("Using the RavenJS exception handler."),Raven.config(ravenConfig).install(),function(exception){return $log.error.apply($log,arguments),Raven.captureException(exception)}):($log.debug("Using the default logging exception handler."),function(){return $log.error.apply($log,arguments)})},module.factory("$exceptionHandler",["$log","$tgConfig",ExceptionHandlerFactory])}.call(this),function(){var ColorizeTagsDirective,LbTagLineDirective,TagLineDirective,TagsDirective,bindOnce,module,taiga,trim,__indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};taiga=this.taiga,trim=this.taiga.trim,bindOnce=this.taiga.bindOnce,module=angular.module("taigaCommon"),TagsDirective=function(){var formatter,link,parser;return formatter=function(v){return _.isArray(v)?v.join(", "):""},parser=function(v){var result;return v?(result=_(v.split(",")).map(function(x){return _.str.trim(x)}),result.value()):[]},link=function($scope,$el,$attrs,$ctrl){return $ctrl.$formatters.push(formatter),$ctrl.$parsers.push(parser),$scope.$on("$destroy",function(){return $el.off()})},{require:"ngModel",link:link}},module.directive("tgTags",TagsDirective),ColorizeTagsDirective=function(){var link,templates;return templates={backlog:_.template('<% _.each(tags, function(tag) { %>\n <%- tag.name %>\n<% }) %>'),kanban:_.template('<% _.each(tags, function(tag) { %>\n \n<% }) %>'),taskboard:_.template('<% _.each(tags, function(tag) { %>\n \n<% }) %>')},link=function($scope,$el,$attrs){var render;return render=function(srcTags){var html,tags,template;return template=templates[$attrs.tgColorizeTagsType],srcTags.sort(),tags=_.map(srcTags,function(tag){var color;return color=$scope.project.tags_colors[tag],{name:tag,color:color}}),html=template({tags:tags}),$el.html(html)},$scope.$watch($attrs.tgColorizeTags,function(tags){return null!=tags?render(tags):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgColorizeTags",ColorizeTagsDirective),LbTagLineDirective=function(){var COMMA_KEY,ENTER_KEY,link,template,templateTags;return ENTER_KEY=13,COMMA_KEY=188,template='
    \n\n
    ',templateTags=_.template('<% _.each(tags, function(tag) { %>\n style="border-left: 5px solid <%- tag.color %>;"<% } %>>\n <%- tag.name %>\n \n \n<% }); %>'),link=function($scope,$el,$attrs,$model){var addValue,deleteValue,hideSaveButton,removeInputLastCharacter,renderTags,resetInput,saveInputTag,showSaveButton;return renderTags=function(tags,tagsColors){var ctx,html;return ctx={tags:_.map(tags,function(t){return{name:t,color:tagsColors[t]}})},html=templateTags(ctx),$el.find("div.tags-container").html(html)},showSaveButton=function(){return $el.find(".save").removeClass("hidden")},hideSaveButton=function(){return $el.find(".save").addClass("hidden")},resetInput=function(){return $el.find("input").val(""),$el.find("input").autocomplete("close")},addValue=function(value){var tags;return value=trim(value.toLowerCase()),0!==value.length?(tags=_.clone($model.$modelValue,!1),null==tags&&(tags=[]),__indexOf.call(tags,value)<0&&tags.push(value),$scope.$apply(function(){return $model.$setViewValue(tags)})):void 0},deleteValue=function(value){var tags;return value=trim(value.toLowerCase()),0!==value.length?(tags=_.clone($model.$modelValue,!1),tags=_.pull(tags,value),$scope.$apply(function(){return $model.$setViewValue(tags)})):void 0},saveInputTag=function(){var value;return value=$el.find("input").val(),addValue(value),resetInput(),hideSaveButton()},removeInputLastCharacter=function(){return function(input){var inputValue;return inputValue=input.val(),input.val(inputValue.substring(0,inputValue.length-1))}}(this),$el.on("keypress","input",function(event){return event.keyCode===ENTER_KEY?event.preventDefault():void 0}),$el.on("keyup","input",function(event){var target;return target=angular.element(event.currentTarget),event.keyCode===ENTER_KEY?saveInputTag():event.keyCode===COMMA_KEY?(removeInputLastCharacter(target),saveInputTag()):target.val().length?showSaveButton():hideSaveButton()}),$el.on("click",".save",function(event){return event.preventDefault(),saveInputTag()}),$el.on("click",".icon-delete",function(event){var target,value;return event.preventDefault(),target=angular.element(event.currentTarget),value=target.siblings(".tag-name").text(),deleteValue(value)}),bindOnce($scope,"project",function(project){var positioningFunction;return positioningFunction=function(position,elements){var menu;return menu=elements.element.element,menu.css("width",elements.target.width),menu.css("top",position.top),menu.css("left",position.left)},$el.find("input").autocomplete({source:_.keys(project.tags_colors),position:{my:"left top",using:positioningFunction},select:function(event,ui){return addValue(ui.item.value),ui.item.value=""}})}),$scope.$watch($attrs.ngModel,function(tags){var tagsColors,_ref;return tagsColors=(null!=(_ref=$scope.project)?_ref.tags_colors:void 0)||[],renderTags(tags,tagsColors)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel",template:template}},module.directive("tgLbTagLine",["$tgResources",LbTagLineDirective]),TagLineDirective=function($rootScope,$repo,$rs,$confirm,$qqueue){var COMMA_KEY,ENTER_KEY,ESC_KEY,link,template,templateTags;return ENTER_KEY=13,ESC_KEY=27,COMMA_KEY=188,template='
    \n\n\n',templateTags=_.template('<% _.each(tags, function(tag) { %>\n \n <%- tag.name %>\n <% if (isEditable) { %>\n \n <% } %>\n \n<% }); %>'),link=function($scope,$el,$attrs,$model){var addValue,deleteValue,hideAddTagButton,hideAddTagButtonText,hideInput,hideSaveButton,isEditable,removeInputLastCharacter,renderInReadModeOnly,renderTags,resetInput,saveInputTag,showAddTagButton,showAddTagButtonText,showInput,showSaveButton;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf($attrs.requiredPerm)},renderTags=function(tags,tagsColors){var ctx,html;return ctx={tags:_.map(tags,function(t){return{name:t,color:tagsColors[t]}}),isEditable:isEditable()},html=templateTags(ctx),$el.find("div.tags-container").html(html)},renderInReadModeOnly=function(){return $el.find(".add-tag").remove(),$el.find("input").remove(),$el.find(".save").remove()},showAddTagButton=function(){return $el.find(".add-tag").removeClass("hidden")},hideAddTagButton=function(){return $el.find(".add-tag").addClass("hidden")},showAddTagButtonText=function(){return $el.find(".add-tag-text").removeClass("hidden")},hideAddTagButtonText=function(){return $el.find(".add-tag-text").addClass("hidden")},showSaveButton=function(){return $el.find(".save").removeClass("hidden")},hideSaveButton=function(){return $el.find(".save").addClass("hidden")},showInput=function(){return $el.find("input").removeClass("hidden").focus()},hideInput=function(){return $el.find("input").addClass("hidden").blur()},resetInput=function(){return $el.find("input").val(""),$el.find("input").autocomplete("close")},addValue=$qqueue.bindAdd(function(value){var model,onError,onSuccess,tags;return value=trim(value.toLowerCase()),0!==value.length?(tags=_.clone($model.$modelValue.tags,!1),null==tags&&(tags=[]),__indexOf.call(tags,value)<0&&tags.push(value),model=$model.$modelValue.clone(),model.tags=tags,$model.$setViewValue(model),onSuccess=function(){return $rootScope.$broadcast("history:reload")},onError=function(){return $confirm.notify("error"),model.revert(),$model.$setViewValue(model)},$repo.save(model).then(onSuccess,onError)):void 0}),deleteValue=$qqueue.bindAdd(function(value){var model,onError,onSuccess,tags;return value=trim(value.toLowerCase()),0!==value.length?(tags=_.clone($model.$modelValue.tags,!1),tags=_.pull(tags,value),model=$model.$modelValue.clone(),model.tags=tags,$model.$setViewValue(model),onSuccess=function(){return $rootScope.$broadcast("history:reload")},onError=function(){return $confirm.notify("error"),model.revert(),$model.$setViewValue(model)},$repo.save(model).then(onSuccess,onError)):void 0}),saveInputTag=function(){var value;return value=$el.find("input").val(),addValue(value),resetInput(),hideSaveButton()},removeInputLastCharacter=function(){return function(input){var inputValue;return inputValue=input.val(),input.val(inputValue.substring(0,inputValue.length-1))}}(this),$el.on("keypress","input",function(event){var _ref;if((_ref=event.keyCode)===ENTER_KEY||_ref===ESC_KEY)return event.preventDefault()}),$el.on("keyup","input",function(event){var target;return target=angular.element(event.currentTarget),event.keyCode===ENTER_KEY?saveInputTag():event.keyCode===COMMA_KEY?(removeInputLastCharacter(target),saveInputTag()):event.keyCode===ESC_KEY?(resetInput(),hideInput(),hideSaveButton(),showAddTagButton()):target.val().length?showSaveButton():hideSaveButton()}),$el.on("click",".save",function(event){return event.preventDefault(),saveInputTag()}),$el.on("click",".add-tag",function(event){return event.preventDefault(),hideAddTagButton(),showInput()}),$el.on("click",".icon-delete",function(event){var target,value;return event.preventDefault(),target=angular.element(event.currentTarget),value=target.siblings(".tag-name").text(),deleteValue(value)}),bindOnce($scope,"project",function(project){var positioningFunction;return isEditable()?(showAddTagButton(),positioningFunction=function(position,elements){var menu;return menu=elements.element.element,menu.css("width",elements.target.width),menu.css("top",position.top),menu.css("left",position.left)},$el.find("input").autocomplete({source:_.keys(project.tags_colors),position:{my:"left top",using:positioningFunction},select:function(event,ui){return addValue(ui.item.value),ui.item.value=""}})):void renderInReadModeOnly()}),$scope.$watch($attrs.ngModel,function(model){var tagsColors,_ref,_ref1;if(model)return(null!=(_ref=model.tags)?_ref.length:void 0)?hideAddTagButtonText():showAddTagButtonText(),tagsColors=(null!=(_ref1=$scope.project)?_ref1.tags_colors:void 0)||[],renderTags(model.tags,tagsColors)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel",template:template}},module.directive("tgTagLine",["$rootScope","$tgRepo","$tgResources","$tgConfirm","$tgQqueue",TagLineDirective])}.call(this),function(){var bindOnce,module,taiga,tgMarkitupDirective;taiga=this.taiga,bindOnce=this.taiga.bindOnce,module=angular.module("taigaCommon"),tgMarkitupDirective=function($rootscope,$rs,$tr,$selectedText){var link,previewTemplate;return previewTemplate=_.template('
    \n
    \n \n
    \n
    \n <%= data %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var closePreviewMode,element,markdownCaretPositon,markdownSettings,markdownTitle,preview,previewDomNode,removeEmptyLine,setCaretPosition;return element=angular.element($el),previewDomNode=$("
    ",{"class":"preview"}),closePreviewMode=function(){return element.parents(".markdown").find(".preview").remove(),element.parents(".markItUp").show()},$scope.$on("markdown-editor:submit",function(){return closePreviewMode()}),preview=function(){var markItUpDomNode,markdownDomNode;return markdownDomNode=element.parents(".markdown"),markItUpDomNode=element.parents(".markItUp"),$rs.mdrender.render($scope.projectId,$model.$modelValue).then(function(data){var markdown;return markdownDomNode.append(previewTemplate({data:data.data})),markItUpDomNode.hide(),markdown=element.closest(".markdown"),markdown.on("mouseup.preview",".preview",function(event){var target;return event.preventDefault(),target=angular.element(event.target),target.is("a")||!$selectedText.get().length?(markdown.off(".preview"),closePreviewMode()):void 0})})},markdownCaretPositon=!1,setCaretPosition=function(elm,caretPos){var range;return elm.createTextRange?(range=elm.createTextRange(),range.move("character",caretPos),range.select()):elm.selectionStart?(elm.focus(),elm.setSelectionRange(caretPos,caretPos)):void 0},removeEmptyLine=function(textarea,line,currentCaretPosition){var lines,removedLineLength;return lines=textarea.value.split("\n"),removedLineLength=lines[line].length,lines[line]="",textarea.value=lines.join("\n"),currentCaretPosition-removedLineLength+1},markdownSettings={nameSpace:"markdown",onShiftEnter:{keepDefault:!1,openWith:"\n\n"},onEnter:{keepDefault:!1,replaceWith:function(){return function(data){var breakLineAtBeginning,cursorLine,emptyListItem,lastLine,lines,match,newLineContent;if(lines=data.textarea.value.split("\n"),cursorLine=data.textarea.value.slice(0,+(data.caretPosition-1)+1||9e9).split("\n").length,newLineContent=data.textarea.value.slice(data.caretPosition).split("\n")[0],lastLine=lines[cursorLine-1],match=lastLine.match(/^(\s*- ).*/))if(emptyListItem=lastLine.match(/^(\s*)\-\s$/))markdownCaretPositon=removeEmptyLine(data.textarea,lines.length-1,data.caretPosition);else if(breakLineAtBeginning=newLineContent.match(/^(\s*)\-\s/),!breakLineAtBeginning&&match)return"\n"+match[1];if(match=lastLine.match(/^(\s*\* ).*/))if(emptyListItem=lastLine.match(/^(\s*\* )$/))markdownCaretPositon=removeEmptyLine(data.textarea,lines.length-1,data.caretPosition);else if(breakLineAtBeginning=newLineContent.match(/^(\s*)\*\s/),!breakLineAtBeginning&&match)return"\n"+match[1];if(match=lastLine.match(/^(\s*)(\d+)\.\s/))if(emptyListItem=lastLine.match(/^(\s*)(\d+)\.\s$/))markdownCaretPositon=removeEmptyLine(data.textarea,lines.length-1,data.caretPosition);else if(breakLineAtBeginning=newLineContent.match(/^(\s*)(\d+)\.\s/),!breakLineAtBeginning)return"\n"+(match[1]+(parseInt(match[2],10)+1))+". ";return"\n"}}(this),afterInsert:function(data){var caretPosition,line,scrollRelation,totalLines;return markdownCaretPositon?(setCaretPosition(data.textarea,markdownCaretPositon),caretPosition=markdownCaretPositon,markdownCaretPositon=!1):caretPosition=data.caretPosition,totalLines=data.textarea.value.split("\n").length,line=data.textarea.value.slice(0,+(caretPosition-1)+1||9e9).split("\n").length,scrollRelation=line/totalLines,$el.scrollTop(scrollRelation*$el[0].scrollHeight-$el.height()/2)}},markupSet:[{name:$tr.t("markdown-editor.heading-1"),key:"1",placeHolder:$tr.t("markdown-editor.placeholder"),closeWith:function(markItUp){return markdownTitle(markItUp,"=")}},{name:$tr.t("markdown-editor.heading-2"),key:"2",placeHolder:$tr.t("markdown-editor.placeholder"),closeWith:function(markItUp){return markdownTitle(markItUp,"-")}},{name:$tr.t("markdown-editor.heading-3"),key:"3",openWith:"### ",placeHolder:$tr.t("markdown-editor.placeholder")},{separator:"---------------"},{name:$tr.t("markdown-editor.bold"),key:"B",openWith:"**",closeWith:"**"},{name:$tr.t("markdown-editor.italic"),key:"I",openWith:"_",closeWith:"_"},{name:$tr.t("markdown-editor.strike"),key:"S",openWith:"~~",closeWith:"~~"},{separator:"---------------"},{name:$tr.t("markdown-editor.bulleted-list"),openWith:"- "},{name:$tr.t("markdown-editor.numeric-list"),openWith:function(markItUp){return markItUp.line+". "}},{separator:"---------------"},{name:$tr.t("markdown-editor.picture"),key:"P",replaceWith:'![[![Alternative text]!]]([![Url:!:http://]!] "[![Title]!]")'},{name:$tr.t("markdown-editor.link"),key:"L",openWith:"[",closeWith:']([![Url:!:http://]!] "[![Title]!]")',placeHolder:$tr.t("markdown-editor.link-placeholder")},{separator:"---------------"},{name:$tr.t("markdown-editor.quotes"),openWith:"> "},{name:$tr.t("markdown-editor.code-block"),openWith:"```\n",closeWith:"\n```"},{separator:"---------------"},{name:$tr.t("markdown-editor.preview"),call:preview,className:"preview-icon"}],afterInsert:function(event){var target;return target=angular.element(event.textarea),$model.$setViewValue(target.val())}},markdownTitle=function(markItUp,char){var heading,i,n,_i,_ref;for(heading="",n=$.trim(markItUp.selection||markItUp.placeHolder).length,i=_i=0,_ref=n-1;_ref>=0?_ref>=_i:_i>=_ref;i=_ref>=0?++_i:--_i)heading+=char;return"\n"+heading+"\n"},element.markItUp(markdownSettings),element.on("keypress",function(){return $scope.$apply()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel"}},module.directive("tgMarkitup",["$rootScope","$tgResources","$tgI18n","$selectedText",tgMarkitupDirective])}.call(this),function(){var BacklogFiltersDirective,bindOnce,debounceLeading,groupBy,mixOf,module,scopeDefer,taiga,toggleText;taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,debounceLeading=this.taiga.debounceLeading,module=angular.module("taigaBacklog"),BacklogFiltersDirective=function(){var link,template,templateSelected;return template=_.template('<% _.each(filters, function(f) { %>\n <% if (f.selected) { %>\n \n style="border-left: 3px solid <%- f.color %>;"<% } %>>\n <%- f.name %>\n \n <%- f.count %>\n \n <% } else { %>\n \n style="border-left: 3px solid <%- f.color %>;"<% } %>>\n <%- f.name %>\n \n <%- f.count %>\n \n <% } %>\n<% }) %>'),templateSelected=_.template('<% _.each(filters, function(f) { %>\n\n style="border-left: 3px solid <%- f.color %>;"<% } %>>\n <%- f.name %>\n \n\n<% }) %>'),link=function($scope,$el){var $ctrl,initializeSelectedFilters,renderFilters,renderSelectedFilters,selectQFilter,selectedFilters,showCategories,showFilters,toggleFilterSelection; +return $ctrl=$el.closest(".wrapper").controller(),selectedFilters=[],showFilters=function(title,type){return $el.find(".filters-cats").hide(),$el.find(".filter-list").removeClass("hidden"),$el.find("h2.breadcrumb").removeClass("hidden"),$el.find("h2 a.subfilter span.title").html(title),$el.find("h2 a.subfilter span.title").prop("data-type",type)},showCategories=function(){return $el.find(".filters-cats").show(),$el.find(".filter-list").addClass("hidden"),$el.find("h2.breadcrumb").addClass("hidden")},initializeSelectedFilters=function(filters){var name,val,values,_i,_len;showCategories(),selectedFilters=[];for(name in filters)for(values=filters[name],_i=0,_len=values.length;_len>_i;_i++)val=values[_i],val.selected&&selectedFilters.push(val);return renderSelectedFilters()},renderSelectedFilters=function(){var html;return html=templateSelected({filters:selectedFilters}),$el.find(".filters-applied").html(html)},renderFilters=function(filters){var html;return html=template({filters:filters}),$el.find(".filter-list").html(html)},toggleFilterSelection=function(type,id){var currentFiltersType,filter,filters;return filters=$scope.filters[type],filter=_.find(filters,{id:taiga.toString(id)}),filter.selected=!filter.selected,filter.selected?(selectedFilters.push(filter),$scope.$apply(function(){return $ctrl.selectFilter(type,id),$ctrl.filterVisibleUserstories()})):(selectedFilters=_.reject(selectedFilters,filter),$scope.$apply(function(){return $ctrl.unselectFilter(type,id),$ctrl.filterVisibleUserstories()})),renderSelectedFilters(selectedFilters),currentFiltersType=$el.find("h2 a.subfilter span.title").prop("data-type"),type===currentFiltersType&&renderFilters(_.reject(filters,"selected")),$ctrl.loadUserstories()},selectQFilter=debounceLeading(100,function(value){return void 0!==value?(0===value.length?$ctrl.replaceFilter("q",null):$ctrl.replaceFilter("q",value),$ctrl.loadUserstories()):void 0}),$scope.$watch("filtersQ",selectQFilter),$scope.$on("filters:loaded",function(ctx,filters){return initializeSelectedFilters(filters)}),$el.on("click",".filters-cats > ul > li > a",function(event){var tags,target;return event.preventDefault(),target=angular.element(event.currentTarget),tags=$scope.filters[target.data("type")],renderFilters(_.reject(tags,"selected")),showFilters(target.attr("title"),target.data("type"))}),$el.on("click",".filters-inner > .filters-step-cat > .breadcrumb > .back",function(event){return event.preventDefault(),showCategories()}),$el.on("click",".filters-applied a",function(event){var id,target,type;return event.preventDefault(),target=angular.element(event.currentTarget),id=target.data("id"),type=target.data("type"),toggleFilterSelection(type,id)}),$el.on("click",".filter-list .single-filter",function(event){var id,target,type;return event.preventDefault(),target=angular.element(event.currentTarget),target.hasClass("active")?target.removeClass("active"):target.addClass("active"),id=target.data("id"),type=target.data("type"),toggleFilterSelection(type,id)})},{link:link}},module.directive("tgBacklogFilters",["$log","$tgLocation",BacklogFiltersDirective])}.call(this),function(){var CreateEditSprint,bindOnce,debounce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaBacklog"),CreateEditSprint=function($repo,$confirm,$rs,$rootscope,lightboxService,$loading){var link;return link=function($scope,$el){var createSprint,hasErrors,remove,submit,submitButton;return hasErrors=!1,createSprint=!0,$scope.sprint={project:null,name:null,estimated_start:null,estimated_finish:null},submit=debounce(2e3,function(){return function(event){var broadcastEvent,form,newSprint,promise,target;return event.preventDefault(),target=angular.element(event.currentTarget),form=$el.find("form").checksley(),form.validate()?(hasErrors=!1,newSprint=angular.copy($scope.sprint),broadcastEvent=null,createSprint?(newSprint.estimated_start=moment(newSprint.estimated_start).format("YYYY-MM-DD"),newSprint.estimated_finish=moment(newSprint.estimated_finish).format("YYYY-MM-DD"),promise=$repo.create("milestones",newSprint),broadcastEvent="sprintform:create:success"):(newSprint.setAttr("estimated_start",moment(newSprint.estimated_start).format("YYYY-MM-DD")),newSprint.setAttr("estimated_finish",moment(newSprint.estimated_finish).format("YYYY-MM-DD")),promise=$repo.save(newSprint),broadcastEvent="sprintform:edit:success"),$loading.start(submitButton),promise.then(function(data){return $loading.finish(submitButton),createSprint&&($scope.sprintsCounter+=1),$rootscope.$broadcast(broadcastEvent,data),lightboxService.close($el)}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("light-error",data._error_message):data.__all__?$confirm.notify("light-error",data.__all__[0]):void 0})):(hasErrors=!0,void $el.find(".last-sprint-name").addClass("disappear"))}}(this)),remove=function(){var message,title;return title="Delete sprint",message=$scope.sprint.name,$confirm.askOnDelete(title,message).then(function(){return function(finish){var onError,onSuccess;return onSuccess=function(){return finish(),$scope.milestonesCounter-=1,lightboxService.close($el),$rootscope.$broadcast("sprintform:remove:success")},onError=function(){return finish(!1),$confirm.notify("error")},$repo.remove($scope.sprint).then(onSuccess,onError)}}(this))},$scope.$on("sprintform:create",function(event,projectId){var estimatedFinish,estimatedStart,lastSprint,lastSprintNameDom;return createSprint=!0,$scope.sprint.project=projectId,$scope.sprint.name=null,$scope.sprint.slug=null,lastSprint=$scope.sprints[0],estimatedStart=moment(),$scope.sprint.estimated_start?estimatedStart=moment($scope.sprint.estimated_start):null!=lastSprint&&(estimatedStart=moment(lastSprint.estimated_finish)),$scope.sprint.estimated_start=estimatedStart.format("DD MMM YYYY"),estimatedFinish=moment().add(2,"weeks"),$scope.sprint.estimated_finish?estimatedFinish=moment($scope.sprint.estimated_finish):null!=lastSprint&&(estimatedFinish=moment(lastSprint.estimated_finish).add(2,"weeks")),$scope.sprint.estimated_finish=estimatedFinish.format("DD MMM YYYY"),lastSprintNameDom=$el.find(".last-sprint-name"),null!=(null!=lastSprint?lastSprint.name:void 0)&&lastSprintNameDom.html(" last sprint is "+lastSprint.name+" ;-) "),$el.find(".delete-sprint").addClass("hidden"),$el.find(".title").text("New sprint"),$el.find(".button-green").text("Create"),lightboxService.open($el),$el.find(".sprint-name").focus()}),$scope.$on("sprintform:edit",function(ctx,sprint){return createSprint=!1,$scope.$apply(function(){return $scope.sprint=sprint,$scope.sprint.estimated_start=moment($scope.sprint.estimated_start).format("DD MMM YYYY"),$scope.sprint.estimated_finish=moment($scope.sprint.estimated_finish).format("DD MMM YYYY")}),$el.find(".delete-sprint").removeClass("hidden"),$el.find(".title").text("Edit sprint"),$el.find(".button-green").text("Save"),lightboxService.open($el),$el.find(".sprint-name").focus().select(),$el.find(".last-sprint-name").addClass("disappear")}),$el.on("keyup",".sprint-name",function(){return $el.find(".sprint-name").val().length>0||hasErrors?$el.find(".last-sprint-name").addClass("disappear"):$el.find(".last-sprint-name").removeClass("disappear")}),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$el.on("click",".delete-sprint .icon-delete",function(event){return event.preventDefault(),remove()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbCreateEditSprint",["$tgRepo","$tgConfirm","$tgResources","$rootScope","lightboxService","$tgLoading",CreateEditSprint])}.call(this),function(){var BacklogController,BacklogDirective,TgBacklogProgressBarDirective,UsPointsDirective,UsRolePointsSelectorDirective,bindMethods,bindOnce,groupBy,mixOf,module,scopeDefer,taiga,tgBacklogGraphDirective,timeout,toggleText,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,timeout=this.taiga.timeout,bindMethods=this.taiga.bindMethods,module=angular.module("taigaBacklog"),BacklogController=function(_super){function BacklogController(scope,rootscope,repo,confirm,rs,params,q,location,appTitle,navUrls,events,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.appTitle=appTitle,this.navUrls=navUrls,this.events=events,this.analytics=analytics,bindMethods(this),this.scope.sectionName="Backlog",this.showTags=!1,this.activeFilters=!1,this.excludeClosedSprints=!0,this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Backlog - "+_this.scope.project.name),_this.rs.userstories.getShowTags(_this.scope.projectId)?(_this.showTags=!0,_this.scope.$broadcast("showTags",_this.showTags)):void 0}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(BacklogController,_super),BacklogController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$appTitle","$tgNavUrls","$tgEvents","$tgAnalytics","tgLoader"],BacklogController.prototype.initializeEventHandlers=function(){return this.scope.$on("usform:bulk:success",function(_this){return function(){return _this.loadUserstories(),_this.loadProjectStats(),_this.analytics.trackEvent("userstory","create","bulk create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:create:success",function(_this){return function(){return _this.loadSprints(),_this.loadProjectStats(),_this.analytics.trackEvent("sprint","create","create sprint on backlog",1)}}(this)),this.scope.$on("usform:new:success",function(_this){return function(){return _this.loadUserstories(),_this.loadProjectStats(),_this.analytics.trackEvent("userstory","create","create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:edit:success",function(_this){return function(){return _this.loadProjectStats()}}(this)),this.scope.$on("sprintform:remove:success",function(_this){return function(){return _this.loadSprints(),_this.loadProjectStats(),_this.loadUserstories()}}(this)),this.scope.$on("usform:edit:success",function(_this){return function(){return _this.loadUserstories()}}(this)),this.scope.$on("sprint:us:move",this.moveUs),this.scope.$on("sprint:us:moved",this.loadSprints),this.scope.$on("sprint:us:moved",this.loadProjectStats),this.scope.$on("backlog:toggle-closed-sprints-visualization",this.toggleClosedSprintsVisualization)},BacklogController.prototype.initializeSubscription=function(){var routingKey1,routingKey2;return routingKey1="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,routingKey1,function(_this){return function(){return _this.loadUserstories(),_this.loadSprints()}}(this)),routingKey2="changes.project."+this.scope.projectId+".milestones",this.events.subscribe(this.scope,routingKey2,function(_this){return function(){return _this.loadSprints()}}(this))},BacklogController.prototype.toggleShowTags=function(){return this.scope.$apply(function(_this){return function(){return _this.showTags=!_this.showTags,_this.rs.userstories.storeShowTags(_this.scope.projectId,_this.showTags)}}(this))},BacklogController.prototype.toggleActiveFilters=function(){return this.activeFilters=!this.activeFilters},BacklogController.prototype.loadProjectStats=function(){return this.rs.projects.stats(this.scope.projectId).then(function(_this){return function(stats){return _this.scope.stats=stats,_this.scope.stats.completedPercentage=stats.total_points?Math.round(100*stats.closed_points/stats.total_points):0,stats}}(this))},BacklogController.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(_this){return function(tags_colors){return _this.scope.project.tags_colors=tags_colors}}(this))},BacklogController.prototype.loadSprints=function(){var params;return params={},this.excludeClosedSprints&&(params.closed=!1),this.rs.sprints.list(this.scope.projectId,params).then(function(_this){return function(sprints){var sprint,_i,_len;for(_i=0,_len=sprints.length;_len>_i;_i++)sprint=sprints[_i],sprint.user_stories=_.sortBy(sprint.user_stories,"sprint_order");return _this.scope.sprints=sprints,_this.scope.openSprints=_.filter(sprints,function(sprint){return!sprint.closed}),_this.scope.closedSprints=_.filter(sprints,function(sprint){return sprint.closed}),_this.scope.sprintsCounter=sprints.length,_this.scope.sprintsById=groupBy(sprints,function(x){return x.id}),_this.rootscope.$broadcast("sprints:loaded",sprints),sprints}}(this))},BacklogController.prototype.resetFilters=function(){var selectedStatuses,selectedTags;return selectedTags=_.filter(this.scope.filters.tags,"selected"),selectedStatuses=_.filter(this.scope.filters.statuses,"selected"),this.scope.filtersQ="",_.each([selectedTags,selectedStatuses],function(_this){return function(filterGrp){return _.each(filterGrp,function(item){var filter,filters;return filters=_this.scope.filters[item.type],filter=_.find(filters,{id:taiga.toString(item.id)}),filter.selected=!1,_this.unselectFilter(item.type,item.id)})}}(this)),this.loadUserstories()},BacklogController.prototype.loadUserstories=function(){var promise;return this.scope.httpParams=this.getUrlFilters(),this.rs.userstories.storeQueryParams(this.scope.projectId,this.scope.httpParams),promise=this.q.all([this.refreshTagsColors(),this.rs.userstories.listUnassigned(this.scope.projectId,this.scope.httpParams)]),promise.then(function(_this){return function(data){var userstories;return userstories=data[1],_this.scope.userstories=_.sortBy(userstories,"backlog_order"),_this.generateFilters(),_this.filterVisibleUserstories(),_this.rootscope.$broadcast("filters:loaded",_this.scope.filters),scopeDefer(_this.scope,function(){return _this.scope.$broadcast("userstories:loaded")}),userstories}}(this))},BacklogController.prototype.loadBacklog=function(){return this.q.all([this.loadProjectStats(),this.loadSprints(),this.loadUserstories()])},BacklogController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.points=_.sortBy(project.points,"order"),_this.scope.pointsById=groupBy(project.points,function(x){return x.id}),_this.scope.usStatusById=groupBy(project.us_statuses,function(x){return x.id}),_this.scope.usStatusList=_.sortBy(project.us_statuses,"id"),project}}(this))},BacklogController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.initializeSubscription()}}(this)),promise.then(function(_this){return function(){return _this.loadBacklog()}}(this))},BacklogController.prototype.toggleClosedSprintsVisualization=function(){return this.excludeClosedSprints=!this.excludeClosedSprints,this.loadSprints()},BacklogController.prototype.filterVisibleUserstories=function(){var selectedStatuses,selectedTags;return this.scope.visibleUserstories=[],selectedTags=_.filter(this.scope.filters.tags,"selected"),selectedTags=_.map(selectedTags,"name"),this.scope.visibleUserstories=0===selectedTags.length?_.clone(this.scope.userstories,!1):_.reject(this.scope.userstories,function(){return function(us){return 0===_.intersection(selectedTags,us.tags).length?!0:!1}}(this)),selectedStatuses=_.filter(this.scope.filters.statuses,"selected"),selectedStatuses=_.map(selectedStatuses,"id"),selectedStatuses.length>0&&(this.scope.visibleUserstories=_.reject(this.scope.visibleUserstories,function(){return function(us){var res;return res=_.find(selectedStatuses,function(x){return x===taiga.toString(us.status)}),!res}}(this))),this.rs.userstories.storeQueryParams(this.scope.projectId,{status:selectedStatuses,tags:selectedTags,project:this.scope.projectId,milestone:null})},BacklogController.prototype.prepareBulkUpdateData=function(uses,field){return null==field&&(field="backlog_order"),_.map(uses,function(x){return{us_id:x.id,order:x[field]}})},BacklogController.prototype.resortUserStories=function(uses,field){var index,item,items,_i,_len;for(null==field&&(field="backlog_order"),items=[],index=_i=0,_len=uses.length;_len>_i;index=++_i)item=uses[index],item[field]=index,item.isModified()&&items.push(item);return items},BacklogController.prototype.moveUs=function(ctx,usList,newUsIndex,newSprintId){var data,items,newSprint,oldSprintId,project,promise,promises,us,userstories,_i,_j,_k,_len,_len1,_len2;if(oldSprintId=usList[0].milestone,project=usList[0].project,newSprintId===oldSprintId)return items=null,userstories=null,userstories=null===newSprintId?this.scope.userstories:this.scope.sprintsById[newSprintId].user_stories,this.scope.$apply(function(){var args,key,r,us,_i,_len;for(key=_i=0,_len=usList.length;_len>_i;key=++_i)us=usList[key],r=userstories.indexOf(us),userstories.splice(r,1);return args=[newUsIndex,0].concat(usList),Array.prototype.splice.apply(userstories,args)}),null===newSprintId?(items=this.resortUserStories(userstories,"backlog_order"),data=this.prepareBulkUpdateData(items,"backlog_order"),this.rs.userstories.bulkUpdateBacklogOrder(project,data).then(function(_this){return function(){var us,_i,_len,_results;for(_results=[],_i=0,_len=usList.length;_len>_i;_i++)us=usList[_i],_results.push(_this.rootscope.$broadcast("sprint:us:moved",us,oldSprintId,newSprintId));return _results}}(this))):(items=this.resortUserStories(userstories,"sprint_order"),data=this.prepareBulkUpdateData(items,"sprint_order"),this.rs.userstories.bulkUpdateSprintOrder(project,data).then(function(_this){return function(){var us,_i,_len,_results;for(_results=[],_i=0,_len=usList.length;_len>_i;_i++)us=usList[_i],_results.push(_this.rootscope.$broadcast("sprint:us:moved",us,oldSprintId,newSprintId));return _results}}(this))),promise;if(null===newSprintId){for(_i=0,_len=usList.length;_len>_i;_i++)us=usList[_i],us.milestone=null;return this.scope.$apply(function(_this){return function(){var args,key,r,sprint,_j,_len1,_results;for(args=[newUsIndex,0].concat(usList),Array.prototype.splice.apply(_this.scope.userstories,args),Array.prototype.splice.apply(_this.scope.visibleUserstories,args),_this.filterVisibleUserstories(),sprint=_this.scope.sprintsById[oldSprintId],_results=[],key=_j=0,_len1=usList.length;_len1>_j;key=++_j)us=usList[key],r=sprint.user_stories.indexOf(us),_results.push(sprint.user_stories.splice(r,1));return _results}}(this)),promise=this.repo.save(us),promise=promise.then(function(_this){return function(){return items=_this.resortUserStories(_this.scope.userstories,"backlog_order"),data=_this.prepareBulkUpdateData(items,"backlog_order"),_this.rs.userstories.bulkUpdateBacklogOrder(us.project,data).then(function(){return _this.rootscope.$broadcast("sprint:us:moved",us,oldSprintId,newSprintId)})}}(this)),promise.then(null,function(){return console.log("FAIL")}),promise}if(newSprint=this.scope.sprintsById[newSprintId],null===oldSprintId){for(_j=0,_len1=usList.length;_len1>_j;_j++)us=usList[_j],us.milestone=newSprintId;this.scope.$apply(function(_this){return function(){var args,key,r,_k,_len2,_results;for(args=[newUsIndex,0].concat(usList),Array.prototype.splice.apply(newSprint.user_stories,args),_results=[],key=_k=0,_len2=usList.length;_len2>_k;key=++_k)us=usList[key],r=_this.scope.visibleUserstories.indexOf(us),_this.scope.visibleUserstories.splice(r,1),r=_this.scope.userstories.indexOf(us),_results.push(_this.scope.userstories.splice(r,1));return _results}}(this))}else{for(_k=0,_len2=usList.length;_len2>_k;_k++)us=usList[_k],us.milestone=newSprintId;this.scope.$apply(function(_this){return function(){var args,oldSprint,r,_l,_len3,_results;for(args=[newUsIndex,0].concat(usList),Array.prototype.splice.apply(newSprint.user_stories,args),_results=[],_l=0,_len3=usList.length;_len3>_l;_l++)us=usList[_l],oldSprint=_this.scope.sprintsById[oldSprintId],r=oldSprint.user_stories.indexOf(us),_results.push(oldSprint.user_stories.splice(r,1));return _results}}(this))}return promises=_.map(usList,function(_this){return function(us){return _this.repo.save(us)}}(this)),promise=this.q.all(promises).then(function(_this){return function(){return items=_this.resortUserStories(newSprint.user_stories,"sprint_order"),data=_this.prepareBulkUpdateData(items,"sprint_order"),_this.rs.userstories.bulkUpdateSprintOrder(project,data).then(function(){return _this.rootscope.$broadcast("sprint:us:moved",us,oldSprintId,newSprintId)}),_this.rs.userstories.bulkUpdateBacklogOrder(project,data).then(function(){var _l,_len3,_results;for(_results=[],_l=0,_len3=usList.length;_len3>_l;_l++)us=usList[_l],_results.push(_this.rootscope.$broadcast("sprint:us:moved",us,oldSprintId,newSprintId));return _results})}}(this)),promise.then(null,function(){return console.log("FAIL")}),promise},BacklogController.prototype.getUrlFilters=function(){return _.pick(this.location.search(),"statuses","tags","q")},BacklogController.prototype.generateFilters=function(){var isSelected,name,plainStatuses,plainTags,searchdata,urlfilters,val,value,_i,_len,_ref;urlfilters=this.getUrlFilters(),urlfilters.q&&(this.scope.filtersQ=urlfilters.q),searchdata={};for(name in urlfilters)for(value=urlfilters[name],null==searchdata[name]&&(searchdata[name]={}),_ref=taiga.toString(value).split(","),_i=0,_len=_ref.length;_len>_i;_i++)val=_ref[_i],searchdata[name][val]=!0;return isSelected=function(type,id){return null!=searchdata[type]&&searchdata[type][id]?!0:!1},this.scope.filters={},plainTags=_.flatten(_.filter(_.map(this.scope.userstories,"tags"))),plainTags.sort(),this.scope.filters.tags=_.map(_.countBy(plainTags),function(_this){return function(v,k){var obj;return obj={id:k,type:"tags",name:k,color:_this.scope.project.tags_colors[k],count:v},isSelected("tags",obj.id)&&(obj.selected=!0),obj}}(this)),plainStatuses=_.map(this.scope.userstories,"status"),plainStatuses=_.filter(plainStatuses,function(){return function(status){return status?status:void 0}}(this)),this.scope.filters.statuses=_.map(_.countBy(plainStatuses),function(_this){return function(v,k){var obj;return obj={id:k,type:"statuses",name:_this.scope.usStatusById[k].name,color:_this.scope.usStatusById[k].color,count:v},isSelected("statuses",obj.id)&&(obj.selected=!0),obj}}(this)),this.scope.filters},BacklogController.prototype.editUserStory=function(us){return this.rootscope.$broadcast("usform:edit",us)},BacklogController.prototype.deleteUserStory=function(us){var message,title;return title="Delete User Story",message=us.subject,this.confirm.askOnDelete(title,message).then(function(_this){return function(finish){var promise;return _this.scope.userstories=_.without(_this.scope.userstories,us),_this.filterVisibleUserstories(),promise=_this.repo.remove(us),promise.then(function(){return finish(),_this.loadBacklog()}),promise.then(null,function(){return finish(!1),_this.confirm.notify("error")})}}(this))},BacklogController.prototype.addNewUs=function(type){switch(type){case"standard":return this.rootscope.$broadcast("usform:new",this.scope.projectId,this.scope.project.default_us_status,this.scope.usStatusList);case"bulk":return this.rootscope.$broadcast("usform:bulk",this.scope.projectId,this.scope.project.default_us_status)}},BacklogController.prototype.addNewSprint=function(){return this.rootscope.$broadcast("sprintform:create",this.scope.projectId)},BacklogController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("BacklogController",BacklogController),BacklogDirective=function($repo,$rootscope){var doomLineTemplate,link,linkDoomLine,linkFilters,linkToolbar,showHideFilter,showHideTags;return doomLineTemplate=_.template('
    Project Scope [Doomline]
    '),linkDoomLine=function($scope,$el){var addDoomLineDom,getUsItems,reloadDoomLine,removeDoomlineDom;return reloadDoomLine=function(){var current_sum,element,elements,scope,stats,total_points,_i,_len,_results;if(null!=$scope.stats){for(removeDoomlineDom(),elements=getUsItems(),stats=$scope.stats,total_points=stats.total_points,current_sum=stats.assigned_points,_results=[],_i=0,_len=elements.length;_len>_i;_i++)if(element=elements[_i],scope=element.scope(),null!=scope.us){if(current_sum+=scope.us.total_points,current_sum>total_points){addDoomLineDom(element);break}_results.push(void 0)}return _results}},removeDoomlineDom=function(){return $el.find(".doom-line").remove()},addDoomLineDom=function(element){return null!=element?element.before(doomLineTemplate({})):void 0},getUsItems=function(){var rowElements;return rowElements=$el.find(".backlog-table-body .us-item-row"),_.map(rowElements,function(x){return angular.element(x)})},$scope.$on("userstories:loaded",reloadDoomLine),$scope.$watch("stats",reloadDoomLine)},linkToolbar=function($scope,$el,$attrs,$ctrl){var moveToCurrentSprint;return moveToCurrentSprint=function(selectedUss){var extraPoints,totalExtraPoints,ussCurrent;return ussCurrent=_($scope.userstories),$scope.userstories=ussCurrent.without.apply(ussCurrent,selectedUss).value(),extraPoints=_.map(selectedUss,function(v){return v.total_points}),totalExtraPoints=_.reduce(extraPoints,function(acc,num){return acc+num}),$scope.sprints[0].user_stories=_.union($scope.sprints[0].user_stories,selectedUss),$scope.sprints[0].total_points+=totalExtraPoints,$ctrl.filterVisibleUserstories(),$repo.saveAll(selectedUss).then(function(){return $ctrl.loadSprints(),$ctrl.loadProjectStats()})},$el.on("change",".backlog-table-body .user-stories input:checkbox",function(event){var moveToCurrentSprintDom,selectedUsDom,target;return target=angular.element(event.currentTarget),moveToCurrentSprintDom=$el.find("#move-to-current-sprint"),selectedUsDom=$el.find(".backlog-table-body .user-stories input:checkbox:checked"),selectedUsDom.length>0&&$scope.sprints.length>0?moveToCurrentSprintDom.show():moveToCurrentSprintDom.hide(),target.closest(".us-item-row").toggleClass("ui-multisortable-multiple")}),$el.on("click","#move-to-current-sprint",function(){return function(){var ussDom,ussToMove;return ussDom=$el.find(".backlog-table-body .user-stories input:checkbox:checked"),ussToMove=_.map(ussDom,function(item){var itemScope;return itemScope=angular.element(item).scope(),itemScope.us.milestone=$scope.sprints[0].id,itemScope.us}),$scope.$apply(_.partial(moveToCurrentSprint,ussToMove))}}(this)),$el.on("click","#show-tags",function(event){return event.preventDefault(),$ctrl.toggleShowTags(),showHideTags($ctrl)})},showHideTags=function($ctrl){var elm;return elm=angular.element("#show-tags"),$ctrl.showTags?(elm.addClass("active"),elm.find(".text").text("Hide Tags")):(elm.removeClass("active"),elm.find(".text").text("Show Tags"))},showHideFilter=function($scope,$el,$ctrl){var sidebar,target;return sidebar=$el.find("sidebar.filters-bar"),sidebar.one("transitionend",function(){return timeout(150,function(){return $rootscope.$broadcast("resize"),$(".burndown").css("visibility","visible")})}),target=angular.element("#show-filters-button"),$(".burndown").css("visibility","hidden"),sidebar.toggleClass("active"),target.toggleClass("active"),toggleText(target.find(".text"),["Remove Filters","Show Filters"]),sidebar.hasClass("active")||$ctrl.resetFilters(),$ctrl.toggleActiveFilters()},linkFilters=function($scope,$el,$attrs,$ctrl){return $scope.filtersSearch={},$el.on("click","#show-filters-button",function(event){return event.preventDefault(),$scope.$apply(function(){return showHideFilter($scope,$el,$ctrl)})})},link=function($scope,$el,$attrs){var $ctrl,filters;return $ctrl=$el.controller(),linkToolbar($scope,$el,$attrs,$ctrl),linkFilters($scope,$el,$attrs,$ctrl),linkDoomLine($scope,$el,$attrs,$ctrl),$el.find(".backlog-table-body").disableSelection(),filters=$ctrl.getUrlFilters(),(filters.statuses||filters.tags||filters.q)&&showHideFilter($scope,$el,$ctrl),$scope.$on("showTags",function(){return showHideTags($ctrl)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgBacklog",["$tgRepo","$rootScope",BacklogDirective]),UsRolePointsSelectorDirective=function($rootscope){var link,selectionTemplate;return selectionTemplate=_.template(''),link=function($scope,$el){return bindOnce($scope,"project",function(project){var numberOfRoles,roles;return roles=_.filter(project.roles,"computable"),numberOfRoles=_.size(roles),numberOfRoles>1?$el.append(selectionTemplate({roles:roles})):($el.find(".icon-arrow-bottom").remove(),$el.find(".header-points").addClass("not-clickable"))}),$scope.$on("uspoints:select",function(ctx,roleId,roleName){return $el.find(".popover").popover().close(),$el.find(".header-points").html(""+roleName+"/Total")}),$scope.$on("uspoints:clear-selection",function(){return $el.find(".popover").popover().close(),$el.find(".header-points").text("Points")}),$el.on("click",function(event){var target;return target=angular.element(event.target),(target.is("span")||target.is("div"))&&event.stopPropagation(),$el.find(".popover").popover().open()}),$el.on("click",".clear-selection",function(event){return event.preventDefault(),event.stopPropagation(),$rootscope.$broadcast("uspoints:clear-selection")}),$el.on("click",".role",function(event){var rolScope,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),rolScope=target.scope(),$rootscope.$broadcast("uspoints:select",target.data("role-id"),target.text())}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgUsRolePointsSelector",["$rootScope",UsRolePointsSelectorDirective]),UsPointsDirective=function($repo){var link,pointsTemplate,rolesTemplate;return rolesTemplate=_.template(''),pointsTemplate=_.template(''),link=function($scope,$el,$attrs){var $ctrl,calculateTotalPoints,computableRoles,numberOfRoles,renderPoints,renderPointsSelector,renderRolesSelector,roles,selectedRoleId,updatePointsRoles,updatingSelectedRoleId,us;return $ctrl=$el.controller(),us=$scope.$eval($attrs.tgBacklogUsPoints),updatingSelectedRoleId=null,selectedRoleId=null,numberOfRoles=_.size(us.points),1===numberOfRoles&&(selectedRoleId=_.keys(us.points)[0]),roles=[],updatePointsRoles=function(){return roles=_.map(computableRoles,function(role){var pointId,pointObj;return pointId=us.points[role.id],pointObj=$scope.pointsById[pointId],role=_.clone(role,!0),role.points=null!=pointObj.value?pointObj.value:"?",role +})},computableRoles=_.filter($scope.project.roles,"computable"),updatePointsRoles(),0===roles.length&&($el.find(".icon-arrow-bottom").remove(),$el.find("a.us-points").addClass("not-clickable")),renderPointsSelector=function(us,roleId){var html,points;return points=_.map($scope.project.points,function(point){return point=_.clone(point,!0),point.selected=us.points[roleId]===point.id?!1:!0,point}),html=pointsTemplate({points:points}),$el.find(".popover").popover().close(),$el.find(".pop-points-open").remove(),$el.append(html),null==$el.find(".pop-role:visible").css("left")&&$el.find(".pop-points-open").css("left","110px"),$el.find(".pop-points-open").popover().open()},renderRolesSelector=function(){var html;return updatePointsRoles(),html=rolesTemplate({roles:roles}),$el.append(html),$el.find(".pop-role").popover().open(function(){return $(this).remove()})},renderPoints=function(us,roleId){var dom,pointId,pointObj,totalPoints;return dom=$el.find("a > span.points-value"),null===roleId||1===numberOfRoles?(totalPoints=null!=us.total_points?us.total_points:"?",dom.text(totalPoints),dom.parent().prop("title",totalPoints)):(pointId=us.points[roleId],pointObj=$scope.pointsById[pointId],dom.html(""+pointObj.name+" / "+us.total_points+""),dom.parent().prop("title",""+pointObj.name+" / "+us.total_points))},calculateTotalPoints=function(){var values;return values=_.map(us.points,function(v){return $scope.pointsById[v].value}),values=_.filter(values,function(num){return null!=num}),0===values.length?"?":_.reduce(values,function(acc,num){return acc+num})},$scope.$watch($attrs.tgBacklogUsPoints,function(us){return us?renderPoints(us,selectedRoleId):void 0}),$scope.$on("uspoints:select",function(ctx,roleId){return us=$scope.$eval($attrs.tgBacklogUsPoints),renderPoints(us,roleId),selectedRoleId=roleId}),$scope.$on("uspoints:clear-selection",function(){return us=$scope.$eval($attrs.tgBacklogUsPoints),renderPoints(us,null),selectedRoleId=null}),roles.length>0&&($el.on("click","a.us-points span",function(event){return event.preventDefault(),event.stopPropagation(),us=$scope.$eval($attrs.tgBacklogUsPoints),updatingSelectedRoleId=selectedRoleId,null!=selectedRoleId?renderPointsSelector(us,selectedRoleId):renderRolesSelector(us)}),$el.on("click",".role",function(event){var popRolesDom,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),us=$scope.$eval($attrs.tgBacklogUsPoints),updatingSelectedRoleId=target.data("role-id"),popRolesDom=$el.find(".pop-role"),popRolesDom.find("a").removeClass("active"),popRolesDom.find("a[data-role-id='"+updatingSelectedRoleId+"']").addClass("active"),renderPointsSelector(us,updatingSelectedRoleId)}),$el.on("click",".point",function(event){var points,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),$el.find(".pop-points-open").hide(),$el.find(".pop-role").hide(),us=$scope.$eval($attrs.tgBacklogUsPoints),points=_.clone(us.points,!0),points[updatingSelectedRoleId]=target.data("point-id"),$scope.$apply(function(){return us.points=points,us.total_points=calculateTotalPoints(us),renderPoints(us,selectedRoleId),$repo.save(us).then(function(){return $repo.refresh(us).then(function(){return $ctrl.loadProjectStats()})})})})),bindOnce($scope,"project",function(project){return-1===project.my_permissions.indexOf("modify_us")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgBacklogUsPoints",["$tgRepo",UsPointsDirective]),tgBacklogGraphDirective=function(){var link,redrawChart;return redrawChart=function(element,dataToDraw){var client_increment_line,colors,data,evolution_line,milestonesRange,optimal_line,options,team_increment_line,width,zero_line,_results;return width=element.width(),element.height(width/6),milestonesRange=function(){_results=[];for(var _i=0,_ref=dataToDraw.milestones.length-1;_ref>=0?_ref>=_i:_i>=_ref;_ref>=0?_i++:_i--)_results.push(_i);return _results}.apply(this),data=[],zero_line=_.map(dataToDraw.milestones,function(){return 0}),data.push({data:_.zip(milestonesRange,zero_line),lines:{fillColor:"rgba(0,0,0,0)"},points:{show:!1}}),optimal_line=_.map(dataToDraw.milestones,function(ml){return ml.optimal}),data.push({data:_.zip(milestonesRange,optimal_line),lines:{fillColor:"rgba(120,120,120,0.2)"}}),evolution_line=_.filter(_.map(dataToDraw.milestones,function(ml){return ml.evolution}),function(evolution){return null!=evolution}),data.push({data:_.zip(milestonesRange,evolution_line),lines:{fillColor:"rgba(102,153,51,0.3)"}}),team_increment_line=_.map(dataToDraw.milestones,function(ml){return-ml["team-increment"]}),data.push({data:_.zip(milestonesRange,team_increment_line),lines:{fillColor:"rgba(153,51,51,0.3)"}}),client_increment_line=_.map(dataToDraw.milestones,function(ml){return-ml["team-increment"]-ml["client-increment"]}),data.push({data:_.zip(milestonesRange,client_increment_line),lines:{fillColor:"rgba(255,51,51,0.3)"}}),colors=["rgba(0,0,0,1)","rgba(120,120,120,0.2)","rgba(102,153,51,1)","rgba(153,51,51,1)","rgba(255,51,51,1)"],options={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc"},xaxis:{ticks:dataToDraw.milestones.length,axisLabel:"Sprints",axisLabelUseCanvas:!0,axisLabelFontSizePixels:14,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:15,tickFormatter:function(){return""}},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:colors},element.empty(),element.plot(data,options).data("plot")},link=function($scope,$el){var element;return element=angular.element($el),$scope.$watch("stats",function(){return null!=$scope.stats?(redrawChart(element,$scope.stats),$scope.$on("resize",function(){return redrawChart(element,$scope.stats)})):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgGmBacklogGraph",tgBacklogGraphDirective),TgBacklogProgressBarDirective=function(){var adjustPercentaje,link,render,template;return template=_.template('
    \n
    \n
    '),render=function(el,projectPointsPercentaje,closedPointsPercentaje){return el.html(template({projectPointsPercentaje:projectPointsPercentaje,closedPointsPercentaje:closedPointsPercentaje}))},adjustPercentaje=function(percentage){var adjusted;return adjusted=_.max([0,percentage]),adjusted=_.min([100,adjusted]),Math.round(adjusted)},link=function($scope,$el,$attrs){var element;return element=angular.element($el),$scope.$watch($attrs.tgBacklogProgressBar,function(stats){var closedPoints,closedPointsPercentaje,definedPoints,projectPointsPercentaje,totalPoints;return null!=stats?(totalPoints=stats.total_points,definedPoints=stats.defined_points,closedPoints=stats.closed_points,definedPoints>totalPoints?(projectPointsPercentaje=100*totalPoints/definedPoints,closedPointsPercentaje=100*closedPoints/definedPoints):(projectPointsPercentaje=100,closedPointsPercentaje=100*closedPoints/totalPoints),projectPointsPercentaje=adjustPercentaje(projectPointsPercentaje-3),closedPointsPercentaje=adjustPercentaje(closedPointsPercentaje-3),render($el,projectPointsPercentaje,closedPointsPercentaje)):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgBacklogProgressBar",TgBacklogProgressBarDirective)}.call(this),function(){var BacklogEmptySortableDirective,BacklogSortableDirective,SprintSortableDirective,bindOnce,deleteElement,groupBy,mixOf,module,scopeDefer,taiga,toggleText;taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,module=angular.module("taigaBacklog"),deleteElement=function(el){return el.scope().$destroy(),el.off(),el.remove()},BacklogSortableDirective=function($repo,$rs,$rootscope,$tgConfirm){var link;return link=function($scope,$el){return bindOnce($scope,"project",function(project){var filterError;if(project.my_permissions.indexOf("modify_us")>-1)return filterError=function(){return $tgConfirm.notify("error","You can't drop on backlog when filters are open")},$el.sortable({connectWith:".sprint-table",containment:".wrapper",dropOnEmpty:!0,placeholder:"row us-item-row us-item-drag sortable-placeholder",scroll:!0,tolerance:"pointer",revert:!1,cursorAt:{right:15},stop:function(){return $el.hasClass("active-filters")?($el.sortable("cancel"),filterError()):void 0}}),$el.on("multiplesortreceive",function(event,ui){var itemIndex,itemUs;return $el.hasClass("active-filters")?(ui.source.sortable("cancel"),void filterError()):(itemUs=ui.item.scope().us,itemIndex=ui.item.index(),deleteElement(ui.item),$scope.$emit("sprint:us:move",[itemUs],itemIndex,null),ui.item.find("a").removeClass("noclick"))}),$el.on("multiplesortstop",function(event,ui){var index,items,us;if(0!==$(ui.items[0]).parent().length)return items=_.sortBy(ui.items,function(item){return $(item).index()}),index=_.min(_.map(items,function(item){return $(item).index()})),us=_.map(items,function(item){var itemUs;return item=$(item),itemUs=item.scope().us,setTimeout(function(){return function(){return item.find("a").removeClass("noclick")}}(this),300),itemUs}),$scope.$emit("sprint:us:move",us,index,null)}),$el.on("sortstart",function(event,ui){return ui.item.find("a").addClass("noclick")})}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},BacklogEmptySortableDirective=function(){var link;return link=function($scope,$el){return bindOnce($scope,"project",function(project){return project.my_permissions.indexOf("modify_us")>-1?($el.sortable({dropOnEmpty:!0}),$el.on("sortreceive",function(event,ui){var itemIndex,itemUs;return itemUs=ui.item.scope().us,itemIndex=ui.item.index(),deleteElement(ui.item),$scope.$emit("sprint:us:move",[itemUs],itemIndex,null),ui.item.find("a").removeClass("noclick")})):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},SprintSortableDirective=function(){var link;return link=function($scope,$el){return bindOnce($scope,"project",function(project){return project.my_permissions.indexOf("modify_us")>-1?($el.sortable({scroll:!0,dropOnEmpty:!0,connectWith:".sprint-table,.backlog-table-body,.empty-backlog"}),$el.on("multiplesortreceive",function(event,ui){var index,items,us;return items=_.sortBy(ui.items,function(item){return $(item).index()}),index=_.min(_.map(items,function(item){return $(item).index()})),us=_.map(items,function(item){var itemUs;return item=$(item),itemUs=item.scope().us,deleteElement(item),itemUs}),$scope.$emit("sprint:us:move",us,index,$scope.sprint.id)}),$el.on("multiplesortstop",function(event,ui){var itemIndex,itemUs;if(0!==ui.item.parent().length)return itemUs=ui.item.scope().us,itemIndex=ui.item.index(),setTimeout(function(){return function(){return ui.item.find("a").removeClass("noclick")}}(this),300),$scope.$emit("sprint:us:move",[itemUs],itemIndex,$scope.sprint.id)}),$el.on("sortstart",function(event,ui){return ui.item.find("a").addClass("noclick")})):void 0})},{link:link}},module.directive("tgBacklogSortable",["$tgRepo","$tgResources","$rootScope","$tgConfirm",BacklogSortableDirective]),module.directive("tgBacklogEmptySortable",["$tgRepo","$tgResources","$rootScope",BacklogEmptySortableDirective]),module.directive("tgSprintSortable",["$tgRepo","$tgResources","$rootScope",SprintSortableDirective])}.call(this),function(){var BacklogSprintDirective,BacklogSprintHeaderDirective,ToggleExcludeClosedSprintsVisualization,module,taiga;taiga=this.taiga,module=angular.module("taigaBacklog"),BacklogSprintDirective=function($repo,$rootscope){var link,refreshSprintTableHeight,slideOptions,sprintTableMinHeight,toggleSprint;return sprintTableMinHeight=50,slideOptions={duration:500,easing:"linear"},refreshSprintTableHeight=function(){return function(sprintTable){return sprintTable.find(".row").length?sprintTable.css("height","auto"):sprintTable.css("height",sprintTableMinHeight)}}(this),toggleSprint=function(){return function($el){var sprintArrow,sprintTable;return sprintTable=$el.find(".sprint-table"),sprintArrow=$el.find(".icon-arrow-up"),sprintArrow.toggleClass("active"),sprintTable.toggleClass("open"),refreshSprintTableHeight(sprintTable)}}(this),link=function($scope,$el,$attrs){return $scope.$watch($attrs.tgBacklogSprint,function(sprint){return sprint=$scope.$eval($attrs.tgBacklogSprint),$scope.$first?toggleSprint($el):sprint.closed?$el.addClass("sprint-closed"):$scope.$first||sprint.closed?void 0:(toggleSprint($el),$el.addClass("sprint-old-open"))}),$el.on("click",".sprint-name > .icon-arrow-up",function(){return toggleSprint($el),$el.find(".sprint-table").slideToggle(slideOptions)}),$el.on("click",".sprint-name > .icon-edit",function(){var sprint;return sprint=$scope.$eval($attrs.tgBacklogSprint),$rootscope.$broadcast("sprintform:edit",sprint)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgBacklogSprint",["$tgRepo","$rootScope",BacklogSprintDirective]),BacklogSprintHeaderDirective=function($navUrls){var link,template;return template=_.template('
    \n \n\n <% if(isVisible){ %>\n \n <%- name %>\n \n <% } %>\n\n <% if(isEditable){ %>\n \n <% } %>\n
    \n\n
    \n
    <%- estimatedDateRange %>
    \n
      \n
    • \n <%- closedPoints %>\n closed\n
    • \n
    • \n <%- totalPoints %>\n total\n
    • \n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,isVisible,render;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_milestone")},isVisible=function(){return-1!==$scope.project.my_permissions.indexOf("view_milestones")},render=function(sprint){var ctx,estimatedDateRange,finish,start,taskboardUrl;return taskboardUrl=$navUrls.resolve("project-taskboard",{project:$scope.project.slug,sprint:sprint.slug}),start=moment(sprint.estimated_start).format("DD MMM YYYY"),finish=moment(sprint.estimated_finish).format("DD MMM YYYY"),estimatedDateRange=""+start+"-"+finish,ctx={name:sprint.name,taskboardUrl:taskboardUrl,estimatedDateRange:estimatedDateRange,closedPoints:sprint.closed_points||0,totalPoints:sprint.total_points||0,isVisible:isVisible(),isEditable:isEditable()},$el.html(template(ctx))},$scope.$watch($attrs.ngModel,function(sprint){return render(sprint)}),$scope.$on("sprintform:edit:success",function(){return render($model.$modelValue)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgBacklogSprintHeader",["$tgNavUrls","$tgRepo","$rootScope",BacklogSprintHeaderDirective]),ToggleExcludeClosedSprintsVisualization=function($rootscope,$loading){var excludeClosedSprints,link;return excludeClosedSprints=!1,link=function($scope,$el){return $el.on("click","",function(){return $loading.start($el.siblings(".load")),$rootscope.$broadcast("backlog:toggle-closed-sprints-visualization")}),$scope.$on("$destroy",function(){return $el.off()}),$scope.$on("sprints:loaded",function(){return function(ctx,sprints){var closedSprints;return closedSprints=_.filter(sprints,function(sprint){return sprint.closed}),$loading.finish($el.siblings(".load")),$el.text(closedSprints.length>0?"Hide closed sprints":"Show closed sprints")}}(this))},{link:link}},module.directive("tgBacklogToggleClosedSprintsVisualization",["$rootScope","$tgLoading",ToggleExcludeClosedSprintsVisualization])}.call(this),function(){var SprintGraphDirective,bindOnce,groupBy,mixOf,module,scopeDefer,taiga,timeout,toggleText;taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,timeout=this.taiga.timeout,module=angular.module("taigaTaskboard"),SprintGraphDirective=function(){var link,redrawChart;return redrawChart=function(element,dataToDraw){var data,days,options,width;return width=element.width(),element.height(240),days=_.map(dataToDraw,function(x){return moment(x.day)}),data=[],data.unshift({data:_.zip(days,_.map(dataToDraw,function(d){return d.optimal_points})),lines:{fillColor:"rgba(120,120,120,0.2)"}}),data.unshift({data:_.zip(days,_.map(dataToDraw,function(d){return d.open_points})),lines:{fillColor:"rgba(102,153,51,0.3)"}}),options={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc"},xaxis:{tickSize:[1,"day"],min:days[0],max:_.last(days),mode:"time",daysNames:days,axisLabel:"Day",axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},yaxis:{min:0},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:["rgba(102,153,51,1)","rgba(120,120,120,0.2)"]},element.empty(),element.plot(data,options).data("plot")},link=function($scope,$el){var element;return element=angular.element($el),$scope.$on("resize",function(){return $scope.stats?redrawChart(element,$scope.stats.days):void 0}),$scope.$on("taskboard:graph:toggle-visibility",function(){return $el.parent().toggleClass("open"),timeout(100,function(){return $scope.stats?redrawChart(element,$scope.stats.days):void 0})}),$scope.$watch("stats",function(){return null!=$scope.stats?redrawChart(element,$scope.stats.days):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgSprintGraph",SprintGraphDirective)}.call(this),function(){var CreateBulkTasksDirective,CreateEditTaskDirective,bindOnce,debounce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,CreateEditTaskDirective=function($repo,$model,$rs,$rootscope,$loading,lightboxService){var link;return link=function($scope,$el){var submit,submitButton;return $scope.isNew=!0,$scope.$on("taskform:new",function(ctx,sprintId,usId){return $scope.task={project:$scope.projectId,milestone:sprintId,user_story:usId,is_archived:!1,status:$scope.project.default_task_status,assigned_to:null,tags:[]},$scope.isNew=!0,$el.find(".button-green span").html("Create"),$el.find(".title").html("New task "),$el.find(".tag-input").val(""),lightboxService.open($el)}),$scope.$on("taskform:edit",function(ctx,task){return $scope.task=task,$scope.isNew=!1,$el.find(".button-green span").html("Save"),$el.find(".title").html("Edit task "),$el.find(".tag-input").val(""),lightboxService.open($el)}),submitButton=$el.find(".submit-button"),submit=debounce(2e3,function(){return function(event){var broadcastEvent,form,promise;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?($scope.isNew?(promise=$repo.create("tasks",$scope.task),broadcastEvent="taskform:new:success"):(promise=$repo.save($scope.task),broadcastEvent="taskform:edit:success"),$loading.start(submitButton),promise.then(function(data){return $loading.finish(submitButton),lightboxService.close($el),$rootscope.$broadcast(broadcastEvent,data)})):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},CreateBulkTasksDirective=function($repo,$rs,$rootscope,$loading,lightboxService){var link;return link=function($scope,$el){var submit,submitButton;return $scope.form={data:"",usId:null},submit=debounce(2e3,function(){return function(event){var data,form,projectId,promise,sprintId,usId;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?($loading.start(submitButton),data=$scope.form.data,projectId=$scope.projectId,sprintId=$scope.form.sprintId,usId=$scope.form.usId,promise=$rs.tasks.bulkCreate(projectId,sprintId,usId,data),promise.then(function(result){return $loading.finish(submitButton),$rootscope.$broadcast("taskform:bulk:success",result),lightboxService.close($el)}),promise.then(null,function(){return $loading.finish(submitButton),console.log("FAIL")})):void 0}}(this)),$scope.$on("taskform:bulk",function(ctx,sprintId,usId){return lightboxService.open($el),$scope.form={data:"",sprintId:sprintId,usId:usId}}),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module=angular.module("taigaTaskboard"),module.directive("tgLbCreateEditTask",["$tgRepo","$tgModel","$tgResources","$rootScope","$tgLoading","lightboxService",CreateEditTaskDirective]),module.directive("tgLbCreateBulkTasks",["$tgRepo","$tgResources","$rootScope","$tgLoading","lightboxService",CreateBulkTasksDirective])}.call(this),function(){var TaskboardController,TaskboardDirective,TaskboardSquishColumnDirective,TaskboardTableHeightFixerDirective,TaskboardTaskDirective,TaskboardUserDirective,bindMethods,bindOnce,groupBy,mixOf,module,scopeDefer,taiga,timeout,toggleText,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,toggleText=this.taiga.toggleText,mixOf=this.taiga.mixOf,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,scopeDefer=this.taiga.scopeDefer,timeout=this.taiga.timeout,bindMethods=this.taiga.bindMethods,module=angular.module("taigaTaskboard"),TaskboardController=function(_super){function TaskboardController(scope,rootscope,repo,confirm,rs,params,q,appTitle,location,navUrls,events,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.appTitle=appTitle,this.location=location,this.navUrls=navUrls,this.events=events,this.analytics=analytics,bindMethods(this),this.scope.sectionName="Taskboard",this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Taskboard - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(TaskboardController,_super),TaskboardController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$appTitle","$tgLocation","$tgNavUrls","$tgEvents","$tgAnalytics","tgLoader"],TaskboardController.prototype.initializeEventHandlers=function(){return this.scope.$on("taskform:bulk:success",function(_this){return function(){return _this.loadTaskboard(),_this.analytics.trackEvent("task","create","bulk create task on taskboard",1)}}(this)),this.scope.$on("taskform:new:success",function(_this){return function(){return _this.loadTaskboard(),_this.analytics.trackEvent("task","create","create task on taskboard",1)}}(this)),this.scope.$on("taskform:edit:success",function(_this){return function(){return _this.loadTaskboard()}}(this)),this.scope.$on("taskboard:task:move",this.taskMove),this.scope.$on("assigned-to:added",function(_this){return function(ctx,userId,task){var promise;return task.assigned_to=userId,promise=_this.repo.save(task),promise.then(null,function(){return console.log("FAIL")})}}(this))},TaskboardController.prototype.initializeSubscription=function(){var routingKey,routingKey1;return routingKey="changes.project."+this.scope.projectId+".tasks",this.events.subscribe(this.scope,routingKey,function(_this){return function(){return _this.loadTaskboard()}}(this)),routingKey1="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,routingKey1,function(_this){return function(){return _this.refreshTagsColors(),_this.loadSprintStats(),_this.loadSprint()}}(this))},TaskboardController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.pointsList=_.sortBy(project.points,"order"),_this.scope.pointsById=groupBy(project.points,function(e){return e.id}),_this.scope.roleById=groupBy(project.roles,function(e){return e.id}),_this.scope.taskStatusList=_.sortBy(project.task_statuses,"order"),_this.scope.usStatusList=_.sortBy(project.us_statuses,"order"),_this.scope.usStatusById=groupBy(project.us_statuses,function(e){return e.id}),_this.scope.$emit("project:loaded",project),project}}(this))},TaskboardController.prototype.loadSprintStats=function(){return this.rs.sprints.stats(this.scope.projectId,this.scope.sprintId).then(function(_this){return function(stats){var completedPointsSum,remainingPointsSum,remainingTasks,totalPointsSum;return totalPointsSum=_.reduce(_.values(stats.total_points),function(res,n){return res+n},0),completedPointsSum=_.reduce(_.values(stats.completed_points),function(res,n){return res+n},0),remainingPointsSum=totalPointsSum-completedPointsSum,remainingTasks=stats.total_tasks-stats.completed_tasks,_this.scope.stats=stats,_this.scope.stats.totalPointsSum=totalPointsSum,_this.scope.stats.completedPointsSum=completedPointsSum,_this.scope.stats.remainingPointsSum=remainingPointsSum,_this.scope.stats.remainingTasks=remainingTasks,_this.scope.stats.completedPercentage=stats.totalPointsSum?Math.round(100*stats.completedPointsSum/stats.totalPointsSum):0,_this.scope.stats.openTasks=stats.total_tasks-stats.completed_tasks,stats}}(this))},TaskboardController.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(_this){return function(tags_colors){return _this.scope.project.tags_colors=tags_colors}}(this))},TaskboardController.prototype.loadSprint=function(){return this.rs.sprints.get(this.scope.projectId,this.scope.sprintId).then(function(_this){return function(sprint){return _this.scope.sprint=sprint,_this.scope.userstories=_.sortBy(sprint.user_stories,"sprint_order"),sprint}}(this))},TaskboardController.prototype.loadTasks=function(){return this.rs.tasks.list(this.scope.projectId,this.scope.sprintId).then(function(_this){return function(tasks){var status,task,us,_i,_j,_k,_len,_len1,_len2,_ref,_ref1,_ref2;for(_this.scope.tasks=_.sortBy(tasks,"taskboard_order"),_this.scope.usTasks={},_ref=_.union(_this.scope.userstories,[{id:null}]),_i=0,_len=_ref.length;_len>_i;_i++)for(us=_ref[_i],_this.scope.usTasks[us.id]={},_ref1=_this.scope.taskStatusList,_j=0,_len1=_ref1.length;_len1>_j;_j++)status=_ref1[_j],_this.scope.usTasks[us.id][status.id]=[];for(_ref2=_this.scope.tasks,_k=0,_len2=_ref2.length;_len2>_k;_k++)task=_ref2[_k],null!=_this.scope.usTasks[task.user_story]&&null!=_this.scope.usTasks[task.user_story][task.status]&&_this.scope.usTasks[task.user_story][task.status].push(task);return tasks}}(this))},TaskboardController.prototype.loadTaskboard=function(){return this.q.all([this.refreshTagsColors(),this.loadSprintStats(),this.loadSprint().then(function(_this){return function(){return _this.loadTasks()}}(this))])},TaskboardController.prototype.loadInitialData=function(){var params,promise;return params={pslug:this.params.pslug,sslug:this.params.sslug},promise=this.repo.resolve(params).then(function(_this){return function(data){return _this.scope.projectId=data.project,_this.scope.sprintId=data.milestone,_this.initializeSubscription(),data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadUsersAndRoles()}}(this)).then(function(_this){return function(){return _this.loadTaskboard()}}(this))},TaskboardController.prototype.refreshTasksOrder=function(tasks){var data,items;return items=this.resortTasks(tasks),data=this.prepareBulkUpdateData(items),this.rs.tasks.bulkUpdateTaskTaskboardOrder(this.scope.project.id,data)},TaskboardController.prototype.resortTasks=function(tasks){var index,item,items,_i,_len;for(items=[],index=_i=0,_len=tasks.length;_len>_i;index=++_i)item=tasks[index],item.taskboard_order=index,item.isModified()&&items.push(item);return items},TaskboardController.prototype.prepareBulkUpdateData=function(uses){return _.map(uses,function(x){return{task_id:x.id,order:x.taskboard_order}})},TaskboardController.prototype.taskMove=function(ctx,task,usId,statusId,order){var promise,r,tasks;return r=this.scope.usTasks[task.user_story][task.status].indexOf(task),this.scope.usTasks[task.user_story][task.status].splice(r,1),tasks=this.scope.usTasks[usId][statusId],tasks.splice(order,0,task),task.user_story=usId,task.status=statusId,task.taskboard_order=order,promise=this.repo.save(task),this.rootscope.$broadcast("sprint:task:moved",task),promise.then(function(_this){return function(){return _this.refreshTasksOrder(tasks),_this.loadSprintStats()}}(this)),promise.then(null,function(){return function(){return console.log("FAIL TASK SAVE")}}(this))},TaskboardController.prototype.addNewTask=function(type,us){switch(type){case"standard":return this.rootscope.$broadcast("taskform:new",this.scope.sprintId,null!=us?us.id:void 0);case"bulk":return this.rootscope.$broadcast("taskform:bulk",this.scope.sprintId,null!=us?us.id:void 0)}},TaskboardController.prototype.editTaskAssignedTo=function(task){return this.rootscope.$broadcast("assigned-to:add",task)},TaskboardController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("TaskboardController",TaskboardController),TaskboardDirective=function($rootscope){var link;return link=function($scope,$el){var $ctrl,tableBodyDom;return $ctrl=$el.controller(),$el.on("click",".toggle-analytics-visibility",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.toggleClass("active"),$rootscope.$broadcast("taskboard:graph:toggle-visibility")}),tableBodyDom=$el.find(".taskboard-table-body"),tableBodyDom.on("scroll",function(event){var tableHeaderDom,target;return target=angular.element(event.currentTarget),tableHeaderDom=$el.find(".taskboard-table-header .taskboard-table-inner"),tableHeaderDom.css("left",-1*target.scrollLeft())}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgTaskboard",["$rootScope",TaskboardDirective]),TaskboardTaskDirective=function($rootscope){var link;return link=function($scope,$el){return $el.disableSelection(),$scope.$watch("task",function(task){return task.is_blocked&&!$el.hasClass("blocked")?$el.addClass("blocked"):!task.is_blocked&&$el.hasClass("blocked")?$el.removeClass("blocked"):void 0}),$el.find(".icon-edit").on("click",function(){return $el.find(".icon-edit").hasClass("noclick")?void 0:$scope.$apply(function(){return $rootscope.$broadcast("taskform:edit",$scope.task)})})},{link:link}},module.directive("tgTaskboardTask",["$rootScope",TaskboardTaskDirective]),TaskboardTableHeightFixerDirective=function(){var link,mainPadding,renderSize;return mainPadding=32,renderSize=function($el){var columnHeight,elementOffset,windowHeight;return elementOffset=$el.offset().top,windowHeight=angular.element(window).height(),columnHeight=windowHeight-elementOffset-mainPadding,$el.css("height",""+columnHeight+"px")},link=function($scope,$el){return timeout(500,function(){return renderSize($el)}),$scope.$on("resize",function(){return renderSize($el)})},{link:link}},module.directive("tgTaskboardTableHeightFixer",TaskboardTableHeightFixerDirective),TaskboardSquishColumnDirective=function(rs){var avatarWidth,link;return avatarWidth=40,link=function($scope,$el){var getCeilWidth,recalculateStatusColumnWidth,recalculateTaskboardWidth,refreshTaskboardTableWidth,setStatusColumnWidth; +return $scope.$on("sprint:task:moved",function(){return function(){return recalculateTaskboardWidth()}}(this)),bindOnce($scope,"usTasks",function(){return $scope.statusesFolded=rs.tasks.getStatusColumnModes($scope.project.id),$scope.usFolded=rs.tasks.getUsRowModes($scope.project.id,$scope.sprintId),recalculateTaskboardWidth()}),$scope.foldStatus=function(status){return $scope.statusesFolded[status.id]=!$scope.statusesFolded[status.id],rs.tasks.storeStatusColumnModes($scope.projectId,$scope.statusesFolded),recalculateTaskboardWidth()},$scope.foldUs=function(us){return us?$scope.usFolded[us.id]=!$scope.usFolded[us.id]:$scope.usFolded[null]=!$scope.usFolded[null],rs.tasks.storeUsRowModes($scope.projectId,$scope.sprintId,$scope.usFolded),recalculateTaskboardWidth()},getCeilWidth=function(){return function(usId,statusId){var tasks,tasksMatrixSize,width;return tasks=$scope.usTasks[usId][statusId].length,$scope.statusesFolded[statusId]?(tasks&&$scope.usFolded[usId]?(tasksMatrixSize=Math.round(Math.sqrt(tasks)),width=avatarWidth*tasksMatrixSize):width=avatarWidth,width):0}}(this),setStatusColumnWidth=function(){return function(statusId,width){var column;return column=$el.find(".squish-status-"+statusId),width?column.css("max-width",width):column.css("max-width","none")}}(this),refreshTaskboardTableWidth=function(){return function(){var columnWidths,columns,totalWidth;return columnWidths=[],columns=$el.find(".task-colum-name"),columnWidths=_.map(columns,function(column){return $(column).outerWidth(!0)}),totalWidth=_.reduce(columnWidths,function(total,width){return total+width}),$el.find(".taskboard-table-inner").css("width",totalWidth)}}(this),recalculateStatusColumnWidth=function(){return function(statusId){var statusFoldedWidth;return statusFoldedWidth=getCeilWidth(null,statusId),_.forEach($scope.userstories,function(us){var width;return width=getCeilWidth(us.id,statusId),width>statusFoldedWidth?statusFoldedWidth=width:void 0}),setStatusColumnWidth(statusId,statusFoldedWidth)}}(this),recalculateTaskboardWidth=function(){return function(){_.forEach($scope.taskStatusList,function(status){return recalculateStatusColumnWidth(status.id)}),refreshTaskboardTableWidth()}}(this)},{link:link}},module.directive("tgTaskboardSquishColumn",["$tgResources",TaskboardSquishColumnDirective]),TaskboardUserDirective=function(){var clickable,link,template;return template='
    \n \n \n \n
    \n\n',clickable=!1,link=function($scope,$el){var username_label;return username_label=$el.parent().find("a.task-assigned"),username_label.on("click",function(){var $ctrl;if(!$el.find("a").hasClass("noclick"))return $ctrl=$el.controller(),$ctrl.editTaskAssignedTo($scope.task)}),$scope.$watch("task.assigned_to",function(assigned_to){var user;return user=$scope.usersById[assigned_to],void 0===user?_.assign($scope,{name:"Unassigned",imgurl:"/images/unnamed.png",clickable:clickable}):_.assign($scope,{name:user.full_name_display,imgurl:user.photo,clickable:clickable}),username_label.text($scope.name)}),bindOnce($scope,"project",function(project){return project.my_permissions.indexOf("modify_task")>-1?(clickable=!0,$el.find(".avatar-assigned-to").on("click",function(){return function(){var $ctrl;if(!$el.find("a").hasClass("noclick"))return $ctrl=$el.controller(),$ctrl.editTaskAssignedTo($scope.task)}}(this))):void 0})},{link:link,template:template,scope:{usersById:"=users",project:"=",task:"="}}},module.directive("tgTaskboardUserAvatar",["$log",TaskboardUserDirective])}.call(this),function(){var TaskboardSortableDirective,bindOnce,groupBy,mixOf,module,scopeDefer,taiga,toggleText;taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,module=angular.module("taigaBacklog"),TaskboardSortableDirective=function($repo,$rs,$rootscope){var link;return link=function($scope,$el){var deleteElement,itemEl,newParentScope,oldParentScope,tdom;return oldParentScope=null,newParentScope=null,itemEl=null,tdom=$el,deleteElement=function(itemEl){return itemEl.scope().$destroy(),itemEl.off(),itemEl.remove()},tdom.sortable({handle:".taskboard-task-inner",dropOnEmpty:!0,connectWith:".taskboard-tasks-box",revert:400}),tdom.on("sortstop",function(event,ui){var itemIndex,itemTask,newStatusId,newUsId,oldStatusId,oldUsId,parentEl;return parentEl=ui.item.parent(),itemEl=ui.item,itemTask=itemEl.scope().task,itemIndex=itemEl.index(),newParentScope=parentEl.scope(),oldUsId=oldParentScope.us?oldParentScope.us.id:null,oldStatusId=oldParentScope.st.id,newUsId=newParentScope.us?newParentScope.us.id:null,newStatusId=newParentScope.st.id,(newStatusId!==oldStatusId||newUsId!==oldUsId)&&deleteElement(itemEl),$scope.$apply(function(){return $rootscope.$broadcast("taskboard:task:move",itemTask,newUsId,newStatusId,itemIndex)}),ui.item.find("a").removeClass("noclick")}),tdom.on("sortstart",function(event,ui){return oldParentScope=ui.item.parent().scope(),ui.item.find("a").addClass("noclick")}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgTaskboardSortable",["$tgRepo","$tgResources","$rootScope",TaskboardSortableDirective])}.call(this),function(){var KanbanArchivedStatusHeaderDirective,KanbanArchivedStatusIntroDirective,KanbanColumnHeightFixerDirective,KanbanController,KanbanDirective,KanbanSquishColumnDirective,KanbanUserDirective,KanbanUserstoryDirective,KanbanWipLimitDirective,bindMethods,bindOnce,defaultViewMode,defaultViewModes,groupBy,mixOf,module,scopeDefer,taiga,timeout,toggleText,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,timeout=this.taiga.timeout,bindMethods=this.taiga.bindMethods,module=angular.module("taigaKanban"),defaultViewMode="maximized",defaultViewModes={maximized:{cardClass:"kanban-task-maximized"},minimized:{cardClass:"kanban-task-minimized"}},KanbanController=function(_super){function KanbanController(scope,rootscope,repo,confirm,rs,params,q,location,appTitle,navUrls,events,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.appTitle=appTitle,this.navUrls=navUrls,this.events=events,this.analytics=analytics,bindMethods(this),this.scope.sectionName="Kanban",this.scope.statusViewModes={},this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Kanban - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(KanbanController,_super),KanbanController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$appTitle","$tgNavUrls","$tgEvents","$tgAnalytics","tgLoader"],KanbanController.prototype.initializeEventHandlers=function(){return this.scope.$on("usform:new:success",function(_this){return function(){return _this.loadUserstories(),_this.refreshTagsColors(),_this.analytics.trackEvent("userstory","create","create userstory on kanban",1)}}(this)),this.scope.$on("usform:bulk:success",function(_this){return function(){return _this.loadUserstories(),_this.analytics.trackEvent("userstory","create","bulk create userstory on kanban",1)}}(this)),this.scope.$on("usform:edit:success",function(_this){return function(){return _this.loadUserstories(),_this.refreshTagsColors()}}(this)),this.scope.$on("assigned-to:added",this.onAssignedToChanged),this.scope.$on("kanban:us:move",this.moveUs),this.scope.$on("kanban:show-userstories-for-status",this.loadUserStoriesForStatus),this.scope.$on("kanban:hide-userstories-for-status",this.hideUserStoriesForStatus)},KanbanController.prototype.addNewUs=function(type,statusId){switch(type){case"standard":return this.rootscope.$broadcast("usform:new",this.scope.projectId,statusId,this.scope.usStatusList);case"bulk":return this.rootscope.$broadcast("usform:bulk",this.scope.projectId,statusId)}},KanbanController.prototype.changeUsAssignedTo=function(us){return this.rootscope.$broadcast("assigned-to:add",us)},KanbanController.prototype.onAssignedToChanged=function(ctx,userid,us){var promise;return us.assigned_to=userid,promise=this.repo.save(us),promise.then(null,function(){return console.log("FAIL")})},KanbanController.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(_this){return function(tags_colors){return _this.scope.project.tags_colors=tags_colors}}(this))},KanbanController.prototype.loadUserstories=function(){var params;return params={status__is_archived:!1},this.rs.userstories.listAll(this.scope.projectId,params).then(function(_this){return function(userstories){var status,usByStatus,_i,_len,_ref;for(_this.scope.userstories=userstories,usByStatus=_.groupBy(userstories,"status"),_ref=_this.scope.usStatusList,_i=0,_len=_ref.length;_len>_i;_i++)status=_ref[_i],null==usByStatus[status.id]&&(usByStatus[status.id]=[]),status.is_archived&&null!=_this.scope.usByStatus&&(usByStatus[status.id]=_this.scope.usByStatus[status.id]),usByStatus[status.id]=_.sortBy(usByStatus[status.id],"kanban_order");return _this.scope.usByStatus=usByStatus,scopeDefer(_this.scope,function(){return _this.scope.$broadcast("userstories:loaded",userstories)}),userstories}}(this))},KanbanController.prototype.loadUserStoriesForStatus=function(ctx,statusId){var params;return params={status:statusId},this.rs.userstories.listAll(this.scope.projectId,params).then(function(_this){return function(userstories){return _this.scope.usByStatus[statusId]=_.sortBy(userstories,"kanban_order"),_this.scope.$broadcast("kanban:shown-userstories-for-status",statusId,userstories),userstories}}(this))},KanbanController.prototype.hideUserStoriesForStatus=function(ctx,statusId){return this.scope.usByStatus[statusId]=[],this.scope.$broadcast("kanban:hidden-userstories-for-status",statusId)},KanbanController.prototype.loadKanban=function(){return this.q.all([this.refreshTagsColors(),this.loadUserstories()])},KanbanController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.projectId=project.id,_this.scope.points=_.sortBy(project.points,"order"),_this.scope.pointsById=groupBy(project.points,function(x){return x.id}),_this.scope.usStatusById=groupBy(project.us_statuses,function(x){return x.id}),_this.scope.usStatusList=_.sortBy(project.us_statuses,"order"),_this.generateStatusViewModes(),_this.scope.$emit("project:loaded",project),project}}(this))},KanbanController.prototype.initializeSubscription=function(){var routingKey1;return routingKey1="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,routingKey1,function(_this){return function(){return _this.loadUserstories()}}(this))},KanbanController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.initializeSubscription(),_this.loadKanban().then(function(){return _this.scope.$broadcast("redraw:wip")})}}(this))},KanbanController.prototype.generateStatusViewModes=function(){var mode,status,storedStatusViewModes,_i,_len,_ref;for(storedStatusViewModes=this.rs.kanban.getStatusViewModes(this.scope.projectId),this.scope.statusViewModes={},_ref=this.scope.usStatusList,_i=0,_len=_ref.length;_len>_i;_i++)status=_ref[_i],mode=storedStatusViewModes[status.id],this.scope.statusViewModes[status.id]=_.has(defaultViewModes,mode)?mode:defaultViewMode;return this.storeStatusViewModes()},KanbanController.prototype.storeStatusViewModes=function(){return this.rs.kanban.storeStatusViewModes(this.scope.projectId,this.scope.statusViewModes)},KanbanController.prototype.updateStatusViewMode=function(statusId,newViewMode){return this.scope.statusViewModes[statusId]=newViewMode,this.storeStatusViewModes()},KanbanController.prototype.getCardClass=function(statusId){var mode;return mode=this.scope.statusViewModes[statusId]||defaultViewMode,defaultViewModes[mode].cardClass||defaultViewModes[defaultViewMode].cardClass},KanbanController.prototype.prepareBulkUpdateData=function(uses,field){return null==field&&(field="kanban_order"),_.map(uses,function(x){return{us_id:x.id,order:x[field]}})},KanbanController.prototype.resortUserStories=function(uses){var index,item,items,_i,_len;for(items=[],index=_i=0,_len=uses.length;_len>_i;index=++_i)item=uses[index],item.kanban_order=index,item.isModified()&&items.push(item);return items},KanbanController.prototype.moveUs=function(ctx,us,oldStatusId,newStatusId,index){var itemsToSave,promise,r;return oldStatusId!==newStatusId?(r=this.scope.usByStatus[oldStatusId].indexOf(us),this.scope.usByStatus[oldStatusId].splice(r,1),this.scope.usByStatus[newStatusId].splice(index,0,us),us.status=newStatusId):(r=this.scope.usByStatus[newStatusId].indexOf(us),this.scope.usByStatus[newStatusId].splice(r,1),this.scope.usByStatus[newStatusId].splice(index,0,us)),itemsToSave=this.resortUserStories(this.scope.usByStatus[newStatusId]),this.scope.usByStatus[newStatusId]=_.sortBy(this.scope.usByStatus[newStatusId],"kanban_order"),promise=this.repo.save(us),promise=promise.then(function(_this){return function(){var data;return itemsToSave=_.reject(itemsToSave,{id:us.id}),data=_this.prepareBulkUpdateData(itemsToSave),_this.rs.userstories.bulkUpdateKanbanOrder(us.project,data).then(function(){return itemsToSave})}}(this))},KanbanController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("KanbanController",KanbanController),KanbanDirective=function(){var link;return link=function($scope,$el){var tableBodyDom;return tableBodyDom=$el.find(".kanban-table-body"),tableBodyDom.on("scroll",function(event){var tableHeaderDom,target;return target=angular.element(event.currentTarget),tableHeaderDom=$el.find(".kanban-table-header .kanban-table-inner"),tableHeaderDom.css("left",-1*target.scrollLeft())}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanban",["$tgRepo","$rootScope",KanbanDirective]),KanbanColumnHeightFixerDirective=function(){var link,mainPadding,renderSize,scrollPadding;return mainPadding=32,scrollPadding=0,renderSize=function($el){var columnHeight,elementOffset,windowHeight;return elementOffset=$el.parent().parent().offset().top,windowHeight=angular.element(window).height(),columnHeight=windowHeight-elementOffset-mainPadding-scrollPadding,$el.css("height",""+columnHeight+"px")},link=function($scope,$el){return timeout(500,function(){return renderSize($el)}),$scope.$on("resize",function(){return renderSize($el)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanbanColumnHeightFixer",KanbanColumnHeightFixerDirective),KanbanArchivedStatusHeaderDirective=function($rootscope){var hideArchivedText,link,showArchivedText;return showArchivedText="Show archived",hideArchivedText="Hide archived",link=function($scope,$el,$attrs){var hidden,status;return status=$scope.$eval($attrs.tgKanbanArchivedStatusHeader),hidden=!0,$scope["class"]="icon icon-open-eye",$scope.title=showArchivedText,$el.on("click",function(){return hidden=!hidden,$scope.$apply(function(){return hidden?($scope["class"]="icon icon-open-eye",$scope.title=showArchivedText,$rootscope.$broadcast("kanban:hide-userstories-for-status",status.id)):($scope["class"]="icon icon-closed-eye",$scope.title=hideArchivedText,$rootscope.$broadcast("kanban:show-userstories-for-status",status.id))})}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanbanArchivedStatusHeader",["$rootScope",KanbanArchivedStatusHeaderDirective]),KanbanArchivedStatusIntroDirective=function(){var hiddenUserStoriexText,link,userStories;return hiddenUserStoriexText="The user stories in this status are hidden by default",userStories=[],link=function($scope,$el,$attrs){var status,updateIntroText;return status=$scope.$eval($attrs.tgKanbanArchivedStatusIntro),$el.text(hiddenUserStoriexText),updateIntroText=function(){return $el.text(userStories.length>0?"":hiddenUserStoriexText)},$scope.$on("kanban:us:move",function(ctx,itemUs,oldStatusId,newStatusId,itemIndex){var r;return status.id===newStatusId?status.id===oldStatusId?(r=userStories.indexOf(itemUs),userStories.splice(r,1),userStories.splice(itemIndex,0,itemUs)):(itemUs.isArchived=!0,userStories.splice(itemIndex,0,itemUs)):status.id===oldStatusId&&(itemUs.isArchived=!1,r=userStories.indexOf(itemUs),userStories.splice(r,1)),updateIntroText()}),$scope.$on("kanban:shown-userstories-for-status",function(ctx,statusId,userStoriesLoaded){return statusId===status.id?(userStories=_.filter(userStoriesLoaded,function(us){return us.status===status.id}),updateIntroText()):void 0}),$scope.$on("kanban:hidden-userstories-for-status",function(ctx,statusId){return statusId===status.id?(userStories=[],updateIntroText()):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanbanArchivedStatusIntro",KanbanArchivedStatusIntroDirective),KanbanUserstoryDirective=function($rootscope){var link;return link=function($scope,$el,$attrs,$model){return $el.disableSelection(),$scope.$watch("us",function(us){return us.is_blocked&&!$el.hasClass("blocked")?$el.addClass("blocked"):!us.is_blocked&&$el.hasClass("blocked")?$el.removeClass("blocked"):void 0}),$el.find(".icon-edit").on("click",function(){return $el.find(".icon-edit").hasClass("noclick")?void 0:$scope.$apply(function(){return $rootscope.$broadcast("usform:edit",$model.$modelValue)})}),$scope.$on("$destroy",function(){return $el.off()})},{templateUrl:"/partials/views/components/kanban-task.html",link:link,require:"ngModel"}},module.directive("tgKanbanUserstory",["$rootScope",KanbanUserstoryDirective]),KanbanSquishColumnDirective=function(rs){var link;return link=function($scope,$el){var updateTableWidth;return $scope.$on("project:loaded",function(event,project){return $scope.folds=rs.kanban.getStatusColumnModes(project.id),updateTableWidth()}),$scope.foldStatus=function(status){$scope.folds[status.id]=!$scope.folds[status.id],rs.kanban.storeStatusColumnModes($scope.projectId,$scope.folds),updateTableWidth()},updateTableWidth=function(){var columnWidths,totalWidth;return columnWidths=_.map($scope.usStatusList,function(status){return $scope.folds[status.id]?40:310}),totalWidth=_.reduce(columnWidths,function(total,width){return total+width}),$el.find(".kanban-table-inner").css("width",totalWidth)}},{link:link}},module.directive("tgKanbanSquishColumn",["$tgResources",KanbanSquishColumnDirective]),KanbanWipLimitDirective=function(){var link;return link=function($scope,$el,$attrs){var redrawWipLimit;return $el.disableSelection(),redrawWipLimit=function(){return $el.find(".kanban-wip-limit").remove(),timeout(200,function(){var element;return element=$el.find(".kanban-task")[$scope.$eval($attrs.tgKanbanWipLimit)],element?angular.element(element).before("
    "):void 0})},$scope.$on("redraw:wip",redrawWipLimit),$scope.$on("kanban:us:move",redrawWipLimit),$scope.$on("usform:new:success",redrawWipLimit),$scope.$on("usform:bulk:success",redrawWipLimit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanbanWipLimit",KanbanWipLimitDirective),KanbanUserDirective=function($log){var clickable,link,template;return template=_.template('
    \n class="not-clickable"<% } %>>\n <%- name %>\n \n
    '),clickable=!1,link=function($scope,$el,$attrs,$model){var render,wtid;return $attrs.tgKanbanUserAvatar?(wtid=$scope.$watch($attrs.tgKanbanUserAvatar,function(v){var user;return null==$scope.usersById?($log.error("KanbanUserDirective requires userById set in scope."),wtid()):(user=$scope.usersById[v],render(user))}),render=function(user){var ctx,html,username_label;return ctx=void 0===user?{name:"Unassigned",imgurl:"/images/unnamed.png",clickable:clickable}:{name:user.full_name_display,imgurl:user.photo,clickable:clickable},html=template(ctx),$el.html(html),username_label=$el.parent().find("a.task-assigned"),username_label.html(ctx.name),username_label.on("click",function(){var $ctrl,us;if(!$el.find("a").hasClass("noclick"))return us=$model.$modelValue,$ctrl=$el.controller(),$ctrl.changeUsAssignedTo(us)})},bindOnce($scope,"project",function(project){return project.my_permissions.indexOf("modify_us")>-1?(clickable=!0,$el.on("click",function(){return function(){var $ctrl,us;if(!$el.find("a").hasClass("noclick"))return us=$model.$modelValue,$ctrl=$el.controller(),$ctrl.changeUsAssignedTo(us)}}(this))):void 0}),$scope.$on("$destroy",function(){return $el.off()})):$log.error("KanbanUserDirective: no attr is defined")},{link:link,require:"ngModel"}},module.directive("tgKanbanUserAvatar",["$log",KanbanUserDirective])}.call(this),function(){var KanbanSortableDirective,bindOnce,groupBy,mixOf,module,scopeDefer,taiga,timeout,toggleText;taiga=this.taiga,mixOf=this.taiga.mixOf,toggleText=this.taiga.toggleText,scopeDefer=this.taiga.scopeDefer,bindOnce=this.taiga.bindOnce,groupBy=this.taiga.groupBy,timeout=this.taiga.timeout,module=angular.module("taigaKanban"),KanbanSortableDirective=function($repo,$rs,$rootscope){var link;return link=function($scope,$el){return bindOnce($scope,"project",function(project){var deleteElement,itemEl,newParentScope,oldParentScope,tdom;if(project.my_permissions.indexOf("modify_us")>-1)return oldParentScope=null,newParentScope=null,itemEl=null,tdom=$el,deleteElement=function(itemEl){return itemEl.scope().$destroy(),itemEl.off(),itemEl.remove()},tdom.sortable({handle:".kanban-task-inner",dropOnEmpty:!0,connectWith:".kanban-uses-box",revert:400}),tdom.on("sortstop",function(event,ui){var itemIndex,itemUs,newStatusId,oldStatusId,parentEl;return parentEl=ui.item.parent(),itemEl=ui.item,itemUs=itemEl.scope().us,itemIndex=itemEl.index(),newParentScope=parentEl.scope(),newStatusId=newParentScope.s.id,oldStatusId=oldParentScope.s.id,newStatusId!==oldStatusId&&deleteElement(itemEl),$scope.$apply(function(){return $rootscope.$broadcast("kanban:us:move",itemUs,itemUs.status,newStatusId,itemIndex)}),ui.item.find("a").removeClass("noclick")}),tdom.on("sortstart",function(event,ui){return oldParentScope=ui.item.parent().scope(),ui.item.find("a").addClass("noclick")})}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgKanbanSortable",["$tgRepo","$tgResources","$rootScope",KanbanSortableDirective])}.call(this),function(){var IssueDetailController,IssuePriorityButtonDirective,IssueSeverityButtonDirective,IssueStatusButtonDirective,IssueStatusDisplayDirective,IssueTypeButtonDirective,PromoteIssueToUsButtonDirective,bindOnce,groupBy,joinStr,mixOf,module,taiga,toString,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,toString=this.taiga.toString,joinStr=this.taiga.joinStr,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,module=angular.module("taigaIssues"),IssueDetailController=function(_super){function IssueDetailController(scope,rootscope,repo,confirm,rs,params,q,location,log,appTitle,analytics,navUrls,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.log=log,this.appTitle=appTitle,this.analytics=analytics,this.navUrls=navUrls,this.scope.issueRef=this.params.issueref,this.scope.sectionName="Issue Details",this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set(_this.scope.issue.subject+" - "+_this.scope.project.name),_this.initializeOnDeleteGoToUrl()}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(IssueDetailController,_super),IssueDetailController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","$appTitle","$tgAnalytics","$tgNavUrls","tgLoader"],IssueDetailController.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(_this){return function(){return _this.rootscope.$broadcast("history:reload"),_this.analytics.trackEvent("attachment","create","create attachment on issue",1)}}(this)),this.scope.$on("attachment:edit",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("attachment:delete",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("promote-issue-to-us:success",function(_this){return function(){return _this.analytics.trackEvent("issue","promoteToUserstory","promote issue to userstory",1),_this.rootscope.$broadcast("history:reload"),_this.loadIssue()}}(this))},IssueDetailController.prototype.initializeOnDeleteGoToUrl=function(){var ctx;return ctx={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.scope.project.is_issues_activated?this.navUrls.resolve("project-issues",ctx):this.navUrls.resolve("project",ctx)},IssueDetailController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.statusList=project.issue_statuses,_this.scope.statusById=groupBy(project.issue_statuses,function(x){return x.id}),_this.scope.typeById=groupBy(project.issue_types,function(x){return x.id}),_this.scope.typeList=_.sortBy(project.issue_types,"order"),_this.scope.severityList=project.severities,_this.scope.severityById=groupBy(project.severities,function(x){return x.id}),_this.scope.priorityList=project.priorities,_this.scope.priorityById=groupBy(project.priorities,function(x){return x.id}),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),project}}(this))},IssueDetailController.prototype.loadIssue=function(){return this.rs.issues.getByRef(this.scope.projectId,this.params.issueref).then(function(_this){return function(issue){var ctx;return _this.scope.issue=issue,_this.scope.issueId=issue.id,_this.scope.commentModel=issue,null!=_this.scope.issue.neighbors.previous.ref&&(ctx={project:_this.scope.project.slug,ref:_this.scope.issue.neighbors.previous.ref},_this.scope.previousUrl=_this.navUrls.resolve("project-issues-detail",ctx)),null!=_this.scope.issue.neighbors.next.ref?(ctx={project:_this.scope.project.slug,ref:_this.scope.issue.neighbors.next.ref},_this.scope.nextUrl=_this.navUrls.resolve("project-issues-detail",ctx)):void 0}}(this))},IssueDetailController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.loadIssue()}}(this))},IssueDetailController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("IssueDetailController",IssueDetailController),IssueStatusDisplayDirective=function(){var link,template;return template=_.template('\n <% if (status.is_closed) { %>\n Closed\n <% } else { %>\n Open\n <% } %>\n\n\n <%- status.name %>\n'),link=function($scope,$el,$attrs){var render;return render=function(issue){var html;return html=template({status:$scope.statusById[issue.status]}),$el.html(html)},$scope.$watch($attrs.ngModel,function(issue){return null!=issue?render(issue):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgIssueStatusDisplay",IssueStatusDisplayDirective),IssueStatusButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- status.name %>\n <% if(editable){ %><% }%>\n status\n\n
      \n <% _.each(statuses, function(st) { %>\n
    • <%- st.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_issue")},render=function(){return function(issue){var html,status;return status=$scope.statusById[issue.status],html=template({status:status,statuses:$scope.statusList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(value,issue){var onError,onSuccess;return onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),issue.revert(),$model.$setViewValue(issue),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save(value).then(onSuccess,onError)}}(this)),$el.on("click",".status-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-status").popover().open():void 0}),$el.on("click",".status",function(event){var issue,target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),$.fn.popover().closeAll(),issue=$model.$modelValue.clone(),issue.status=target.data("status-id"),$model.$setViewValue(issue),save($model.$modelValue,issue)):void 0}),$scope.$watch($attrs.ngModel,function(issue){return issue?render(issue):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgIssueStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",IssueStatusButtonDirective]),IssueTypeButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- type.name %>\n <% if(editable){ %><% }%>\n type\n\n
      \n <% _.each(typees, function(tp) { %>\n
    • <%- tp.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save; +return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_issue")},render=function(){return function(issue){var html,type;return type=$scope.typeById[issue.type],html=template({type:type,typees:$scope.typeList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(type){var issue,onError,onSuccess;return $.fn.popover().closeAll(),issue=$model.$modelValue.clone(),issue.type=type,$model.$setViewValue(issue),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),issue.revert(),$model.$setViewValue(issue),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".type-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-type").popover().open():void 0}),$el.on("click",".type",function(event){var target,type;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),type=target.data("type-id"),save(type)):void 0}),$scope.$watch($attrs.ngModel,function(issue){return issue?render(issue):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgIssueTypeButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",IssueTypeButtonDirective]),IssueSeverityButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- severity.name %>\n <% if(editable){ %><% }%>\n severity\n\n
      \n <% _.each(severityes, function(sv) { %>\n
    • <%- sv.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_issue")},render=function(){return function(issue){var html,severity;return severity=$scope.severityById[issue.severity],html=template({severity:severity,severityes:$scope.severityList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(severity){var issue,onError,onSuccess;return $.fn.popover().closeAll(),issue=$model.$modelValue.clone(),issue.severity=severity,$model.$setViewValue(issue),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),issue.revert(),$model.$setViewValue(issue),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".severity-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-severity").popover().open():void 0}),$el.on("click",".severity",function(event){var severity,target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),severity=target.data("severity-id"),save(severity)):void 0}),$scope.$watch($attrs.ngModel,function(issue){return issue?render(issue):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgIssueSeverityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",IssueSeverityButtonDirective]),IssuePriorityButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- priority.name %>\n <% if(editable){ %><% }%>\n priority\n\n
      \n <% _.each(priorityes, function(pr) { %>\n
    • <%- pr.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_issue")},render=function(){return function(issue){var html,priority;return priority=$scope.priorityById[issue.priority],html=template({priority:priority,priorityes:$scope.priorityList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(priority){var issue,onError,onSuccess;return $.fn.popover().closeAll(),issue=$model.$modelValue.clone(),issue.priority=priority,$model.$setViewValue(issue),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),issue.revert(),$model.$setViewValue(issue),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".priority-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-priority").popover().open():void 0}),$el.on("click",".priority",function(event){var priority,target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),priority=target.data("priority-id"),save(priority)):void 0}),$scope.$watch($attrs.ngModel,function(issue){return issue?render(issue):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgIssuePriorityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",IssuePriorityButtonDirective]),PromoteIssueToUsButtonDirective=function($rootScope,$repo,$confirm,$qqueue){var link,template;return template=_.template('\n Promote to User Story\n'),link=function($scope,$el,$attrs,$model){var save;return save=$qqueue.bindAdd(function(){return function(issue,finish){var data,onError,onSuccess;return data={generated_from_issue:issue.id,project:issue.project,subject:issue.subject,description:issue.description,tags:issue.tags,is_blocked:issue.is_blocked,blocked_note:issue.blocked_note},onSuccess=function(){return finish(),$confirm.notify("success"),$rootScope.$broadcast("promote-issue-to-us:success")},onError=function(){return finish(!1),$confirm.notify("error")},$repo.create("userstories",data).then(onSuccess,onError)}}(this)),$el.on("click","a",function(event){var issue,message,subtitle,title;return event.preventDefault(),issue=$model.$modelValue,title="Promote this issue to a new user story",message="Are you sure you want to create a new US from this Issue?",subtitle=issue.subject,$confirm.ask(title,subtitle,message).then(function(){return function(finish){return save(issue,finish)}}(this))}),$scope.$on("$destroy",function(){return $el.off()})},{restrict:"AE",require:"ngModel",template:template,link:link}},module.directive("tgPromoteIssueToUsButton",["$rootScope","$tgRepo","$tgConfirm","$tgQqueue",PromoteIssueToUsButtonDirective])}.call(this),function(){var CreateBulkIssuesDirective,CreateIssueDirective,bindOnce,debounce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaIssues"),CreateIssueDirective=function($repo,$confirm,$rootscope,lightboxService,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley(),$scope.issue={},$scope.$on("issueform:new",function(ctx,project){return $el.find(".tag-input").val(""),lightboxService.open($el),$scope.issue={project:project.id,subject:"",status:project.default_issue_status,type:project.default_issue_type,priority:project.default_priority,severity:project.default_severity,tags:[]}}),$scope.$on("$destroy",function(){return $el.off()}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.create("issues",$scope.issue),promise.then(function(data){return $loading.finish(submitButton),$rootscope.$broadcast("issueform:new:success",data),lightboxService.close($el),$confirm.notify("success")}),promise.then(null,function(){return $loading.finish(submitButton),$confirm.notify("error")})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgLbCreateIssue",["$tgRepo","$tgConfirm","$rootScope","lightboxService","$tgLoading",CreateIssueDirective]),CreateBulkIssuesDirective=function($repo,$rs,$confirm,$rootscope,$loading,lightboxService){var link;return link=function($scope,$el){var submit,submitButton;return $scope.$on("issueform:bulk",function(ctx,projectId){return lightboxService.open($el),$scope["new"]={projectId:projectId,bulk:""}}),submit=debounce(2e3,function(){return function(event){var data,form,projectId,promise;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?($loading.start(submitButton),data=$scope["new"].bulk,projectId=$scope["new"].projectId,promise=$rs.issues.bulkCreate(projectId,data),promise.then(function(result){return $loading.finish(submitButton),$rootscope.$broadcast("issueform:new:success",result),lightboxService.close($el),$confirm.notify("success")}),promise.then(null,function(){return $loading.finish(submitButton),$confirm.notify("error")})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgLbCreateBulkIssues",["$tgRepo","$tgResources","$tgConfirm","$rootScope","$tgLoading","lightboxService",CreateBulkIssuesDirective])}.call(this),function(){var IssueAssignedToInlineEditionDirective,IssueStatusInlineEditionDirective,IssuesController,IssuesDirective,IssuesFiltersDirective,bindOnce,debounceLeading,groupBy,joinStr,mixOf,module,paginatorTemplate,startswith,taiga,toString,trim,__bind=function(fn,me){return function(){return fn.apply(me,arguments)}},__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,trim=this.taiga.trim,toString=this.taiga.toString,joinStr=this.taiga.joinStr,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,debounceLeading=this.taiga.debounceLeading,startswith=this.taiga.startswith,module=angular.module("taigaIssues"),IssuesController=function(_super){function IssuesController(scope,rootscope,repo,confirm,rs,urls,params,q,location,appTitle,navUrls,events,analytics,tgLoader){var filters,promise;return this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.urls=urls,this.params=params,this.q=q,this.location=location,this.appTitle=appTitle,this.navUrls=navUrls,this.events=events,this.analytics=analytics,this.loadIssues=__bind(this.loadIssues,this),this.scope.sectionName="Issues",this.scope.filters={},_.isEmpty(this.location.search())?(filters=this.rs.issues.getFilters(this.params.pslug),filters.page=1,this.location.search(filters),void this.location.replace()):(promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Issues - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded),void this.scope.$on("issueform:new:success",function(_this){return function(){return _this.analytics.trackEvent("issue","create","create issue on issues list",1),_this.loadIssues(),_this.loadFilters()}}(this)))}return __extends(IssuesController,_super),IssuesController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$tgUrls","$routeParams","$q","$tgLocation","$appTitle","$tgNavUrls","$tgEvents","$tgAnalytics","tgLoader"],IssuesController.prototype.initializeSubscription=function(){var routingKey;return routingKey="changes.project."+this.scope.projectId+".issues",this.events.subscribe(this.scope,routingKey,function(_this){return function(){return _this.loadIssues()}}(this))},IssuesController.prototype.storeFilters=function(){return this.rs.issues.storeFilters(this.params.pslug,this.location.search())},IssuesController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.issueStatusById=groupBy(project.issue_statuses,function(x){return x.id}),_this.scope.issueStatusList=_.sortBy(project.issue_statuses,"order"),_this.scope.severityById=groupBy(project.severities,function(x){return x.id}),_this.scope.severityList=_.sortBy(project.severities,"order"),_this.scope.priorityById=groupBy(project.priorities,function(x){return x.id}),_this.scope.priorityList=_.sortBy(project.priorities,"order"),_this.scope.issueTypes=_.sortBy(project.issue_types,"order"),_this.scope.issueTypeById=groupBy(project.issue_types,function(x){return x.id}),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),project}}(this))},IssuesController.prototype.getUrlFilters=function(){var filters;return filters=_.pick(this.location.search(),"page","tags","statuses","types","q","severities","priorities","assignedTo","createdBy","orderBy"),filters.page||(filters.page=1),filters},IssuesController.prototype.getUrlFilter=function(name){var filters;return filters=_.pick(this.location.search(),name),filters[name]},IssuesController.prototype.loadMyFilters=function(){return this.rs.issues.getMyFilters(this.scope.projectId).then(function(){return function(filters){return _.map(filters,function(value,key){return{id:key,name:key,type:"myFilters",selected:!1}})}}(this))},IssuesController.prototype.removeNotExistingFiltersFromUrl=function(){var currentSearch,existingValues,filterName,filterValue,splittedValues,urlfilters;currentSearch=this.location.search(),urlfilters=this.getUrlFilters();for(filterName in urlfilters)filterValue=urlfilters[filterName],"page"!==filterName&&"orderBy"!==filterName&&"q"!==filterName&&(splittedValues="tags"===filterName?_.map((""+filterValue).split(",")):_.map((""+filterValue).split(","),function(x){return"null"===x?null:parseInt(x)}),existingValues=_.intersection(splittedValues,_.map(this.scope.filters[filterName],"id")),splittedValues.length!==existingValues.length&&this.location.search(filterName,existingValues.join()));return currentSearch!==this.location.search()?this.location.replace():void 0},IssuesController.prototype.markSelectedFilters=function(filters,urlfilters){var isSelected,key,name,obj,searchdata,val,value,_i,_len,_ref,_ref1,_results;searchdata={},_ref=_.omit(urlfilters,"page","orderBy");for(name in _ref)for(value=_ref[name],null==searchdata[name]&&(searchdata[name]={}),_ref1=(""+value).split(","),_i=0,_len=_ref1.length;_len>_i;_i++)val=_ref1[_i],searchdata[name][val]=!0;isSelected=function(type,id){return null!=searchdata[type]&&searchdata[type][id]?!0:!1},_results=[];for(key in filters)value=filters[key],_results.push(function(){var _j,_len1,_results1;for(_results1=[],_j=0,_len1=value.length;_len1>_j;_j++)obj=value[_j],_results1.push(obj.selected=isSelected(obj.type,obj.id)?!0:void 0);return _results1}());return _results},IssuesController.prototype.loadFilters=function(){var promise,urlfilters;return urlfilters=this.getUrlFilters(),urlfilters.q&&(this.scope.filtersQ=urlfilters.q),promise=this.loadMyFilters().then(function(_this){return function(myFilters){return _this.scope.filters.myFilters=myFilters,myFilters}}(this)),promise=promise.then(function(_this){return function(){return _this.rs.issues.filtersData(_this.scope.projectId)}}(this)),promise.then(function(_this){return function(data){var choicesFiltersFormat,tagsFilterFormat,usersFiltersFormat;return usersFiltersFormat=function(users,type,unknownOption){var reformatedUsers,unknownItem;return reformatedUsers=_.map(users,function(t){return{id:t[0],count:t[1],type:type,name:t[0]?_this.scope.usersById[t[0]].full_name_display:unknownOption}}),unknownItem=_.remove(reformatedUsers,function(u){return!u.id}),reformatedUsers=_.sortBy(reformatedUsers,function(u){return u.name.toUpperCase()}),unknownItem.length>0&&reformatedUsers.unshift(unknownItem[0]),reformatedUsers},choicesFiltersFormat=function(choices,type,byIdObject){return _.map(choices,function(t){return{id:t[0],name:byIdObject[t[0]].name,color:byIdObject[t[0]].color,count:t[1],type:type}})},tagsFilterFormat=function(tags){return _.map(tags,function(t){return{id:t[0],name:t[0],color:_this.scope.project.tags_colors[t[0]],count:t[1],type:"tags"}})},_this.scope.filters.statuses=choicesFiltersFormat(data.statuses,"statuses",_this.scope.issueStatusById),_this.scope.filters.severities=choicesFiltersFormat(data.severities,"severities",_this.scope.severityById),_this.scope.filters.priorities=choicesFiltersFormat(data.priorities,"priorities",_this.scope.priorityById),_this.scope.filters.assignedTo=usersFiltersFormat(data.assigned_to,"assignedTo","Unassigned"),_this.scope.filters.createdBy=usersFiltersFormat(data.created_by,"createdBy","Unknown"),_this.scope.filters.types=choicesFiltersFormat(data.types,"types",_this.scope.issueTypeById),_this.scope.filters.tags=tagsFilterFormat(data.tags),_this.removeNotExistingFiltersFromUrl(),_this.markSelectedFilters(_this.scope.filters,urlfilters),_this.rootscope.$broadcast("filters:loaded",_this.scope.filters)}}(this))},IssuesController.prototype.loadIssuesRequests=0,IssuesController.prototype.loadIssues=function(){var name,promise,values,_ref;this.scope.urlFilters=this.getUrlFilters(),this.scope.httpParams={},_ref=this.scope.urlFilters;for(name in _ref)values=_ref[name],"severities"===name?name="severity":"orderBy"===name?name="order_by":"priorities"===name?name="priority":"assignedTo"===name?name="assigned_to":"createdBy"===name?name="owner":"statuses"===name?name="status":"types"===name&&(name="type"),this.scope.httpParams[name]=values;return promise=this.rs.issues.list(this.scope.projectId,this.scope.httpParams),this.loadIssuesRequests+=1,promise.index=this.loadIssuesRequests,promise.then(function(_this){return function(data){return promise.index===_this.loadIssuesRequests&&(_this.scope.issues=data.models,_this.scope.page=data.current,_this.scope.count=data.count,_this.scope.paginatedBy=data.paginatedBy),data}}(this))},IssuesController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.initializeSubscription(),_this.q.all([_this.loadFilters(),_this.loadIssues()])}}(this))},IssuesController.prototype.saveCurrentFiltersTo=function(newFilter){var deferred;return deferred=this.q.defer(),this.rs.issues.getMyFilters(this.scope.projectId).then(function(_this){return function(filters){return filters[newFilter]=_this.location.search(),_this.rs.issues.storeMyFilters(_this.scope.projectId,filters).then(function(){return deferred.resolve()})}}(this)),deferred.promise},IssuesController.prototype.deleteMyFilter=function(filter){var deferred;return deferred=this.q.defer(),this.rs.issues.getMyFilters(this.scope.projectId).then(function(_this){return function(filters){return delete filters[filter],_this.rs.issues.storeMyFilters(_this.scope.projectId,filters).then(function(){return deferred.resolve()})}}(this)),deferred.promise},IssuesController.prototype.addNewIssue=function(){return this.rootscope.$broadcast("issueform:new",this.scope.project)},IssuesController.prototype.addIssuesInBulk=function(){return this.rootscope.$broadcast("issueform:bulk",this.scope.projectId)},IssuesController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("IssuesController",IssuesController),paginatorTemplate='
      \n <% if (showPrevious) { %>\n \n <% } %>\n\n <% _.each(pages, function(item) { %>\n
    • \n <% if (item.type === "page") { %>\n <%- item.num %>\n <% } else if (item.type === "page-active") { %>\n <%- item.num %>\n <% } else { %>\n ...\n <% } %>\n
    • \n <% }); %>\n\n <% if (showNext) { %>\n \n <% } %>\n
    ',IssuesDirective=function(){var link,linkOrdering,linkPagination,template;return template=_.template(paginatorTemplate),linkPagination=function($scope,$el,$attrs,$ctrl){var $pagEl,afterCurrent,atBegin,atEnd,beforeCurrent,getNumPages,renderPagination;return afterCurrent=2,beforeCurrent=4,atBegin=2,atEnd=2,$pagEl=$el.find(".issues-paginator"),getNumPages=function(){var numPages;return numPages=$scope.count/$scope.paginatedBy,numPages=parseInt(numPages,10)=numPages)return void $pagEl.hide();for($pagEl.show(),pages=[],options={},options.pages=pages,options.showPrevious=$scope.page>1,options.showNext=!($scope.page===numPages),cpage=$scope.page,i=_i=1;numPages>=1?numPages>=_i:_i>=numPages;i=numPages>=1?++_i:--_i)i===cpage+afterCurrent&&numPages>cpage+afterCurrent+atEnd?pages.push({classes:"dots",type:"dots"}):i===cpage-beforeCurrent&&cpage>atBegin+beforeCurrent?pages.push({classes:"dots",type:"dots"}):i>cpage+afterCurrent&&numPages-atEnd>=i||cpage-beforeCurrent>i&&i>atBegin||pages.push(i===cpage?{classes:"active",num:i,type:"page-active"}:{classes:"page",num:i,type:"page"});return $pagEl.html(template(options))},$scope.$watch("issues",function(value){return value?renderPagination():void 0}),$el.on("click",".issues-paginator a.next",function(event){return event.preventDefault(),$scope.$apply(function(){return $ctrl.selectFilter("page",$scope.page+1),$ctrl.loadIssues()})}),$el.on("click",".issues-paginator a.previous",function(event){return event.preventDefault(),$scope.$apply(function(){return $ctrl.selectFilter("page",$scope.page-1),$ctrl.loadIssues()})}),$el.on("click",".issues-paginator li.page > a",function(event){var pagenum,target;return event.preventDefault(),target=angular.element(event.currentTarget),pagenum=target.data("pagenum"),$scope.$apply(function(){return $ctrl.selectFilter("page",pagenum),$ctrl.loadIssues()})})},linkOrdering=function($scope,$el,$attrs,$ctrl){var colHeadElement,currentOrder,icon;return currentOrder=$ctrl.getUrlFilter("orderBy")||"created_date",currentOrder&&(icon=startswith(currentOrder,"-")?"icon-caret-up":"icon-caret-down",colHeadElement=$el.find(".row.title > div[data-fieldname='"+trim(currentOrder,"-")+"']"),colHeadElement.html(""+colHeadElement.html()+"")),$el.on("click",".row.title > div",function(event){var finalOrder,newOrder,target;return target=angular.element(event.currentTarget),currentOrder=$ctrl.getUrlFilter("orderBy"),newOrder=target.data("fieldname"),finalOrder=currentOrder===newOrder?"-"+newOrder:newOrder,$scope.$apply(function(){return $ctrl.replaceFilter("orderBy",finalOrder),$ctrl.storeFilters(),$ctrl.loadIssues().then(function(){return $el.find(".row.title > div > span.icon").remove(),icon=startswith(finalOrder,"-")?"icon-caret-up":"icon-caret-down",target.html(""+target.html()+"")})})})},link=function($scope,$el,$attrs){var $ctrl;return $ctrl=$el.controller(),linkOrdering($scope,$el,$attrs,$ctrl),linkPagination($scope,$el,$attrs,$ctrl),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgIssues",["$log","$tgLocation",IssuesDirective]),IssuesFiltersDirective=function($log,$location,$rs,$confirm,$loading){var link,template,templateSelected;return template=_.template('<% _.each(filters, function(f) { %>\n <% if (!f.selected) { %>\n \n style="border-left: 3px solid <%- f.color %>;"<% } %>>\n <%- f.name %>\n \n <% if (f.count){ %>\n <%- f.count %>\n <% } %>\n <% if (f.type == "myFilters"){ %>\n \n <% } %>\n \n <% } %>\n<% }) %>\n\n \n'),templateSelected=_.template('<% _.each(filters, function(f) { %>\n\n style="border-left: 3px solid <%- f.color %>;"<% } %>>\n <%- f.name %>\n \n \n\n<% }) %>'),link=function($scope,$el){var $ctrl,initializeSelectedFilters,renderFilters,renderSelectedFilters,selectQFilter,selectedFilters,showCategories,showFilters,toggleFilterSelection;return $ctrl=$el.closest(".wrapper").controller(),selectedFilters=[],showFilters=function(title,type){return $el.find(".filters-cats").hide(),$el.find(".filter-list").removeClass("hidden"),$el.find("h2.breadcrumb").removeClass("hidden"),$el.find("h2 a.subfilter span.title").html(title),$el.find("h2 a.subfilter span.title").prop("data-type",type)},showCategories=function(){return $el.find(".filters-cats").show(),$el.find(".filter-list").addClass("hidden"),$el.find("h2.breadcrumb").addClass("hidden")},initializeSelectedFilters=function(filters){var name,val,values,_i,_len;selectedFilters=[];for(name in filters)for(values=filters[name],_i=0,_len=values.length;_len>_i;_i++)val=values[_i],val.selected&&selectedFilters.push(val);return renderSelectedFilters(selectedFilters)},renderSelectedFilters=function(selectedFilters){var html;return html=templateSelected({filters:selectedFilters}),$el.find(".filters-applied").html(html),selectedFilters.length>0?$el.find(".save-filters").show():$el.find(".save-filters").hide()},renderFilters=function(filters){var html;return html=template({filters:filters}),$el.find(".filter-list").html(html)},toggleFilterSelection=function(type,id){var currentFiltersType,filter,filterId,filters;return"myFilters"===type?($rs.issues.getMyFilters($scope.projectId).then(function(data){var filters,myFilters;return myFilters=data,filters=myFilters[id],filters.page=1,$ctrl.replaceAllFilters(filters),$ctrl.storeFilters(),$ctrl.loadIssues(),$ctrl.markSelectedFilters($scope.filters,filters),initializeSelectedFilters($scope.filters)}),null):(filters=$scope.filters[type],filterId="tags"===type?taiga.toString(id):id,filter=_.find(filters,{id:filterId}),filter.selected=!filter.selected,null===id&&(id="null"),filter.selected?(selectedFilters.push(filter),$scope.$apply(function(){return $ctrl.selectFilter(type,id),$ctrl.selectFilter("page",1),$ctrl.storeFilters(),$ctrl.loadIssues()})):(selectedFilters=_.reject(selectedFilters,filter),$scope.$apply(function(){return $ctrl.unselectFilter(type,id),$ctrl.selectFilter("page",1),$ctrl.storeFilters(),$ctrl.loadIssues()})),renderSelectedFilters(selectedFilters),currentFiltersType=$el.find("h2 a.subfilter span.title").prop("data-type"),type===currentFiltersType?renderFilters(_.reject(filters,"selected")):void 0)},$scope.$on("filters:loaded",function(ctx,filters){return initializeSelectedFilters(filters)}),selectQFilter=debounceLeading(100,function(value){return void 0!==value?(0===value.length?($ctrl.replaceFilter("q",null),$ctrl.storeFilters()):($ctrl.replaceFilter("q",value),$ctrl.storeFilters()),$ctrl.loadIssues()):void 0}),$scope.$watch("filtersQ",selectQFilter),$el.on("click",".filters-cats > ul > li > a",function(event){var tags,target;return event.preventDefault(),target=angular.element(event.currentTarget),tags=$scope.filters[target.data("type")],renderFilters(_.reject(tags,"selected")),showFilters(target.attr("title"),target.data("type"))}),$el.on("click",".filters-inner > .filters-step-cat > .breadcrumb > .back",function(event){return event.preventDefault(),showCategories($el)}),$el.on("click",".filters-applied a",function(event){var id,target,type;return event.preventDefault(),target=angular.element(event.currentTarget),id=target.data("id")||null,type=target.data("type"),toggleFilterSelection(type,id)}),$el.on("click",".filter-list .single-filter",function(event){var id,target,type;return event.preventDefault(),target=angular.element(event.currentTarget),target.toggleClass("active"),id=target.data("id")||null,type=target.data("type"),"myFilters"===type&&target.removeClass("active"),toggleFilterSelection(type,id)}),$el.on("click",".filter-list .single-filter .icon-delete",function(event){var customFilterName,message,target,title;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),customFilterName=target.parent().data("id"),title="Delete custom filter",message="the custom filter '"+customFilterName+"'",$confirm.askOnDelete(title,message).then(function(finish){var promise;return promise=$ctrl.deleteMyFilter(customFilterName),promise.then(function(){return promise=$ctrl.loadMyFilters(),promise.then(function(filters){return finish(),$scope.filters.myFilters=filters,renderFilters($scope.filters.myFilters)}),promise.then(null,function(){return finish()})}),promise.then(null,function(){return finish(!1),$confirm.notify("error")})})}),$el.on("click",".save-filters",function(event){return event.preventDefault(),renderFilters($scope.filters.myFilters),showFilters("My filters","myFilters"),$el.find(".save-filters").hide(),$el.find(".my-filter-name").removeClass("hidden"),$el.find(".my-filter-name").focus()}),$el.on("keyup",".new .my-filter-name",function(event){var newFilter,promise,target;return event.preventDefault(),13===event.keyCode?(target=angular.element(event.currentTarget),newFilter=target.val(),$loading.start($el.find(".new")),promise=$ctrl.saveCurrentFiltersTo(newFilter),promise.then(function(){var loadPromise;return loadPromise=$ctrl.loadMyFilters(),loadPromise.then(function(filters){var currentfilterstype;return $loading.finish($el.find(".new")),$scope.filters.myFilters=filters,currentfilterstype=$el.find("h2 a.subfilter span.title").prop("data-type"),"myFilters"===currentfilterstype&&renderFilters($scope.filters.myFilters),$el.find(".my-filter-name").addClass("hidden"),$el.find(".save-filters").show()}),loadPromise.then(null,function(){return $loading.finish($el.find(".new")),$confirm.notify("error","Error loading custom filters")})}),promise.then(null,function(){return $loading.finish($el.find(".new")),$el.find(".my-filter-name").val(newFilter).focus().select(),$confirm.notify("error","Filter not saved") +})):27===event.keyCode?($el.find(".my-filter-name").val(""),$el.find(".my-filter-name").addClass("hidden"),$el.find(".save-filters").show()):void 0})},{link:link}},module.directive("tgIssuesFilters",["$log","$tgLocation","$tgResources","$tgConfirm","$tgLoading",IssuesFiltersDirective]),IssueStatusInlineEditionDirective=function($repo){var link,selectionTemplate,updateIssueStatus;return selectionTemplate=_.template(''),updateIssueStatus=function($el,issue,issueStatusById){var issueStatusDom,issueStatusDomParent,status;return issueStatusDomParent=$el.find(".issue-status"),issueStatusDom=$el.find(".issue-status .issue-status-bind"),status=issueStatusById[issue.status],status?(issueStatusDom.text(status.name),issueStatusDom.prop("title",status.name),issueStatusDomParent.css("color",status.color)):void 0},link=function($scope,$el,$attrs){var $ctrl,issue;return $ctrl=$el.controller(),issue=$scope.$eval($attrs.tgIssueStatusInlineEdition),$el.on("click",".issue-status",function(event){return event.preventDefault(),event.stopPropagation(),$el.find(".pop-status").popover().open()}),$el.on("click",".status",function(event){var target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),issue.status=target.data("status-id"),$el.find(".pop-status").popover().close(),updateIssueStatus($el,issue,$scope.issueStatusById),$scope.$apply(function(){return $repo.save(issue).then})}),taiga.bindOnce($scope,"project",function(project){return $el.append(selectionTemplate({statuses:project.issue_statuses})),updateIssueStatus($el,issue,$scope.issueStatusById),-1===project.my_permissions.indexOf("modify_issue")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0}),$scope.$watch($attrs.tgIssueStatusInlineEdition,function(){return function(val){return updateIssueStatus($el,val,$scope.issueStatusById)}}(this)),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgIssueStatusInlineEdition",["$tgRepo",IssueStatusInlineEditionDirective]),IssueAssignedToInlineEditionDirective=function($repo,$rootscope){var link,template;return template=_.template('<%- name %>\n
    <%- name %>
    '),link=function($scope,$el,$attrs){var $ctrl,issue,updateIssue;return updateIssue=function(issue){var ctx,member;return ctx={name:"Unassigned",imgurl:"/images/unnamed.png"},member=$scope.usersById[issue.assigned_to],member&&(ctx.imgurl=member.photo,ctx.name=member.full_name_display),$el.find(".avatar").html(template(ctx)),$el.find(".issue-assignedto").attr("title",ctx.name)},$ctrl=$el.controller(),issue=$scope.$eval($attrs.tgIssueAssignedToInlineEdition),updateIssue(issue),$el.on("click",".issue-assignedto",function(){return $rootscope.$broadcast("assigned-to:add",issue)}),taiga.bindOnce($scope,"project",function(project){return-1===project.my_permissions.indexOf("modify_issue")?($el.unbind("click"),$el.find("a").addClass("not-clickable")):void 0}),$scope.$on("assigned-to:added",function(){return function(ctx,userId,updatedIssue){return updatedIssue.id===issue.id?(updatedIssue.assigned_to=userId,$repo.save(updatedIssue),updateIssue(updatedIssue)):void 0}}(this)),$scope.$watch($attrs.tgIssueAssignedToInlineEdition,function(){return function(val){return updateIssue(val)}}(this)),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgIssueAssignedToInlineEdition",["$tgRepo","$rootScope",IssueAssignedToInlineEditionDirective])}.call(this),function(){var UsClientRequirementButtonDirective,UsStatusButtonDirective,UsStatusDisplayDirective,UsTasksProgressDisplayDirective,UsTeamRequirementButtonDirective,UserStoryDetailController,bindOnce,groupBy,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,module=angular.module("taigaUserStories"),UserStoryDetailController=function(_super){function UserStoryDetailController(scope,rootscope,repo,confirm,rs,params,q,location,log,appTitle,navUrls,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.log=log,this.appTitle=appTitle,this.navUrls=navUrls,this.analytics=analytics,this.scope.usRef=this.params.usref,this.scope.sectionName="User Story Details",this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set(_this.scope.us.subject+" - "+_this.scope.project.name),_this.initializeOnDeleteGoToUrl()}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(UserStoryDetailController,_super),UserStoryDetailController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","$appTitle","$tgNavUrls","$tgAnalytics","tgLoader"],UserStoryDetailController.prototype.initializeEventHandlers=function(){return this.scope.$on("related-tasks:update",function(_this){return function(){return _this.loadUs(),_this.scope.tasks=_.clone(_this.scope.tasks,!1)}}(this)),this.scope.$on("attachment:create",function(_this){return function(){return _this.analytics.trackEvent("attachment","create","create attachment on userstory",1),_this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("attachment:edit",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("attachment:delete",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this))},UserStoryDetailController.prototype.initializeOnDeleteGoToUrl=function(){var ctx;return ctx={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",ctx),this.scope.project.is_backlog_activated?this.scope.us.milestone?(ctx.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",ctx)):this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-backlog",ctx):this.scope.project.is_kanban_activated?this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-kanban",ctx):void 0},UserStoryDetailController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.statusList=project.us_statuses,_this.scope.statusById=groupBy(project.us_statuses,function(x){return x.id}),_this.scope.taskStatusById=groupBy(project.task_statuses,function(x){return x.id}),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),_this.scope.pointsList=_.sortBy(project.points,"order"),_this.scope.pointsById=groupBy(_this.scope.pointsList,function(e){return e.id}),project}}(this))},UserStoryDetailController.prototype.loadUs=function(){return this.rs.userstories.getByRef(this.scope.projectId,this.params.usref).then(function(_this){return function(us){var ctx;return _this.scope.us=us,_this.scope.usId=us.id,_this.scope.commentModel=us,null!=_this.scope.us.neighbors.previous.ref&&(ctx={project:_this.scope.project.slug,ref:_this.scope.us.neighbors.previous.ref},_this.scope.previousUrl=_this.navUrls.resolve("project-userstories-detail",ctx)),null!=_this.scope.us.neighbors.next.ref&&(ctx={project:_this.scope.project.slug,ref:_this.scope.us.neighbors.next.ref},_this.scope.nextUrl=_this.navUrls.resolve("project-userstories-detail",ctx)),us}}(this))},UserStoryDetailController.prototype.loadSprint=function(){return this.scope.us.milestone?this.rs.sprints.get(this.scope.us.project,this.scope.us.milestone).then(function(_this){return function(sprint){return _this.scope.sprint=sprint,sprint}}(this)):void 0},UserStoryDetailController.prototype.loadTasks=function(){return this.rs.tasks.list(this.scope.projectId,null,this.scope.usId).then(function(_this){return function(tasks){return _this.scope.tasks=tasks,tasks}}(this))},UserStoryDetailController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.loadUs().then(function(){return _this.q.all([_this.loadSprint(),_this.loadTasks()])})}}(this))},UserStoryDetailController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("UserStoryDetailController",UserStoryDetailController),UsStatusDisplayDirective=function(){var link,template;return template=_.template('\n <% if (is_closed) { %>\n Closed\n <% } else { %>\n Open\n <% } %>\n\n\n <%- status.name %>\n'),link=function($scope,$el,$attrs){var render;return render=function(us){var html;return html=template({is_closed:us.is_closed,status:$scope.statusById[us.status]}),$el.html(html)},$scope.$watch($attrs.ngModel,function(us){return null!=us?render(us):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsStatusDisplay",UsStatusDisplayDirective),UsTasksProgressDisplayDirective=function(){var link,template;return template=_.template('
    \n\n <%- totalClosedTasks %>/<%- totalTasks %> tasks completed\n'),link=function($scope,$el,$attrs){var render;return render=function(tasks){var html,progress,totalClosedTasks,totalTasks;return totalTasks=tasks.length,totalClosedTasks=_.filter(tasks,function(){return function(task){return $scope.taskStatusById[task.status].is_closed}}(this)).length,progress=totalTasks>0?100*totalClosedTasks/totalTasks:0,html=template({totalTasks:totalTasks,totalClosedTasks:totalClosedTasks,progress:progress}),$el.html(html)},$scope.$watch($attrs.ngModel,function(tasks){return null!=tasks?render(tasks):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsTasksProgressDisplay",UsTasksProgressDisplayDirective),UsStatusButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- status.name %>\n <% if(editable){ %><% }%>\n status\n\n
      \n <% _.each(statuses, function(st) { %>\n
    • <%- st.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_us")},render=function(){return function(us){var html,status;return status=$scope.statusById[us.status],html=template({status:status,statuses:$scope.statusList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(status){var onError,onSuccess,us;return us=$model.$modelValue.clone(),us.status=status,$.fn.popover().closeAll(),$model.$setViewValue(us),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),us.revert(),$model.$setViewValue(us),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".status-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-status").popover().open():void 0}),$el.on("click",".status",function(event){var status,target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),status=target.data("status-id"),save(status)):void 0}),$scope.$watch($attrs.ngModel,function(us){return us?render(us):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",UsStatusButtonDirective]),UsTeamRequirementButtonDirective=function($rootscope,$tgrepo,$confirm,$loading,$qqueue){var link,template;return template=_.template('\n'),link=function($scope,$el,$attrs,$model){var canEdit,render,save;return canEdit=function(){return-1!==$scope.project.my_permissions.indexOf("modify_us")},render=function(us){var ctx,html;return canEdit()||us.team_requirement?(ctx={canEdit:canEdit(),isRequired:us.team_requirement},html=template(ctx),$el.html(html)):void $el.html("")},save=$qqueue.bindAdd(function(){return function(team_requirement){var promise,us;return us=$model.$modelValue.clone(),us.team_requirement=team_requirement,$model.$setViewValue(us),$loading.start($el.find("label")),promise=$tgrepo.save($model.$modelValue),promise.then(function(){return $loading.finish($el.find("label")),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return $loading.finish($el.find("label")),$confirm.notify("error"),us.revert(),$model.$setViewValue(us)})}}(this)),$el.on("click",".team-requirement",function(){var team_requirement;if(canEdit())return team_requirement=!$model.$modelValue.team_requirement,save(team_requirement)}),$scope.$watch($attrs.ngModel,function(us){return us?render(us):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsTeamRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",UsTeamRequirementButtonDirective]),UsClientRequirementButtonDirective=function($rootscope,$tgrepo,$confirm,$loading,$qqueue){var link,template;return template=_.template('\n'),link=function($scope,$el,$attrs,$model){var canEdit,render,save;return canEdit=function(){return-1!==$scope.project.my_permissions.indexOf("modify_us")},render=function(us){var ctx,html;return canEdit()||us.client_requirement?(ctx={canEdit:canEdit(),isRequired:us.client_requirement},html=template(ctx),$el.html(html)):void $el.html("")},save=$qqueue.bindAdd(function(){return function(client_requirement){var promise,us;return us=$model.$modelValue.clone(),us.client_requirement=client_requirement,$model.$setViewValue(us),$loading.start($el.find("label")),promise=$tgrepo.save($model.$modelValue),promise.then(function(){return $loading.finish($el.find("label")),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return $loading.finish($el.find("label")),$confirm.notify("error"),us.revert(),$model.$setViewValue(us)})}}(this)),$el.on("click",".client-requirement",function(){var client_requirement;if(canEdit())return client_requirement=!$model.$modelValue.client_requirement,save(client_requirement)}),$scope.$watch($attrs.ngModel,function(us){return us?render(us):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgUsClientRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",UsClientRequirementButtonDirective])}.call(this),function(){var TaskDetailController,TaskIsIocaineButtonDirective,TaskStatusButtonDirective,TaskStatusDisplayDirective,groupBy,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,groupBy=this.taiga.groupBy,module=angular.module("taigaTasks"),TaskDetailController=function(_super){function TaskDetailController(scope,rootscope,repo,confirm,rs,params,q,location,log,appTitle,navUrls,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.log=log,this.appTitle=appTitle,this.navUrls=navUrls,this.analytics=analytics,this.scope.taskRef=this.params.taskref,this.scope.sectionName="Task Details",this.initializeEventHandlers(),promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set(_this.scope.task.subject+" - "+_this.scope.project.name),_this.initializeOnDeleteGoToUrl()}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(TaskDetailController,_super),TaskDetailController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","$appTitle","$tgNavUrls","$tgAnalytics","tgLoader"],TaskDetailController.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(_this){return function(){return _this.analytics.trackEvent("attachment","create","create attachment on task",1),_this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("attachment:edit",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this)),this.scope.$on("attachment:delete",function(_this){return function(){return _this.rootscope.$broadcast("history:reload")}}(this))},TaskDetailController.prototype.initializeOnDeleteGoToUrl=function(){var ctx;if(ctx={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",ctx),this.scope.project.is_backlog_activated){if(this.scope.task.milestone)return ctx.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",ctx);if(this.scope.task.us)return ctx.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",ctx)}else if(this.scope.project.is_kanban_activated&&this.scope.us)return ctx.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",ctx)},TaskDetailController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.statusList=project.task_statuses,_this.scope.statusById=groupBy(project.task_statuses,function(x){return x.id}),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),project}}(this))},TaskDetailController.prototype.loadTask=function(){return this.rs.tasks.getByRef(this.scope.projectId,this.params.taskref).then(function(_this){return function(task){var ctx;return _this.scope.task=task,_this.scope.taskId=task.id,_this.scope.commentModel=task,null!=_this.scope.task.neighbors.previous.ref&&(ctx={project:_this.scope.project.slug,ref:_this.scope.task.neighbors.previous.ref},_this.scope.previousUrl=_this.navUrls.resolve("project-tasks-detail",ctx)),null!=_this.scope.task.neighbors.next.ref&&(ctx={project:_this.scope.project.slug,ref:_this.scope.task.neighbors.next.ref},_this.scope.nextUrl=_this.navUrls.resolve("project-tasks-detail",ctx)),task}}(this))},TaskDetailController.prototype.loadSprint=function(){return this.scope.task.milestone?this.rs.sprints.get(this.scope.task.project,this.scope.task.milestone).then(function(_this){return function(sprint){return _this.scope.sprint=sprint,sprint}}(this)):void 0},TaskDetailController.prototype.loadUserStory=function(){return this.scope.task.user_story?this.rs.userstories.get(this.scope.task.project,this.scope.task.user_story).then(function(_this){return function(us){return _this.scope.us=us,us}}(this)):void 0},TaskDetailController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.loadTask().then(function(){return _this.q.all([_this.loadSprint(),_this.loadUserStory()])})}}(this))},TaskDetailController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("TaskDetailController",TaskDetailController),TaskStatusDisplayDirective=function(){var link,template;return template=_.template('\n <% if (status.is_closed) { %>\n Closed\n <% } else { %>\n Open\n <% } %>\n\n\n <%- status.name %>\n'),link=function($scope,$el,$attrs){var render;return render=function(task){var html;return html=template({status:$scope.statusById[task.status]}),$el.html(html)},$scope.$watch($attrs.ngModel,function(task){return null!=task?render(task):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgTaskStatusDisplay",TaskStatusDisplayDirective),TaskStatusButtonDirective=function($rootScope,$repo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n <%- status.name %>\n <% if(editable){ %><% }%>\n status\n\n
      \n <% _.each(statuses, function(st) { %>\n
    • <%- st.name %>
    • \n <% }); %>\n
    \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_task")},render=function(){return function(task){var html,status;return status=$scope.statusById[task.status],html=template({status:status,statuses:$scope.statusList,editable:isEditable()}),$el.html(html)}}(this),save=$qqueue.bindAdd(function(){return function(status){var onError,onSuccess,task;return task=$model.$modelValue.clone(),task.status=status,$model.$setViewValue(task),onSuccess=function(){return $confirm.notify("success"),$rootScope.$broadcast("history:reload"),$loading.finish($el.find(".level-name"))},onError=function(){return $confirm.notify("error"),task.revert(),$model.$setViewValue(task),$loading.finish($el.find(".level-name"))},$loading.start($el.find(".level-name")),$repo.save($model.$modelValue).then(onSuccess,onError)}}(this)),$el.on("click",".status-data",function(event){return event.preventDefault(),event.stopPropagation(),isEditable()?$el.find(".pop-status").popover().open():void 0}),$el.on("click",".status",function(event){var target;return event.preventDefault(),event.stopPropagation(),isEditable()?(target=angular.element(event.currentTarget),$.fn.popover().closeAll(),save(target.data("status-id"))):void 0}),$scope.$watch($attrs.ngModel,function(task){return task?render(task):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgTaskStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",TaskStatusButtonDirective]),TaskIsIocaineButtonDirective=function($rootscope,$tgrepo,$confirm,$loading,$qqueue){var link,template;return template=_.template('
    \n \n \n
    '),link=function($scope,$el,$attrs,$model){var isEditable,render,save;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_task")},render=function(task){var ctx,html;return isEditable()||task.is_iocaine?(ctx={isIocaine:task.is_iocaine,isEditable:isEditable()},html=template(ctx),$el.html(html)):void $el.html("")},save=$qqueue.bindAdd(function(){return function(is_iocaine){var promise,task;return task=$model.$modelValue.clone(),task.is_iocaine=is_iocaine,$model.$setViewValue(task),$loading.start($el.find("label")),promise=$tgrepo.save(task),promise.then(function(){return $confirm.notify("success"),$rootscope.$broadcast("history:reload")}),promise.then(null,function(){return task.revert(),$model.$setViewValue(task),$confirm.notify("error")}),promise["finally"](function(){return $loading.finish($el.find("label"))})}}(this)),$el.on("click",".is-iocaine",function(){var is_iocaine;if(isEditable())return is_iocaine=!$model.$modelValue.is_iocaine,save(is_iocaine)}),$scope.$watch($attrs.ngModel,function(task){return task?render(task):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgTaskIsIocaineButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQqueue",TaskIsIocaineButtonDirective])}.call(this),function(){var LeaveProjectDirective,TeamController,TeamFiltersDirective,TeamMemberCurrentUserDirective,TeamMemberStatsDirective,TeamMembersDirective,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,module=angular.module("taigaTeam"),TeamController=function(_super){function TeamController(scope,rootscope,repo,rs,params,q,location,navUrls,appTitle,auth,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.appTitle=appTitle,this.auth=auth,this.scope.sectionName="Team",promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Team - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(TeamController,_super),TeamController.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$routeParams","$q","$location","$tgNavUrls","$appTitle","$tgAuth","tgLoader"],TeamController.prototype.setRole=function(role){return this.scope.filtersRole=role?role:""},TeamController.prototype.loadMembers=function(){return this.rs.memberships.list(this.scope.projectId,{},!1).then(function(_this){return function(data){var currentUser,membership,_i,_len,_ref;for(currentUser=_this.auth.getUser(),null==currentUser.photo&&(currentUser.photo="/images/unnamed.png"),_this.scope.currentUser=_.find(data,function(membership){return membership.user===currentUser.id}),_this.scope.totals={},_.forEach(data,function(membership){return _this.scope.totals[membership.user]=0}),_this.scope.memberships=_.filter(data,function(membership){return membership.user&&membership.user!==currentUser.id&&membership.is_user_active?membership:void 0}),_ref=_this.scope.memberships,_i=0,_len=_ref.length;_len>_i;_i++)membership=_ref[_i],null==membership.photo&&(membership.photo="/images/unnamed.png");return data}}(this))},TeamController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.issuesEnabled=project.is_issues_activated,_this.scope.tasksEnabled=project.is_kanban_activated||project.is_backlog_activated,_this.scope.wikiEnabled=project.is_wiki_activated,project}}(this))},TeamController.prototype.loadMemberStats=function(){return this.rs.projects.memberStats(this.scope.projectId).then(function(_this){return function(stats){var totals;return totals={},_.forEach(_this.scope.totals,function(total,userId){var vals;return vals=_.map(stats,function(memberStats){return memberStats[userId]}),total=_.reduce(vals,function(sum,el){return sum+el}),_this.scope.totals[userId]=total}),_this.scope.stats=_this.processStats(stats),_this.scope.stats.totals=_this.scope.totals}}(this))},TeamController.prototype.processStat=function(stat){var max,min,singleStat;return max=_.max(stat),min=_.min(stat),singleStat=_.map(stat,function(value,key){return value===min?[key,.1]:value===max?[key,1]:[key,.5*value/max]}),singleStat=_.object(singleStat)},TeamController.prototype.processStats=function(stats){var key,value;for(key in stats)value=stats[key],stats[key]=this.processStat(value);return stats},TeamController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.loadMembers().then(function(){return _this.loadMemberStats()})}}(this))},TeamController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("TeamController",TeamController),TeamFiltersDirective=function(){var template;return template='',{template:template}},module.directive("tgTeamFilters",[TeamFiltersDirective]),TeamMemberStatsDirective=function(){var template;return template='
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    ',{template:template,scope:{stats:"=",userId:"=user",issuesEnabled:"=issuesenabled",tasksEnabled:"=tasksenabled",wikiEnabled:"=wikienabled"}} +},module.directive("tgTeamMemberStats",TeamMemberStatsDirective),TeamMemberCurrentUserDirective=function(){var template;return template='
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    ',{template:template,scope:{projectId:"=projectid",currentUser:"=currentuser",stats:"=",issuesEnabled:"=issuesenabled",tasksEnabled:"=tasksenabled",wikiEnabled:"=wikienabled"}}},module.directive("tgTeamCurrentUser",TeamMemberCurrentUserDirective),TeamMembersDirective=function(){var template;return template='
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    ',{template:template,scope:{memberships:"=",filtersQ:"=filtersq",filtersRole:"=filtersrole",stats:"=",issuesEnabled:"=issuesenabled",tasksEnabled:"=tasksenabled",wikiEnabled:"=wikienabled"}}},module.directive("tgTeamMembers",TeamMembersDirective),LeaveProjectDirective=function($repo,$confirm,$location,$rs,$navurls){var link,template;return template='\n Leave this project\n',link=function($scope,$el,$attrs){return $scope.leave=function(){return $confirm.ask("Leave this project","Are you sure you want to leave the project?").then(function(){return function(finish){var promise;return promise=$rs.projects.leave($attrs.projectid),promise.then(function(){return finish(),$confirm.notify("success"),$location.path($navurls.resolve("home"))}),promise.then(null,function(response){return finish(),$confirm.notify("error",response.data._error_message)})}}(this))}},{scope:{},template:template,link:link}},module.directive("tgLeaveProject",["$tgRepo","$tgConfirm","$tgLocation","$tgResources","$tgNavUrls",LeaveProjectDirective])}.call(this),function(){var EditableWikiContentDirective,WikiDetailController,WikiSummaryDirective,bindOnce,debounce,groupBy,mixOf,module,taiga,unslugify,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,unslugify=this.taiga.unslugify,debounce=this.taiga.debounce,module=angular.module("taigaWiki"),WikiDetailController=function(_super){function WikiDetailController(scope,rootscope,repo,model,confirm,rs,params,q,location,filter,log,appTitle,navUrls,analytics,tgLoader){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.model=model,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.filter=filter,this.log=log,this.appTitle=appTitle,this.navUrls=navUrls,this.analytics=analytics,this.scope.projectSlug=this.params.pslug,this.scope.wikiSlug=this.params.slug,this.scope.sectionName="Wiki",promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Wiki - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(WikiDetailController,_super),WikiDetailController.$inject=["$scope","$rootScope","$tgRepo","$tgModel","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$filter","$log","$appTitle","$tgNavUrls","$tgAnalytics","tgLoader"],WikiDetailController.prototype.loadProject=function(){return this.rs.projects.getBySlug(this.params.pslug).then(function(_this){return function(project){return _this.scope.projectId=project.id,_this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.membersById=groupBy(project.memberships,function(x){return x.user}),project}}(this))},WikiDetailController.prototype.loadWiki=function(){var promise;return promise=this.rs.wiki.getBySlug(this.scope.projectId,this.params.slug),promise.then(function(_this){return function(wiki){return _this.scope.wiki=wiki,_this.scope.wikiId=wiki.id,_this.scope.wiki}}(this)),promise.then(null,function(_this){return function(){var data;return _this.scope.wikiId=null,-1===_this.scope.project.my_permissions.indexOf("add_wiki_page")?null:(data={project:_this.scope.projectId,slug:_this.scope.wikiSlug,content:""},_this.scope.wiki=_this.model.make_model("wiki",data),_this.scope.wiki)}}(this))},WikiDetailController.prototype.loadWikiLinks=function(){return this.rs.wiki.listLinks(this.scope.projectId).then(function(_this){return function(wikiLinks){return _this.scope.wikiLinks=wikiLinks}}(this))},WikiDetailController.prototype.loadInitialData=function(){var promise;return promise=this.loadProject(),promise.then(function(_this){return function(project){return _this.fillUsersAndRoles(project.users,project.roles),_this.q.all([_this.loadWikiLinks(),_this.loadWiki()])}}(this))},WikiDetailController.prototype["delete"]=function(){var message,title;return title="Delete Wiki Page",message=unslugify(this.scope.wiki.slug),this.confirm.askOnDelete(title,message).then(function(_this){return function(finish){var onError,onSuccess;return onSuccess=function(){var ctx;return finish(),ctx={project:_this.scope.projectSlug},_this.location.path(_this.navUrls.resolve("project-wiki",ctx)),_this.confirm.notify("success")},onError=function(){return finish(!1),_this.confirm.notify("error")},_this.repo.remove(_this.scope.wiki).then(onSuccess,onError)}}(this))},WikiDetailController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("WikiDetailController",WikiDetailController),WikiSummaryDirective=function($log){var link,template;return template=_.template('
      \n
    • \n <%- totalEditions %>\n times
      edited
      \n
    • \n
    • \n <%- lastModifiedDate %>\n last
      edit
      \n
    • \n
    • \n
      \n <%- user.name %>\n
      \n last modification\n <%- user.name %>\n
    • \n
    '),link=function($scope,$el,$attrs){var render;return render=function(wiki){var ctx,html,user;return null==$scope.usersById?$log.error("WikiSummaryDirective requires userById set in scope."):user=$scope.usersById[wiki.last_modifier],user=void 0===user?{name:"unknown",imgUrl:"/images/unnamed.png"}:{name:user.full_name_display,imgUrl:user.photo},ctx={totalEditions:wiki.editions,lastModifiedDate:moment(wiki.modified_date).format("DD MMM YYYY HH:mm"),user:user},html=template(ctx),$el.html(html)},$scope.$watch($attrs.ngModel,function(wikiPage){return wikiPage?render(wikiPage):void 0}),$scope.$on("wiki:edit",function(event,wikiPage){return render(wikiPage)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgWikiSummary",["$log",WikiSummaryDirective]),EditableWikiContentDirective=function($window,$document,$repo,$confirm,$loading,$location,$navUrls,$analytics,$qqueue){var link,template;return template='
    \n
    \n \n
    \n',link=function($scope,$el,$attrs,$model){var cancelEdition,disableEdition,getSelectedText,isEditable,save,switchToEditMode,switchToReadMode;return isEditable=function(){return-1!==$scope.project.my_permissions.indexOf("modify_wiki_page")},switchToEditMode=function(){return $el.find(".edit-wiki-content").show(),$el.find(".view-wiki-content").hide(),$el.find("textarea").focus()},switchToReadMode=function(){return $el.find(".edit-wiki-content").hide(),$el.find(".view-wiki-content").show()},disableEdition=function(){return $el.find(".view-wiki-content .edit").remove(),$el.find(".edit-wiki-content").remove()},cancelEdition=function(){var ctx;if($scope.wiki.html)return $scope.wiki.id?($scope.$apply(function(){return function(){return $scope.wiki.revert()}}(this)),switchToReadMode()):(ctx={project:$scope.projectSlug},$location.path($navUrls.resolve("project-wiki",ctx)))},getSelectedText=function(){return $window.getSelection?$window.getSelection().toString():$document.selection?$document.selection.createRange().text:null},save=$qqueue.bindAdd(function(wiki){var onError,onSuccess,promise;return onSuccess=function(wikiPage){return null==wiki.id&&$analytics.trackEvent("wikipage","create","create wiki page",1),$scope.wiki=wikiPage,$model.setModelValue=wiki,$confirm.notify("success"),switchToReadMode(),$scope.$broadcast("wiki:edit",wikiPage)},onError=function(){return $confirm.notify("error")},$loading.start($el.find(".save-container")),promise=null!=wiki.id?$repo.save(wiki).then(onSuccess,onError):$repo.create("wiki",wiki).then(onSuccess,onError),promise["finally"](function(){return $loading.finish($el.find(".save-container"))})}),$el.on("mousedown",".view-wiki-content",function(event){var target;return target=angular.element(event.target),target.is("pre")?target.data("scroll-pos",target[0].scrollLeft):void 0}),$el.on("mouseup",".view-wiki-content",function(event){var prevPos,target;return target=angular.element(event.target),!isEditable()||target.is("a")||getSelectedText()||target.is("pre")&&(prevPos=target.data("scroll-pos"),target.data("scroll-pos",null),prevPos!==target[0].scrollLeft)?void 0:switchToEditMode()}),$el.on("click",".save",debounce(2e3,function(){return save($scope.wiki)})),$el.on("click",".cancel",function(){return cancelEdition()}),$el.on("keydown","textarea",function(event){return 27===event.keyCode?cancelEdition():void 0}),$scope.$watch($attrs.ngModel,function(wikiPage){return wikiPage?($scope.wiki=wikiPage,isEditable()?($el.addClass("editable"),null==wikiPage.id?switchToEditMode():void 0):disableEdition()):void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,restrict:"EA",require:"ngModel",template:template}},module.directive("tgEditableWikiContent",["$window","$document","$tgRepo","$tgConfirm","$tgLoading","$tgLocation","$tgNavUrls","$tgAnalytics","$tgQqueue",EditableWikiContentDirective])}.call(this),function(){var WikiNavDirective,bindOnce,groupBy,mixOf,module,slugify,taiga,unslugify;taiga=this.taiga,mixOf=this.taiga.mixOf,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,slugify=this.taiga.slugify,unslugify=this.taiga.slugify,module=angular.module("taigaWiki"),WikiNavDirective=function($tgrepo,$log,$location,$confirm,$navUrls,$analytics,$loading){var link,template;return template=_.template('
    \n

    Links

    \n
    \n
    \n<% if (addWikiLinkPermission) { %>\nAdd link\n<% } %>'),link=function($scope,$el,$attrs){var $ctrl,render;return $ctrl=$el.controller(),null==$attrs.ngModel?$log.error("WikiNavDirective: no ng-model attr is defined"):(render=function(wikiLinks){var addWikiLinkPermission,deleteWikiLinkPermission,html;return addWikiLinkPermission=$scope.project.my_permissions.indexOf("add_wiki_link")>-1,deleteWikiLinkPermission=$scope.project.my_permissions.indexOf("delete_wiki_link")>-1,html=template({wikiLinks:wikiLinks,projectSlug:$scope.projectSlug,addWikiLinkPermission:addWikiLinkPermission,deleteWikiLinkPermission:deleteWikiLinkPermission}),$el.off(),$el.html(html),$el.on("click",".wiki-link .link-title",function(event){var linkId,linkSlug,target;return event.preventDefault(),target=angular.element(event.currentTarget),linkId=target.parents(".wiki-link").data("id"),linkSlug=$scope.wikiLinks[linkId].href,$scope.$apply(function(){var ctx;return ctx={project:$scope.projectSlug,slug:linkSlug},$location.path($navUrls.resolve("project-wiki-page",ctx))})}),$el.on("click",".add-button",function(event){return event.preventDefault(),$el.find(".new").removeClass("hidden"),$el.find(".new input").focus(),$el.find(".add-button").hide()}),$el.on("click",".wiki-link .icon-delete",function(event){var linkId,message,target,title;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),linkId=target.parents(".wiki-link").data("id"),title="Delete Wiki Link",message=$scope.wikiLinks[linkId].title,$confirm.askOnDelete(title,message).then(function(){return function(finish){var promise;return promise=$tgrepo.remove($scope.wikiLinks[linkId]),promise.then(function(){return promise=$ctrl.loadWikiLinks(),promise.then(function(){return finish(),render($scope.wikiLinks)}),promise.then(null,function(){return finish()})}),promise.then(null,function(){return finish(!1),$confirm.notify("error")})}}(this))}),$el.on("keyup",".new input",function(event){var newLink,promise,target;return event.preventDefault(),13===event.keyCode?(target=angular.element(event.currentTarget),newLink=target.val(),$loading.start($el.find(".new")),promise=$tgrepo.create("wiki-links",{project:$scope.projectId,title:newLink,href:slugify(newLink)}),promise.then(function(){var loadPromise;return $analytics.trackEvent("wikilink","create","create wiki link",1),loadPromise=$ctrl.loadWikiLinks(),loadPromise.then(function(){return $loading.finish($el.find(".new")),$el.find(".new").addClass("hidden"),$el.find(".new input").val(""),$el.find(".add-button").show(),render($scope.wikiLinks)}),loadPromise.then(null,function(){return $loading.finish($el.find(".new")),$el.find(".new").addClass("hidden"),$el.find(".new input").val(""),$el.find(".add-button").show(),$confirm.notify("error","Error loading wiki links")})}),promise.then(null,function(error){var _ref;return $loading.finish($el.find(".new")),$el.find(".new input").val(newLink),$el.find(".new input").focus().select(),null!=(null!=error&&null!=(_ref=error.__all__)?_ref[0]:void 0)?$confirm.notify("error","The link already exists"):$confirm.notify("error")})):27===event.keyCode?(target=angular.element(event.currentTarget),$el.find(".new").addClass("hidden"),$el.find(".new input").val(""),$el.find(".add-button").show()):void 0})},bindOnce($scope,$attrs.ngModel,render))},{link:link}},module.directive("tgWikiNav",["$tgRepo","$log","$tgLocation","$tgConfirm","$tgNavUrls","$tgAnalytics","$tgLoading",WikiNavDirective])}.call(this),function(){var CreateMembersDirective,MAX_MEMBERSHIP_FIELDSETS,debounce,module,taiga;taiga=this.taiga,debounce=this.taiga.debounce,module=angular.module("taigaKanban"),MAX_MEMBERSHIP_FIELDSETS=4,CreateMembersDirective=function($rs,$rootScope,$confirm,$loading,lightboxService){var extraTextTemplate,link,template;return extraTextTemplate='
    \n \n
    ',template=_.template('
    \n
    \n data-required="true" <% } %> data-type="email" />\n
    \n
    \n \n \n
    \n
    '),link=function($scope,$el){var createFieldSet,resetForm,submit,submitButton;return createFieldSet=function(required){var ctx;return null==required&&(required=!0),ctx={roleList:$scope.roles,required:required},template(ctx)},resetForm=function(){var fieldSet,invitations;return $el.find("form textarea").remove(""),$el.find("form .add-member-wrapper").remove(),invitations=$el.find(".add-member-forms"),invitations.html(extraTextTemplate),fieldSet=createFieldSet(),invitations.prepend(fieldSet)},$scope.$on("membersform:new",function(){return resetForm(),lightboxService.open($el)}),$scope.$on("$destroy",function(){return $el.off()}),$el.on("click",".delete-fieldset",function(event){var fieldSet,lastActionButton,target;return event.preventDefault(),target=angular.element(event.currentTarget),fieldSet=target.closest(".add-member-wrapper"),fieldSet.remove(),lastActionButton=$el.find("fieldset:last > a"),lastActionButton.hasClass("icon-delete delete-fieldset")?lastActionButton.removeClass("icon-delete delete-fieldset").addClass("icon-plus add-fieldset"):void 0}),$el.on("click",".add-fieldset",function(event){var fieldSet,newFieldSet,target;return event.preventDefault(),target=angular.element(event.currentTarget),fieldSet=target.closest(".add-member-wrapper"),target.removeClass("icon-plus add-fieldset").addClass("icon-delete delete-fieldset"),newFieldSet=createFieldSet(!1),fieldSet.after(newFieldSet),$el.find(".add-member-wrapper").length===MAX_MEMBERSHIP_FIELDSETS?$el.find(".add-member-wrapper fieldset:last > a").removeClass("icon-plus add-fieldset").addClass("icon-delete delete-fieldset"):void 0}),submit=debounce(2e3,function(){return function(event){var form,invitation_extra_text,invitations,memberWrappers,onError,onSuccess;return event.preventDefault(),$loading.start(submitButton),onSuccess=function(){return $loading.finish(submitButton),lightboxService.close($el),$confirm.notify("success"),$rootScope.$broadcast("membersform:new:success")},onError=function(){return $loading.finish(submitButton),lightboxService.close($el),$confirm.notify("error"),$rootScope.$broadcast("membersform:new:error")},form=$el.find("form").checksley(),form.destroy(),form.initialize(),form.validate()?(memberWrappers=$el.find("form .add-member-wrapper"),memberWrappers=_.filter(memberWrappers,function(mw){return angular.element(mw).find("input").hasClass("checksley-ok")}),invitations=_.map(memberWrappers,function(mw){var email,memberWrapper,role;return memberWrapper=angular.element(mw),email=memberWrapper.find("input"),role=memberWrapper.find("select"),{email:email.val(),role_id:role.val()}}),invitations.length?(invitation_extra_text=$el.find("form textarea").val(),$rs.memberships.bulkCreateMemberships($scope.project.id,invitations,invitation_extra_text).then(onSuccess,onError)):void 0):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgLbCreateMembers",["$tgResources","$rootScope","$tgConfirm","$tgLoading","lightboxService",CreateMembersDirective])}.call(this),function(){var MembershipsController,MembershipsDirective,MembershipsRowActionsDirective,MembershipsRowAdminCheckboxDirective,MembershipsRowAvatarDirective,MembershipsRowRoleSelectorDirective,bindMethods,mixOf,module,paginatorTemplate,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,bindMethods=this.taiga.bindMethods,module=angular.module("taigaAdmin"),MembershipsController=function(_super){function MembershipsController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,analytics,appTitle){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.analytics=analytics,this.appTitle=appTitle,bindMethods(this),this.scope.sectionName="Manage Members",this.scope.project={},this.scope.filters={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Membership - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.$on("membersform:new:success",function(_this){return function(){return _this.loadMembers(),_this.analytics.trackEvent("membership","create","create memberships on admin",1)}}(this))}return __extends(MembershipsController,_super),MembershipsController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAnalytics","$appTitle"],MembershipsController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},MembershipsController.prototype.loadMembers=function(){var httpFilters;return httpFilters=this.getUrlFilters(),this.rs.memberships.list(this.scope.projectId,httpFilters).then(function(_this){return function(data){return _this.scope.memberships=_.filter(data.models,function(membership){return null===membership.user||membership.is_user_active}),_this.scope.page=data.current,_this.scope.count=data.count,_this.scope.paginatedBy=data.paginatedBy,data}}(this))},MembershipsController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadUsersAndRoles()}}(this)).then(function(_this){return function(){return _this.loadMembers()}}(this))},MembershipsController.prototype.getUrlFilters=function(){var filters;return filters=_.pick(this.location.search(),"page"),filters.page||(filters.page=1),filters},MembershipsController.prototype.addNewMembers=function(){return this.rootscope.$broadcast("membersform:new")},MembershipsController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("MembershipsController",MembershipsController),paginatorTemplate='
      \n <% if (showPrevious) { %>\n \n <% } %>\n\n <% _.each(pages, function(item) { %>\n
    • \n <% if (item.type === "page") { %>\n <%- item.num %>\n <% } else if (item.type === "page-active") { %>\n <%- item.num %>\n <% } else { %>\n ...\n <% } %>\n
    • \n <% }); %>\n\n <% if (showNext) { %>\n \n <% } %>\n
    ',MembershipsDirective=function(){var link,linkPagination,template;return template=_.template(paginatorTemplate),linkPagination=function($scope,$el,$attrs,$ctrl){var $pagEl,afterCurrent,atBegin,atEnd,beforeCurrent,getNumPages,renderPagination;return afterCurrent=2,beforeCurrent=4,atBegin=2,atEnd=2,$pagEl=$el.find(".memberships-paginator"),getNumPages=function(){var numPages;return numPages=$scope.count/$scope.paginatedBy,numPages=parseInt(numPages,10)=numPages)return void $pagEl.hide();for(pages=[],options={},options.pages=pages,options.showPrevious=$scope.page>1,options.showNext=!($scope.page===numPages),cpage=$scope.page,i=_i=1;numPages>=1?numPages>=_i:_i>=numPages;i=numPages>=1?++_i:--_i)i===cpage+afterCurrent&&numPages>cpage+afterCurrent+atEnd?pages.push({classes:"dots",type:"dots"}):i===cpage-beforeCurrent&&cpage>atBegin+beforeCurrent?pages.push({classes:"dots",type:"dots"}):i>cpage+afterCurrent&&numPages-atEnd>=i||cpage-beforeCurrent>i&&i>atBegin||pages.push(i===cpage?{classes:"active",num:i,type:"page-active"}:{classes:"page",num:i,type:"page"});return $pagEl.html(template(options))},$scope.$watch("memberships",function(value){return value?renderPagination():void 0}),$el.on("click",".memberships-paginator a.next",function(event){return event.preventDefault(),$scope.$apply(function(){return $ctrl.selectFilter("page",$scope.page+1),$ctrl.loadMembers()})}),$el.on("click",".memberships-paginator a.previous",function(event){return event.preventDefault(),$scope.$apply(function(){return $ctrl.selectFilter("page",$scope.page-1),$ctrl.loadMembers()})}),$el.on("click",".memberships-paginator li.page > a",function(event){var pagenum,target;return event.preventDefault(),target=angular.element(event.currentTarget),pagenum=target.data("pagenum"),$scope.$apply(function(){return $ctrl.selectFilter("page",pagenum),$ctrl.loadMembers()})})},link=function($scope,$el,$attrs){var $ctrl;return $ctrl=$el.controller(),linkPagination($scope,$el,$attrs,$ctrl),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgMemberships",MembershipsDirective),MembershipsRowAvatarDirective=function($log){var link,template;return template=_.template('
    \n <%- full_name %>\n
    \n <%- full_name %>\n \n
    \n
    '),link=function($scope,$el,$attrs){var member,render;return render=function(member){var ctx,html;return ctx={full_name:member.full_name?member.full_name:"",email:member.user_email?member.user_email:member.email,imgurl:member.photo?member.photo:"/images/unnamed.png"},html=template(ctx),$el.html(html)},null==$attrs.tgMembershipsRowAvatar?$log.error("MembershipsRowAvatarDirective: the directive need a member"):(member=$scope.$eval($attrs.tgMembershipsRowAvatar),render(member),$scope.$on("$destroy",function(){return $el.off()}))},{link:link}},module.directive("tgMembershipsRowAvatar",["$log",MembershipsRowAvatarDirective]),MembershipsRowAdminCheckboxDirective=function($log,$repo,$confirm){var link,template;return template=_.template('
    \n \n
    \n Yes\n No\n
    '),link=function($scope,$el,$attrs){var html,member,render;return render=function(member){var ctx,html;return ctx={inputId:"is-admin-"+member.id},html=template(ctx),$el.html(html)},null==$attrs.tgMembershipsRowAdminCheckbox?$log.error("MembershipsRowAdminCheckboxDirective: the directive need a member"):(member=$scope.$eval($attrs.tgMembershipsRowAdminCheckbox),html=render(member),member.is_owner&&$el.find(":checkbox").prop("checked",!0),$el.on("click",":checkbox",function(){return function(event){var onError,onSuccess,target;return onSuccess=function(){return $confirm.notify("success")},onError=function(data){return member.revert(),$el.find(":checkbox").prop("checked",member.is_owner),$confirm.notify("error",data.is_owner[0])},target=angular.element(event.currentTarget),member.is_owner=target.prop("checked"),$repo.save(member).then(onSuccess,onError)}}(this)),$scope.$on("$destroy",function(){return $el.off()}))},{link:link}},module.directive("tgMembershipsRowAdminCheckbox",["$log","$tgRepo","$tgConfirm",MembershipsRowAdminCheckboxDirective]),MembershipsRowRoleSelectorDirective=function($log,$repo,$confirm){var link,template;return template=_.template(''),link=function($scope,$el,$attrs){var $ctrl,html,member,render;return render=function(member){var ctx,html;return ctx={roleList:$scope.roles,selectedRole:member.role},html=template(ctx),$el.html(html)},null==$attrs.tgMembershipsRowRoleSelector?$log.error("MembershipsRowRoleSelectorDirective: the directive need a member"):($ctrl=$el.controller(),member=$scope.$eval($attrs.tgMembershipsRowRoleSelector),html=render(member),$el.on("click","select",function(){return function(event){var newRole,onError,onSuccess,target;return onSuccess=function(){return $confirm.notify("success")},onError=function(){return $confirm.notify("error")},target=angular.element(event.currentTarget),newRole=parseInt(target.val(),10),member.role!==newRole?(member.role=newRole,$repo.save(member).then(onSuccess,onError)):void 0}}(this)),$scope.$on("$destroy",function(){return $el.off()}))},{link:link}},module.directive("tgMembershipsRowRoleSelector",["$log","$tgRepo","$tgConfirm",MembershipsRowRoleSelectorDirective]),MembershipsRowActionsDirective=function($log,$repo,$rs,$confirm){var activedTemplate,link,pendingTemplate;return activedTemplate=_.template('
    \n Active\n
    \n\n \n'),pendingTemplate=_.template('\n Pending\n \n\n\n \n'),link=function($scope,$el,$attrs){var $ctrl,member,render;return render=function(member){var html;return html=member.user?activedTemplate():pendingTemplate(),$el.html(html)},null==$attrs.tgMembershipsRowActions?$log.error("MembershipsRowActionsDirective: the directive need a member"):($ctrl=$el.controller(),member=$scope.$eval($attrs.tgMembershipsRowActions),render(member),$el.on("click",".pending",function(event){var onError,onSuccess;return event.preventDefault(),onSuccess=function(){return $confirm.notify("success","We've sent the invitationi again to '"+$scope.member.email+"'.")},onError=function(){return $confirm.notify("error","We haven't sent the invitation.") +},$rs.memberships.resendInvitation($scope.member.id).then(onSuccess,onError)}),$el.on("click",".delete",function(event){var message,title;return event.preventDefault(),title="Delete member",message=member.user?member.full_name:"the invitation to "+member.email,$confirm.askOnDelete(title,message).then(function(finish){var onError,onSuccess;return onSuccess=function(){return finish(),$ctrl.loadMembers(),$confirm.notify("success",null,"We've deleted "+message+".")},onError=function(){return finish(!1),$confirm.notify("error",null,"We have not been able to delete "+message+".")},$repo.remove(member).then(onSuccess,onError)})}),$scope.$on("$destroy",function(){return $el.off()}))},{link:link}},module.directive("tgMembershipsRowActions",["$log","$tgRepo","$tgResources","$tgConfirm",MembershipsRowActionsDirective])}.call(this),function(){var AdminNavigationDirective,module;AdminNavigationDirective=function(){var link;return link=function($scope,$el,$attrs){var section;return section=$attrs.tgAdminNavigation,$el.find(".active").removeClass("active"),$el.find("#adminmenu-"+section+" a").addClass("active"),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module=angular.module("taigaAdmin"),module.directive("tgAdminNavigation",AdminNavigationDirective)}.call(this),function(){var ProjectDefaultValuesDirective,ProjectModulesDirective,ProjectProfileController,ProjectProfileDirective,bindOnce,debounce,groupBy,joinStr,mixOf,module,taiga,toString,trim,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,trim=this.taiga.trim,toString=this.taiga.toString,joinStr=this.taiga.joinStr,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaAdmin"),ProjectProfileController=function(_super){function ProjectProfileController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,appTitle){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.appTitle=appTitle,this.scope.project={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Project profile - "+_this.scope.sectionName+" - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:loaded",function(_this){return function(){return _this.appTitle.set("Project profile - "+_this.scope.sectionName+" - "+_this.scope.project.name)}}(this))}return __extends(ProjectProfileController,_super),ProjectProfileController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$appTitle"],ProjectProfileController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.pointsList=_.sortBy(project.points,"order"),_this.scope.usStatusList=_.sortBy(project.us_statuses,"order"),_this.scope.taskStatusList=_.sortBy(project.task_statuses,"order"),_this.scope.prioritiesList=_.sortBy(project.priorities,"order"),_this.scope.severitiesList=_.sortBy(project.severities,"order"),_this.scope.issueTypesList=_.sortBy(project.issue_types,"order"),_this.scope.issueStatusList=_.sortBy(project.issue_statuses,"order"),_this.scope.$emit("project:loaded",project),project}}(this))},ProjectProfileController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this))},ProjectProfileController.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.project)},ProjectProfileController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("ProjectProfileController",ProjectProfileController),ProjectProfileDirective=function($repo,$confirm,$loading,$navurls,$location){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley({onlyOneErrorElement:!0}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.save($scope.project),promise.then(function(){var newUrl;return $loading.finish(submitButton),$confirm.notify("success"),newUrl=$navurls.resolve("project-admin-project-profile-details",{project:$scope.project.slug}),$location.path(newUrl),$scope.$emit("project:loaded",$scope.project)}),promise.then(null,function(data){return $loading.finish(target),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgProjectProfile",["$tgRepo","$tgConfirm","$tgLoading","$tgNavUrls","$tgLocation",ProjectProfileDirective]),ProjectDefaultValuesDirective=function($repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley({onlyOneErrorElement:!0}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.save($scope.project),promise.then(function(){return $loading.finish(submitButton),$confirm.notify("success")}),promise.then(null,function(data){return $loading.finish(target),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgProjectDefaultValues",["$tgRepo","$tgConfirm","$tgLoading",ProjectDefaultValuesDirective]),ProjectModulesDirective=function($repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit;return form=$el.find("form").checksley(),submit=function(){return function(){var promise,target;if(form.validate())return target=angular.element(".admin-functionalities a.button-green"),$loading.start(target),promise=$repo.save($scope.project),promise.then(function(){return $loading.finish(target),$confirm.notify("success"),$scope.$emit("project:loaded",$scope.project)}),promise.then(null,function(data){return $loading.finish(target),$confirm.notify("error",data._error_message)})}}(this),$el.on("submit","form",function(event){return event.preventDefault(),submit()}),$el.on("click",".admin-functionalities a.button-green",function(event){return event.preventDefault(),submit()}),$scope.$watch("isVideoconferenceActivated",function(isVideoconferenceActivated){return isVideoconferenceActivated?$el.find(".videoconference-attributes").removeClass("hidden"):($el.find(".videoconference-attributes").addClass("hidden"),$scope.project.videoconferences=null,$scope.project.videoconferences_salt="")}),$scope.$watch("project",function(project){return $scope.isVideoconferenceActivated=null!=project.videoconferences?!0:!1})},{link:link}},module.directive("tgProjectModules",["$tgRepo","$tgConfirm","$tgLoading",ProjectModulesDirective])}.call(this),function(){var ColorSelectionDirective,ProjectValuesController,ProjectValuesDirective,bindOnce,debounce,groupBy,joinStr,mixOf,module,taiga,toString,trim,__bind=function(fn,me){return function(){return fn.apply(me,arguments)}},__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,trim=this.taiga.trim,toString=this.taiga.toString,joinStr=this.taiga.joinStr,groupBy=this.taiga.groupBy,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaAdmin"),ProjectValuesController=function(_super){function ProjectValuesController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,appTitle){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.appTitle=appTitle,this.moveValue=__bind(this.moveValue,this),this.scope.project={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Project values - "+_this.scope.sectionName+" - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.$on("admin:project-values:move",this.moveValue)}return __extends(ProjectValuesController,_super),ProjectValuesController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$appTitle"],ProjectValuesController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},ProjectValuesController.prototype.loadValues=function(){return this.rs[this.scope.resource].listValues(this.scope.projectId,this.scope.type).then(function(_this){return function(values){return _this.scope.values=values,_this.scope.maxValueOrder=_.max(values,"order").order,values}}(this))},ProjectValuesController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.q.all([_this.loadProject(),_this.loadValues()])}}(this))},ProjectValuesController.prototype.moveValue=function(ctx,itemValue,itemIndex){var r,values;return values=this.scope.values,r=values.indexOf(itemValue),values.splice(r,1),values.splice(itemIndex,0,itemValue),_.each(values,function(value,index){return value.order=index}),this.repo.saveAll(values)},ProjectValuesController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("ProjectValuesController",ProjectValuesController),ProjectValuesDirective=function($log,$repo,$confirm,$location,animationFrame){var link,linkDragAndDrop,linkValue;return linkDragAndDrop=function($scope,$el){var itemEl,newParentScope,oldParentScope,tdom;return oldParentScope=null,newParentScope=null,itemEl=null,tdom=$el.find(".sortable"),tdom.sortable({handle:".row.table-main.visualization",dropOnEmpty:!0,connectWith:".project-values-body",revert:400,axis:"y"}),tdom.on("sortstop",function(event,ui){var itemIndex,itemValue;return itemEl=ui.item,itemValue=itemEl.scope().value,itemIndex=itemEl.index(),$scope.$broadcast("admin:project-values:move",itemValue,itemIndex)}),$scope.$on("$destroy",function(){return $el.off()})},linkValue=function($scope,$el,$attrs){var $ctrl,cancel,goToBottomList,initializeNewValue,saveValue,submit,valueType;return $ctrl=$el.controller(),valueType=$attrs.type,initializeNewValue=function(){return $scope.newValue={name:"",is_closed:!1,is_archived:!1}},initializeNewValue(),goToBottomList=function(){return function(focus){var table;return null==focus&&(focus=!1),table=$el.find(".table-main"),$(document.body).scrollTop(table.offset().top+table.height()),focus?$(".new-value input").focus():void 0}}(this),submit=debounce(2e3,function(){return function(){var promise;return promise=$repo.save($scope.project),promise.then(function(){return $confirm.notify("success")}),promise.then(null,function(data){return $confirm.notify("error",data._error_message)})}}(this)),saveValue=debounce(2e3,function(target){var form,promise,value;return form=target.parents("form").checksley(),form.validate()?(value=target.scope().value,promise=$repo.save(value),promise.then(function(){return function(){var row;return row=target.parents(".row.table-main"),row.addClass("hidden"),row.siblings(".visualization").removeClass("hidden")}}(this)),promise.then(null,function(data){return $confirm.notify("error"),form.setErrors(data)})):void 0}),cancel=function(target){var row,value;return row=target.parents(".row.table-main"),value=target.scope().value,$scope.$apply(function(){return row.addClass("hidden"),value.revert(),row.siblings(".visualization").removeClass("hidden")})},$el.on("submit","form",function(event){return event.preventDefault(),submit()}),$el.on("click","form a.button-green",function(event){return event.preventDefault(),submit()}),$el.on("click",".show-add-new",function(event){return event.preventDefault(),$el.find(".new-value").removeClass("hidden"),goToBottomList(!0)}),$el.on("click",".add-new",debounce(2e3,function(event){var form,promise;return event.preventDefault(),form=$el.find(".new-value").parents("form").checksley(),form.validate()?($scope.newValue.project=$scope.project.id,$scope.newValue.order=$scope.maxValueOrder?$scope.maxValueOrder+1:1,promise=$repo.create(valueType,$scope.newValue),promise.then(function(){return function(){return $ctrl.loadValues().then(function(){return animationFrame.add(function(){return goToBottomList()})}),$el.find(".new-value").addClass("hidden"),initializeNewValue()}}(this)),promise.then(null,function(data){return $confirm.notify("error"),form.setErrors(data)})):void 0})),$el.on("click",".delete-new",function(event){return event.preventDefault(),$el.find(".new-value").hide(),initializeNewValue()}),$el.on("click",".edit-value",function(event){var editionRow,row,target;return event.preventDefault(),target=angular.element(event.currentTarget),row=target.parents(".row.table-main"),row.addClass("hidden"),editionRow=row.siblings(".edition"),editionRow.removeClass("hidden"),editionRow.find("input:visible").first().focus().select()}),$el.on("keyup",".edition input",function(event){var target;return 13===event.keyCode?(target=angular.element(event.currentTarget),saveValue(target)):27===event.keyCode?(target=angular.element(event.currentTarget),cancel(target)):void 0}),$el.on("click",".save",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),saveValue(target)}),$el.on("click",".cancel",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),cancel(target)}),$el.on("click",".delete-value",function(event){var choices,replacement,subtitle,target,title,value;return event.preventDefault(),target=angular.element(event.currentTarget),value=target.scope().value,choices={},_.each($scope.values,function(option){return value.id!==option.id?choices[option.id]=option.name:void 0}),title="Delete value",subtitle=value.name,replacement="All items with this value will be changed to",0===_.keys(choices).length?$confirm.error("You can't delete all values."):$confirm.askChoice(title,subtitle,choices,replacement).then(function(response){var onError,onSucces;return onSucces=function(){return $ctrl.loadValues()["finally"](function(){return response.finish()})},onError=function(){return $confirm.notify("error")},$repo.remove(value,{moveTo:response.selected}).then(onSucces,onError)})})},link=function($scope,$el,$attrs){return linkDragAndDrop($scope,$el,$attrs),linkValue($scope,$el,$attrs),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgProjectValues",["$log","$tgRepo","$tgConfirm","$tgLocation","animationFrame",ProjectValuesDirective]),ColorSelectionDirective=function(){var link;return link=function($scope,$el,$attrs,$model){var $ctrl;return $ctrl=$el.controller(),$scope.$watch($attrs.ngModel,function(element){return $scope.color=element.color}),$el.on("click",".current-color",function(event){var body,target;return event.preventDefault(),event.stopPropagation(),target=angular.element(event.currentTarget),$el.find(".select-color").hide(),target.siblings(".select-color").show(),body=angular.element("body"),body.on("click",function(){return function(event){return 0===angular.element(event.target).parent(".select-color").length?($el.find(".select-color").hide(),body.unbind("click")):void 0}}(this))}),$el.on("click",".select-color .color",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),$scope.$apply(function(){return $model.$modelValue.color=target.data("color")}),$el.find(".select-color").hide()}),$el.on("click",".select-color .selected-color",function(event){return event.preventDefault(),$scope.$apply(function(){return $model.$modelValue.color=$scope.color}),$el.find(".select-color").hide()}),$scope.$on("$destroy",function(){return $el.off()})},{link:link,require:"ngModel"}},module.directive("tgColorSelection",ColorSelectionDirective)}.call(this),function(){var EditRoleDirective,NewRoleDirective,RolePermissionsDirective,RolesController,RolesDirective,bindMethods,bindOnce,debounce,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child},__indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};taiga=this.taiga,mixOf=this.taiga.mixOf,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,bindMethods=this.taiga.bindMethods,module=angular.module("taigaAdmin"),RolesController=function(_super){function RolesController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,appTitle){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.appTitle=appTitle,bindMethods(this),this.scope.sectionName="Permissions",this.scope.project={},this.scope.anyComputableRole=!0,promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Roles - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this))}return __extends(RolesController,_super),RolesController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$appTitle"],RolesController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),_this.scope.anyComputableRole=_.some(_.map(project.roles,function(point){return point.computable})),project}}(this))},RolesController.prototype.loadRoles=function(){return this.rs.roles.list(this.scope.projectId).then(function(_this){return function(data){return _this.scope.roles=data,_this.scope.role=_this.scope.roles[0],data}}(this))},RolesController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadUsersAndRoles()}}(this)).then(function(_this){return function(){return _this.loadRoles()}}(this))},RolesController.prototype.setRole=function(role){return this.scope.role=role,this.scope.$broadcast("role:changed",this.scope.role)},RolesController.prototype["delete"]=function(){var choices,replacement,role,subtitle,title,warning,_i,_len,_ref;for(title="Delete Role",subtitle=this.scope.role.name,replacement="All the users with this role will be moved to",warning="Be careful, all role estimations will be removed",choices={},_ref=this.scope.roles,_i=0,_len=_ref.length;_len>_i;_i++)role=_ref[_i],role.id!==this.scope.role.id&&(choices[role.id]=role.name);return 0===_.keys(choices).length?this.confirm.error("You can't delete all values."):this.confirm.askChoice(title,subtitle,choices,replacement,warning).then(function(_this){return function(response){var promise;return promise=_this.repo.remove(_this.scope.role,{moveTo:response.selected}),promise.then(function(){return _this.loadProject(),_this.loadRoles()["finally"](function(){return response.finish()})}),promise.then(null,function(){return _this.confirm.notify("error")})}}(this))},RolesController.prototype.setComputable=debounce(2e3,function(){var onError,onSuccess;return onSuccess=function(_this){return function(){return _this.confirm.notify("success"),_this.loadProject()}}(this),onError=function(_this){return function(){return _this.confirm.notify("error"),_this.scope.role.revert()}}(this),this.repo.save(this.scope.role).then(onSuccess,onError)}),RolesController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("RolesController",RolesController),EditRoleDirective=function($repo,$confirm){var link;return link=function($scope,$el){var submit,toggleView;return toggleView=function(){return $el.find(".total").toggle(),$el.find(".edit-role").toggle()},submit=function(){var promise;return $scope.role.name=$el.find("input").val(),promise=$repo.save($scope.role),promise.then(function(){return $confirm.notify("success")}),promise.then(null,function(){return $confirm.notify("error")}),toggleView()},$el.on("click","a.icon-edit",function(){return toggleView(),$el.find("input").focus(),$el.find("input").val($scope.role.name)}),$el.on("click","a.save",submit),$el.on("keyup","input",function(event){return 13===event.keyCode?submit():27===event.keyCode?toggleView():void 0}),$scope.$on("role:changed",function(){return $el.find(".edit-role").is(":visible")?toggleView():void 0}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgEditRole",["$tgRepo","$tgConfirm",EditRoleDirective]),RolesDirective=function(){var link;return link=function($scope,$el){var $ctrl;return $ctrl=$el.controller(),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgRoles",RolesDirective),NewRoleDirective=function($tgrepo,$confirm){var DEFAULT_PERMISSIONS,link;return DEFAULT_PERMISSIONS=["view_project","view_milestones","view_us","view_tasks","view_issues"],link=function($scope,$el){var $ctrl;return $ctrl=$el.controller(),$scope.$on("$destroy",function(){return $el.off()}),$el.on("click","a.add-button",function(event){return event.preventDefault(),$el.find(".new").removeClass("hidden"),$el.find(".new").focus(),$el.find(".add-button").hide()}),$el.on("keyup",".new",function(event){var newRole,onError,onSuccess,target;return event.preventDefault(),13===event.keyCode?(target=angular.element(event.currentTarget),newRole={project:$scope.projectId,name:target.val(),permissions:DEFAULT_PERMISSIONS,order:_.max($scope.roles,function(r){return r.order}).order+1,computable:!1},$el.find(".new").addClass("hidden"),$el.find(".new").val(""),onSuccess=function(role){return $scope.roles.push(role),$ctrl.setRole(role),$el.find(".add-button").show(),$ctrl.loadProject()},onError=function(){return $confirm.notify("error")},$tgrepo.create("roles",newRole).then(onSuccess,onError)):27===event.keyCode?(target=angular.element(event.currentTarget),$el.find(".new").addClass("hidden"),$el.find(".new").val(""),$el.find(".add-button").show()):void 0})},{link:link}},module.directive("tgNewRole",["$tgRepo","$tgConfirm",NewRoleDirective]),RolePermissionsDirective=function($rootscope,$repo,$confirm){var baseTemplate,categoryTemplate,link,resumeTemplate;return resumeTemplate=_.template('
    <%- category.name %>
    \n
    \n
    <%- category.activePermissions %>/<%- category.permissions.length %>
    \n <% _.each(category.permissions, function(permission) { %>\n
    \n <% }) %>\n
    \n
    '),categoryTemplate=_.template('
    \n
    \n
    \n
    \n
    \n <% _.each(category.permissions, function(permission) { %>\n
    \n <%- permission.description %>\n
    \n checked="checked"<% } %>/>\n
    \n Yes\n No\n
    \n
    \n <% }) %>\n
    \n
    \n
    '),baseTemplate=_.template('
    '),link=function($scope,$el,$attrs){var $ctrl,generateCategoriesFromRole,renderCategory,renderPermissions,renderResume;return $ctrl=$el.controller(),generateCategoriesFromRole=function(role){var categories,issuePermissions,milestonePermissions,setActivePermissions,setActivePermissionsPerCategory,taskPermissions,userStoryPermissions,wikiPermissions;return setActivePermissions=function(permissions){return _.map(permissions,function(x){var _ref;return _.extend({},x,{active:(_ref=x.key,__indexOf.call(role.permissions,_ref)>=0)})})},setActivePermissionsPerCategory=function(category){return _.map(category,function(x){return _.extend({},x,{activePermissions:_.filter(x.permissions,"active").length})})},categories=[],milestonePermissions=[{key:"view_milestones",description:"View sprints"},{key:"add_milestone",description:"Add sprint"},{key:"modify_milestone",description:"Modify sprint"},{key:"delete_milestone",description:"Delete sprint"}],categories.push({name:"Sprints",permissions:setActivePermissions(milestonePermissions)}),userStoryPermissions=[{key:"view_us",description:"View user story"},{key:"add_us",description:"Add user story"},{key:"modify_us",description:"Modify user story"},{key:"delete_us",description:"Delete user story"}],categories.push({name:"User Stories",permissions:setActivePermissions(userStoryPermissions)}),taskPermissions=[{key:"view_tasks",description:"View tasks"},{key:"add_task",description:"Add task"},{key:"modify_task",description:"Modify task"},{key:"delete_task",description:"Delete task"}],categories.push({name:"Tasks",permissions:setActivePermissions(taskPermissions)}),issuePermissions=[{key:"view_issues",description:"View issues"},{key:"add_issue",description:"Add issue"},{key:"modify_issue",description:"Modify issue"},{key:"delete_issue",description:"Delete issue"}],categories.push({name:"Issues",permissions:setActivePermissions(issuePermissions)}),wikiPermissions=[{key:"view_wiki_pages",description:"View wiki pages"},{key:"add_wiki_page",description:"Add wiki page"},{key:"modify_wiki_page",description:"Modify wiki page"},{key:"delete_wiki_page",description:"Delete wiki page"},{key:"view_wiki_links",description:"View wiki links"},{key:"add_wiki_link",description:"Add wiki link"},{key:"delete_wiki_link",description:"Delete wiki link"}],categories.push({name:"Wiki",permissions:setActivePermissions(wikiPermissions)}),setActivePermissionsPerCategory(categories)},renderResume=function(element,category){return element.find(".resume").html(resumeTemplate({category:category}))},renderCategory=function(category,index){var html;return html=categoryTemplate({category:category,index:index}),html=angular.element(html),renderResume(html,category),html},renderPermissions=function(){var html;return $el.off(),html=baseTemplate(),_.each(generateCategoriesFromRole($scope.role),function(category,index){return html=angular.element(html).append(renderCategory(category,index))}),$el.html(html),$el.on("click",".resume",function(event){var target;return event.preventDefault(),target=angular.element(event.currentTarget),target.next().toggleClass("open")}),$el.on("change",".category-item input",function(event){var getActivePermissions,onError,onSuccess,target;return getActivePermissions=function(){var activePermissions;return activePermissions=_.filter($el.find(".category-item input"),function(t){return angular.element(t).is(":checked")}),activePermissions=_.sortBy(_.map(activePermissions,function(t){var permission;return permission=angular.element(t).parents(".category-item").data("id")})),activePermissions.push("view_project"),activePermissions},target=angular.element(event.currentTarget),$scope.role.permissions=getActivePermissions(),onSuccess=function(role){var categories,categoryId;return categories=generateCategoriesFromRole(role),categoryId=target.parents(".category-config").data("id"),renderResume(target.parents(".category-config"),categories[categoryId]),$rootscope.$broadcast("projects:reload"),$confirm.notify("success"),$ctrl.loadProject()},onError=function(){return $confirm.notify("error"),target.prop("checked",!target.prop("checked")),$scope.role.permissions=getActivePermissions()},$repo.save($scope.role).then(onSuccess,onError)})},$scope.$on("$destroy",function(){return $el.off()}),$scope.$on("role:changed",function(){return renderPermissions()}),bindOnce($scope,$attrs.ngModel,renderPermissions)},{link:link}},module.directive("tgRolePermissions",["$rootScope","$tgRepo","$tgConfirm",RolePermissionsDirective])}.call(this),function(){var BitbucketController,BitbucketWebhooksDirective,GithubController,GithubWebhooksDirective,GitlabController,GitlabWebhooksDirective,SelectInputText,ValidOriginIpsDirective,bindMethods,debounce,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,bindMethods=this.taiga.bindMethods,debounce=this.taiga.debounce,module=angular.module("taigaAdmin"),GithubController=function(_super){function GithubController(scope,repo,rs,params,appTitle){var promise;this.scope=scope,this.repo=repo,this.rs=rs,this.params=params,this.appTitle=appTitle,bindMethods(this),this.scope.sectionName="Github",this.scope.project={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Github - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this))}return __extends(GithubController,_super),GithubController.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$appTitle"],GithubController.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"github").then(function(_this){return function(github){return _this.scope.github=github}}(this))},GithubController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},GithubController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadModules()}}(this))},GithubController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("GithubController",GithubController),GitlabController=function(_super){function GitlabController(scope,repo,rs,params,appTitle){var promise; +this.scope=scope,this.repo=repo,this.rs=rs,this.params=params,this.appTitle=appTitle,bindMethods(this),this.scope.sectionName="Gitlab",this.scope.project={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Gitlab - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(_this){return function(){return _this.loadModules()}}(this))}return __extends(GitlabController,_super),GitlabController.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$appTitle"],GitlabController.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"gitlab").then(function(_this){return function(gitlab){return _this.scope.gitlab=gitlab}}(this))},GitlabController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},GitlabController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadModules()}}(this))},GitlabController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("GitlabController",GitlabController),BitbucketController=function(_super){function BitbucketController(scope,repo,rs,params,appTitle){var promise;this.scope=scope,this.repo=repo,this.rs=rs,this.params=params,this.appTitle=appTitle,bindMethods(this),this.scope.sectionName="Bitbucket",this.scope.project={},promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set("Bitbucket - "+_this.scope.project.name)}}(this)),promise.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(_this){return function(){return _this.loadModules()}}(this))}return __extends(BitbucketController,_super),BitbucketController.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$appTitle"],BitbucketController.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"bitbucket").then(function(_this){return function(bitbucket){return _this.scope.bitbucket=bitbucket}}(this))},BitbucketController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},BitbucketController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadModules()}}(this))},BitbucketController}(mixOf(taiga.Controller,taiga.PageMixin,taiga.FiltersMixin)),module.controller("BitbucketController",BitbucketController),SelectInputText=function(){var link;return link=function($scope,$el){return $el.on("click",".select-input-content",function(){return $el.find("input").select(),$el.find(".help-copy").addClass("visible")})},{link:link}},module.directive("tgSelectInputText",SelectInputText),GithubWebhooksDirective=function($repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley({onlyOneErrorElement:!0}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.saveAttribute($scope.github,"github"),promise.then(function(){return $loading.finish(submitButton),$confirm.notify("success")}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgGithubWebhooks",["$tgRepo","$tgConfirm","$tgLoading",GithubWebhooksDirective]),GitlabWebhooksDirective=function($repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley({onlyOneErrorElement:!0}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.saveAttribute($scope.gitlab,"gitlab"),promise.then(function(){return $loading.finish(submitButton),$confirm.notify("success"),$scope.$emit("project:modules:reload")}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgGitlabWebhooks",["$tgRepo","$tgConfirm","$tgLoading",GitlabWebhooksDirective]),BitbucketWebhooksDirective=function($repo,$confirm,$loading){var link;return link=function($scope,$el){var form,submit,submitButton;return form=$el.find("form").checksley({onlyOneErrorElement:!0}),submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.saveAttribute($scope.bitbucket,"bitbucket"),promise.then(function(){return $loading.finish(submitButton),$confirm.notify("success"),$scope.$emit("project:modules:reload")}),promise.then(null,function(data){return $loading.finish(submitButton),form.setErrors(data),data._error_message?$confirm.notify("error",data._error_message):void 0})):void 0}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit)},{link:link}},module.directive("tgBitbucketWebhooks",["$tgRepo","$tgConfirm","$tgLoading",BitbucketWebhooksDirective]),ValidOriginIpsDirective=function(){var link;return link=function($scope,$el,$attrs,$ngModel){return $ngModel.$parsers.push(function(value){return value=$.trim(value),""===value?[]:value.split(",")})},{link:link,restrict:"EA",require:"ngModel"}},module.directive("tgValidOriginIps",ValidOriginIpsDirective)}.call(this),function(){var CreateProject,DeleteProjectDirective,bindOnce,debounce,module,taiga,timeout;taiga=this.taiga,bindOnce=this.taiga.bindOnce,timeout=this.taiga.timeout,debounce=this.taiga.debounce,module=angular.module("taigaProject"),CreateProject=function($rootscope,$repo,$confirm,$location,$navurls,$rs,$projectUrl,$loading,lightboxService,$cacheFactory){var link;return link=function($scope,$el){var form,onErrorSubmit,onSuccessSubmit,submit,submitButton;return $scope.data={},$scope.templates=[],form=$el.find("form").checksley({onlyOneErrorElement:!0}),onSuccessSubmit=function(response){return $cacheFactory.get("$http").removeAll(),$loading.finish(submitButton),$rootscope.$broadcast("projects:reload"),$confirm.notify("success","Success"),$location.url($projectUrl.get(response)),lightboxService.close($el)},onErrorSubmit=function(response){var error_field,error_step,selectors,_i,_len,_ref;for($loading.finish(submitButton),form.setErrors(response),selectors=[],_ref=_.keys(response),_i=0,_len=_ref.length;_len>_i;_i++)error_field=_ref[_i],selectors.push("[name="+error_field+"]");return $el.find(".active").removeClass("active"),error_step=$el.find(selectors.join(",")).first().parents(".wizard-step"),error_step.addClass("active"),$el.find(".progress-bar").removeClass().addClass("progress-bar").addClass(error_step.data("step"))},submit=function(){return function(event){var promise;return event.preventDefault(),form.validate()?($loading.start(submitButton),promise=$repo.create("projects",$scope.data),promise.then(onSuccessSubmit,onErrorSubmit)):void 0}}(this),$scope.$on("projects:create",function(){return $scope.data={total_story_points:100,total_milestones:5},$scope.templates.length?$scope.data.creation_template=_.head(_.filter($scope.templates,function(x){return"scrum"===x.slug})).id:$rs.projects.templates().then(function(){return function(result){return $scope.templates=result,$scope.data.creation_template=_.head(_.filter($scope.templates,function(x){return"scrum"===x.slug})).id}}(this)),$el.find(".active").removeClass("active"),$el.find(".create-step1").addClass("active"),lightboxService.open($el),timeout(600,function(){return $el.find(".progress-bar").addClass("step1")})}),$el.on("click",".button-next",function(event){var current,field,next,step,valid,_i,_len,_ref;for(event.preventDefault(),current=$el.find(".active"),valid=!0,_ref=form.fields,_i=0,_len=_ref.length;_len>_i;_i++)field=_ref[_i],current.find("[name="+field.element.attr("name")+"]").length&&(valid=field.validate()!==!1&&valid);return valid?(next=current.next(),current.toggleClass("active"),next.toggleClass("active"),step=next.data("step"),$el.find(".progress-bar").removeClass().addClass("progress-bar").addClass(step)):void 0}),$el.on("click",".button-prev",function(event){var current,prev,step;return event.preventDefault(),current=$el.find(".active"),prev=current.prev(),current.toggleClass("active"),prev.toggleClass("active"),step=prev.data("step"),$el.find(".progress-bar").removeClass().addClass("progress-bar").addClass(step)}),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$el.on("click",".close",function(event){return event.preventDefault(),lightboxService.close($el)})},{link:link}},module.directive("tgLbCreateProject",["$rootScope","$tgRepo","$tgConfirm","$location","$tgNavUrls","$tgResources","$projectUrl","$tgLoading","lightboxService","$cacheFactory",CreateProject]),DeleteProjectDirective=function($repo,$rootscope,$auth,$location,$navUrls,$confirm,lightboxService,tgLoader){var link;return link=function($scope,$el){var projectToDelete,submit;return projectToDelete=null,$scope.$on("deletelightbox:new",function(ctx,project){return lightboxService.open($el),projectToDelete=project}),$scope.$on("$destroy",function(){return $el.off()}),submit=function(){var promise;return tgLoader.start(),lightboxService.close($el),promise=$repo.remove(projectToDelete),promise.then(function(){return tgLoader.pageLoaded(),$rootscope.$broadcast("projects:reload"),$location.path($navUrls.resolve("home")),$confirm.notify("success")}),promise.then(null,function(){return $confirm.notify("error"),lightboxService.close($el)})},$el.on("click",".button-red",function(event){return event.preventDefault(),lightboxService.close($el)}),$el.on("click",".button-green",function(event){return event.preventDefault(),submit()})},{link:link}},module.directive("tgLbDeleteProject",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","$tgConfirm","lightboxService","tgLoader",DeleteProjectDirective])}.call(this),function(){var ProjectController,ProjectsController,ProjectsListDirective,ProjectsPaginationDirective,bindOnce,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,module=angular.module("taigaProject"),bindOnce=this.taiga.bindOnce,ProjectsController=function(_super){function ProjectsController(scope,q,rs,rootscope,navUrls,auth,location,appTitle,projectUrl,tgLoader){var promise;this.scope=scope,this.q=q,this.rs=rs,this.rootscope=rootscope,this.navUrls=navUrls,this.auth=auth,this.location=location,this.appTitle=appTitle,this.projectUrl=projectUrl,this.appTitle.set("Projects"),this.auth.isAuthenticated()||this.location.path(this.navUrls.resolve("login")),this.user=this.auth.getUser(),this.projects=[],promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.scope.$emit("projects:loaded")}}(this)),promise.then(null,this.onInitialDataError.bind(this)),promise["finally"](tgLoader.pageLoaded)}return __extends(ProjectsController,_super),ProjectsController.$inject=["$scope","$q","$tgResources","$rootScope","$tgNavUrls","$tgAuth","$tgLocation","$appTitle","$projectUrl","tgLoader"],ProjectsController.prototype.loadInitialData=function(){return this.rs.projects.list().then(function(_this){return function(projects){var project,_i,_len;for(_this.projects={recents:projects.slice(0,8),all:projects},_i=0,_len=projects.length;_len>_i;_i++)project=projects[_i],project.url=_this.projectUrl.get(project);return projects}}(this))},ProjectsController.prototype.newProject=function(){return this.rootscope.$broadcast("projects:create")},ProjectsController.prototype.logout=function(){return this.auth.logout(),this.location.path(this.navUrls.resolve("login"))},ProjectsController}(taiga.Controller),module.controller("ProjectsController",ProjectsController),ProjectController=function(_super){function ProjectController(scope,rs,repo,params,q,rootscope,appTitle,location,navUrls){var promise;this.scope=scope,this.rs=rs,this.repo=repo,this.params=params,this.q=q,this.rootscope=rootscope,this.appTitle=appTitle,this.location=location,this.navUrls=navUrls,promise=this.loadInitialData(),promise.then(function(_this){return function(){return _this.appTitle.set(_this.scope.project.name),_this.scope.$emit("regenerate:project-pagination")}}(this)),promise.then(null,this.onInitialDataError.bind(this))}return __extends(ProjectController,_super),ProjectController.$inject=["$scope","$tgResources","$tgRepo","$routeParams","$q","$rootScope","$appTitle","$tgLocation","$tgNavUrls"],ProjectController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadPageData()}}(this)).then(function(_this){return function(){return _this.scope.$emit("project:loaded",_this.scope.project)}}(this))},ProjectController.prototype.loadPageData=function(){return this.q.all([this.loadProjectStats(),this.loadProject()])},ProjectController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,project}}(this))},ProjectController.prototype.loadProjectStats=function(){return this.rs.projects.stats(this.scope.projectId).then(function(_this){return function(stats){return _this.scope.stats=stats,stats}}(this))},ProjectController}(taiga.Controller),module.controller("ProjectController",ProjectController),ProjectsPaginationDirective=function(){var link;return link=function($scope,$el){var checkButtonVisibility,container,containerSize,hasNextPage,hasPagination,hasPrevPage,hide,nextBtn,nextPage,pageSize,prevBtn,prevPage,remove,render,visible;return prevBtn=$el.find(".v-pagination-previous"),nextBtn=$el.find(".v-pagination-next"),container=$el.find("ul"),pageSize=0,containerSize=0,render=function(){return pageSize=$el.find(".v-pagination-list").height(),container.find("li").length&&hasPagination()?(hasNextPage()?visible(nextBtn):hide(nextBtn),hasPrevPage()?visible(prevBtn):hide(prevBtn)):remove()},hasPagination=function(){return containerSize=container.height(),containerSize>pageSize},hasPrevPage=function(top){return null==top&&(top=-parseInt(container.css("top"),10)||0),0!==top},hasNextPage=function(top){return containerSize=container.height(),top||(top=-parseInt(container.css("top"),10)||0),containerSize>pageSize&&containerSize>top+pageSize},nextPage=function(callback){var lastLi,maxTop,newTop,top;return top=parseInt(container.css("top"),10),newTop=top-pageSize,lastLi=$el.find(".v-pagination-list li:last-child"),maxTop=-(lastLi.position().top+lastLi.outerHeight()-pageSize),maxTop>newTop&&(newTop=maxTop),container.animate({top:newTop},callback),newTop},prevPage=function(callback){var newTop,top;return top=parseInt(container.css("top"),10),newTop=top+pageSize,newTop>0&&(newTop=0),container.animate({top:newTop},callback),newTop},visible=function(element){return element.css("visibility","visible")},hide=function(element){return element.css("visibility","hidden")},checkButtonVisibility=function(){},remove=function(){return container.css("top",0),hide(prevBtn),hide(nextBtn)},$el.on("click",".v-pagination-previous",function(event){var newTop;return event.preventDefault(),container.is(":animated")?void 0:(visible(nextBtn),newTop=prevPage(),hasPrevPage(newTop)?void 0:hide(prevBtn))}),$el.on("click",".v-pagination-next",function(event){var newTop;return event.preventDefault(),container.is(":animated")?void 0:(visible(prevBtn),newTop=-nextPage(),hasNextPage(newTop)?void 0:hide(nextBtn))}),$scope.$on("regenerate:project-pagination",function(){return remove(),render()}),$(window).on("resize.projects-pagination",render),$scope.$on("$destroy",function(){return $(window).off("resize.projects-pagination")})},{link:link}},module.directive("tgProjectsPagination",["$timeout",ProjectsPaginationDirective]),ProjectsListDirective=function($compile){var link,template;return template=_.template('
    \n
    \n \n
    \n \n
    \n \n
    \n
    '),link=function($scope,$el){var render;return render=function(projects){return $el.html($compile(template({projects:projects}))($scope)),$scope.$emit("regenerate:project-pagination")},$scope.$watch("projects",function(projects){return null!=projects?render(projects):void 0})},{link:link}},module.directive("tgProjectsList",["$compile",ProjectsListDirective])}.call(this),function(){var BindHtmlDirective,BindOnceAltDirective,BindOnceBindDirective,BindOnceHrefDirective,BindOnceHtmlDirective,BindOnceRefDirective,BindOnceSrcDirective,BindOnceTitleDirective,BindTitleDirective,bindOnce,module;bindOnce=this.taiga.bindOnce,BindOnceBindDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoBind,function(val){return $el.text(val)})},{link:link}},BindOnceHtmlDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoHtml,function(val){return $el.html(val)})},{link:link}},BindOnceRefDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoRef,function(val){return $el.html("#"+val+" ")})},{link:link}},BindOnceSrcDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoSrc,function(val){return $el.attr("src",val)})},{link:link}},BindOnceHrefDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoHref,function(val){return $el.attr("href",val)})},{link:link}},BindOnceAltDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoAlt,function(val){return $el.attr("alt",val)})},{link:link}},BindOnceTitleDirective=function(){var link;return link=function($scope,$el,$attrs){return bindOnce($scope,$attrs.tgBoTitle,function(val){return $el.attr("title",val)})},{link:link}},BindTitleDirective=function(){var link;return link=function($scope,$el,$attrs){return $scope.$watch($attrs.tgTitleHtml,function(val){return null!=val?$el.attr("title",val):void 0})},{link:link}},BindHtmlDirective=function(){var link;return link=function($scope,$el,$attrs){return $scope.$watch($attrs.tgBindHtml,function(val){return null!=val?$el.html(val):void 0})},{link:link}},module=angular.module("taigaBase"),module.directive("tgBoBind",BindOnceBindDirective),module.directive("tgBoHtml",BindOnceHtmlDirective),module.directive("tgBoRef",BindOnceRefDirective),module.directive("tgBoSrc",BindOnceSrcDirective),module.directive("tgBoHref",BindOnceHrefDirective),module.directive("tgBoAlt",BindOnceAltDirective),module.directive("tgBoTitle",BindOnceTitleDirective),module.directive("tgBindTitle",BindTitleDirective),module.directive("tgBindHtml",BindHtmlDirective)}.call(this),function(){var ConfigurationService,defaults,module;defaults={api:"http://localhost:8000/api/v1/",debug:!0,lang:"en"},ConfigurationService=function(){function ConfigurationService(localconf){this.config=_.merge(_.clone(defaults,!0),localconf)}return ConfigurationService.$inject=["localconf"],ConfigurationService.prototype.get=function(key,defaultValue){return null==defaultValue&&(defaultValue=null),_.has(this.config,key)?this.config[key]:defaultValue},ConfigurationService}(),module=angular.module("taigaBase"),module.service("$tgConfig",ConfigurationService),module.value("localconf",null)}.call(this),function(){var FiltersStorageService,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,FiltersStorageService=function(_super){function FiltersStorageService(storage,params){this.storage=storage,this.params=params}return __extends(FiltersStorageService,_super),FiltersStorageService.$inject=["$tgStorage","$routeParams"],FiltersStorageService.prototype.generateHash=function(components){return null==components&&(components=[]),components=_.map(components,function(x){return JSON.stringify(x)}),hex_sha1(components.join(":"))},FiltersStorageService}(taiga.Service)}.call(this),function(){var HttpService,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,HttpService=function(_super){function HttpService(http,q,storage){this.http=http,this.q=q,this.storage=storage,HttpService.__super__.constructor.call(this)}return __extends(HttpService,_super),HttpService.$inject=["$http","$q","$tgStorage"],HttpService.prototype.headers=function(){var token;return token=this.storage.get("token"),token?{Authorization:"Bearer "+token}:{}},HttpService.prototype.request=function(options){return options.headers=_.merge({},options.headers||{},this.headers()),_.isPlainObject(options.data)&&(options.data=JSON.stringify(options.data)),this.http(options)},HttpService.prototype.get=function(url,params,options){return options=_.merge({method:"GET",url:url},options),params&&(options.params=params),this.request(options)},HttpService.prototype.post=function(url,data,params,options){return options=_.merge({method:"POST",url:url},options),data&&(options.data=data),params&&(options.params=params),this.request(options)},HttpService.prototype.put=function(url,data,params,options){return options=_.merge({method:"PUT",url:url},options),data&&(options.data=data),params&&(options.params=params),this.request(options)},HttpService.prototype.patch=function(url,data,params,options){return options=_.merge({method:"PATCH",url:url},options),data&&(options.data=data),params&&(options.params=params),this.request(options)},HttpService.prototype["delete"]=function(url,data,params,options){return options=_.merge({method:"DELETE",url:url},options),data&&(options.data=data),params&&(options.params=params),this.request(options)},HttpService}(taiga.Service),module=angular.module("taigaBase"),module.service("$tgHttp",HttpService)}.call(this),function(){var I18nDirective,I18nService,bindOnce,defaults,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,bindOnce=this.taiga.bindOnce,defaults={ns:"app",fallbackLng:"en",async:!1,lng:"en"},I18nService=function(_super){function I18nService(rootscope,localesEn){this.rootscope=rootscope,this.options=_.clone(defaults,!0),this.options.resStore={en:{app:localesEn}}}return __extends(I18nService,_super),I18nService.prototype.setLanguage=function(language){return i18n.setLng(language),this.rootscope.currentLang=language,this.rootscope.$broadcast("i18n:changeLang",language)},I18nService.prototype.initialize=function(){return i18n.init(this.options),this.rootscope.t=i18n.t},I18nService.prototype.t=function(path,opts){return i18n.t(path,opts)},I18nService}(taiga.Service),I18nDirective=function($rootscope,$i18n){var link;return link=function($scope,$el,$attrs){var ns,options,opts,v,values,_i,_len,_ref,_results;for(values=$attrs.tr.split(","),options=$attrs.trOpts||"{}",opts=$scope.$eval(options),_results=[],_i=0,_len=values.length;_len>_i;_i++)v=values[_i],-1===v.indexOf(":")?_results.push($el.html(_.escape($i18n.t(v,opts)))):(_ref=v.split(":"),ns=_ref[0],v=_ref[1],_results.push($el.attr(ns,_.escape($i18n.t(v,opts)))));return _results},{link:link,restrict:"A",scope:!1}},module=angular.module("taigaBase"),module.service("$tgI18n",["$rootScope","localesEn",I18nService]),module.directive("tr",["$rootScope","$tgI18n",I18nDirective])}.call(this),function(){var locationFactory,module;locationFactory=function($location,$route){return $location.noreload=function(scope){var lastRoute,un;return lastRoute=$route.current,un=scope.$on("$locationChangeSuccess",function(){return $route.current=lastRoute,un()}),$location},$location},module=angular.module("taigaBase"),module.factory("$tgLocation",["$location","$route","$rootScope",locationFactory])}.call(this),function(){var Model,ModelService,module,provider,taiga,__indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1},__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};Model=function(){function Model(name,data,dataTypes){this._attrs=data,this._name=name,this._dataTypes=dataTypes,this.setAttrs(data),this.initialize()}return Model.prototype.clone=function(){var instance;return instance=new Model(this._name,this._attrs,this._dataTypes),instance._modifiedAttrs=this._modifiedAttrs,instance._isModified=this._isModified,instance},Model.prototype.applyCasts=function(){var attrName,castMethod,castName,_ref,_results;_ref=this._dataTypes,_results=[];for(attrName in _ref)castName=_ref[attrName],castMethod=service.casts[castName],castMethod&&_results.push(this._attrs[attrName]=castMethod(this._attrs[attrName]));return _results},Model.prototype.getIdAttrName=function(){return"id"},Model.prototype.getName=function(){return this._name},Model.prototype.getAttrs=function(patch){return null==patch&&(patch=!1),null!=this._attrs.version&&(this._modifiedAttrs.version=this._attrs.version),patch?_.extend({},this._modifiedAttrs):_.extend({},this._attrs,this._modifiedAttrs)},Model.prototype.setAttrs=function(attrs){return this._attrs=attrs,this._modifiedAttrs={},this.applyCasts(),this._isModified=!1},Model.prototype.setAttr=function(name,value){return this._modifiedAttrs[name]=value,this._isModified=!0},Model.prototype.initialize=function(){var getter,self,setter;return self=this,getter=function(name){return function(){return"string"==typeof name&&"__"===name.substr(0,2)?self[name]:__indexOf.call(_.keys(self._modifiedAttrs),name)<0?self._attrs[name]:self._modifiedAttrs[name]}},setter=function(name){return function(value){return"string"==typeof name&&"__"===name.substr(0,2)?void(self[name]=value):void(self._attrs[name]!==value?(self._modifiedAttrs[name]=value,self._isModified=!0):delete self._modifiedAttrs[name])}},_.each(this._attrs,function(value,name){var options;return options={get:getter(name),set:setter(name),enumerable:!0,configurable:!0},Object.defineProperty(self,name,options)})},Model.prototype.serialize=function(){var data;return data={data:_.clone(this._attrs),name:this._name},JSON.stringify(data)},Model.prototype.isModified=function(){return this._isModified},Model.prototype.isAttributeModified=function(attribute){return null!=this._modifiedAttrs[attribute]},Model.prototype.markSaved=function(){return this._isModified=!1,this._attrs=this.getAttrs(),this._modifiedAttrs={}},Model.prototype.revert=function(){return this._modifiedAttrs={},this._isModified=!1},Model.desSerialize=function(sdata){var ddata,model;return ddata=JSON.parse(sdata),model=new Model(ddata.url,ddata.data)},Model}(),taiga=this.taiga,ModelService=function(_super){function ModelService(q,urls,storage,http){this.q=q,this.urls=urls,this.storage=storage,this.http=http,ModelService.__super__.constructor.call(this)}return __extends(ModelService,_super),ModelService.$inject=["$q","$tgUrls","$tgStorage","$tgHttp"],ModelService}(taiga.Service),provider=function(){var service;return service={},service.make_model=function(name,data,cls,dataTypes){return null==cls&&(cls=Model),null==dataTypes&&(dataTypes={}),new cls(name,data,dataTypes)},service.cls=Model,service.casts={"int":function(value){return parseInt(value,10)},"float":function(value){return parseFloat(value,10)}},service},module=angular.module("taigaBase"),module.factory("$tgModel",["$q","$http","$tgUrls","$tgStorage",provider])}.call(this),function(){var NavigationUrlsDirective,NavigationUrlsService,bindOnce,module,taiga,trim,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,trim=this.taiga.trim,bindOnce=this.taiga.bindOnce,module=angular.module("taigaBase"),NavigationUrlsService=function(_super){function NavigationUrlsService(){this.urls={}}return __extends(NavigationUrlsService,_super),NavigationUrlsService.prototype.update=function(urls){return this.urls=_.merge({},this.urls,urls||{})},NavigationUrlsService.prototype.formatUrl=function(url,ctx){var replacer;return null==ctx&&(ctx={}),replacer=function(match){return match=trim(match,":"),ctx[match]||"undefined"},url.replace(/(:\w+)/g,replacer)},NavigationUrlsService.prototype.resolve=function(name,ctx){var url;return url=this.urls[name],url?ctx?this.formatUrl(url,ctx):url:""},NavigationUrlsService}(taiga.Service),module.service("$tgNavUrls",NavigationUrlsService),NavigationUrlsDirective=function($navurls,$auth,$q,$location){var bindOnceP,link,parseNav;return bindOnceP=function($scope,attr){var defered;return defered=$q.defer(),bindOnce($scope,attr,function(v){return defered.resolve(v)}),defered.promise},parseNav=function(data,$scope){var name,params,promises,values,_ref;return _ref=_.map(data.split(":"),trim),name=_ref[0],params=_ref[1],params=params?_.map(params.split(","),trim):[],values=_.map(params,function(x){return trim(x.split("=")[1])}),promises=_.map(values,function(x){return bindOnceP($scope,x)}),$q.all(promises).then(function(){var item,key,options,value,_i,_len,_ref1;for(options={},_i=0,_len=params.length;_len>_i;_i++)item=params[_i],_ref1=_.map(item.split("="),trim),key=_ref1[0],value=_ref1[1],options[key]=$scope.$eval(value); +return[name,options]})},link=function($scope,$el,$attrs){return $el.is("a")&&$el.attr("href","#"),$el.on("mouseenter",function(event){var target;return target=$(event.currentTarget),target.data("fullUrl")?void 0:parseNav($attrs.tgNav,$scope).then(function(result){var fullUrl,name,options,url,user;return name=result[0],options=result[1],user=$auth.getUser(),user&&(options.user=user.username),url=$navurls.resolve(name),fullUrl=$navurls.formatUrl(url,options),target.data("fullUrl",fullUrl),target.is("a")&&target.attr("href",fullUrl),$el.on("click",function(event){if(event.preventDefault(),target=$(event.currentTarget),!target.hasClass("noclick"))switch(fullUrl=target.data("fullUrl"),event.which){case 1:return $location.url(fullUrl),$scope.$apply();case 2:return window.open(fullUrl)}})})}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgNav",["$tgNavUrls","$tgAuth","$q","$tgLocation",NavigationUrlsDirective])}.call(this),function(){var RepositoryService,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,RepositoryService=function(_super){function RepositoryService(q,model,storage,http,urls){this.q=q,this.model=model,this.storage=storage,this.http=http,this.urls=urls,RepositoryService.__super__.constructor.call(this)}return __extends(RepositoryService,_super),RepositoryService.$inject=["$q","$tgModel","$tgStorage","$tgHttp","$tgUrls"],RepositoryService.prototype.resolveUrlForModel=function(model){var idAttrName;return idAttrName=model.getIdAttrName(),""+this.urls.resolve(model.getName())+"/"+model[idAttrName]},RepositoryService.prototype.resolveUrlForAttributeModel=function(model){return this.urls.resolve(model.getName(),model.parent)},RepositoryService.prototype.create=function(name,data,dataTypes,extraParams){var defered,promise,url;return null==dataTypes&&(dataTypes={}),null==extraParams&&(extraParams={}),defered=this.q.defer(),url=this.urls.resolve(name),promise=this.http.post(url,JSON.stringify(data)),promise.success(function(_this){return function(_data){return defered.resolve(_this.model.make_model(name,_data,null,dataTypes))}}(this)),promise.error(function(){return function(data){return defered.reject(data)}}(this)),defered.promise},RepositoryService.prototype.remove=function(model,params){var defered,promise,url;return null==params&&(params={}),defered=this.q.defer(),url=this.resolveUrlForModel(model),promise=this.http["delete"](url,{},params),promise.success(function(){return defered.resolve(model)}),promise.error(function(){return defered.reject(model)}),defered.promise},RepositoryService.prototype.saveAll=function(models,patch){var promises;return null==patch&&(patch=!0),promises=_.map(models,function(_this){return function(x){return _this.save(x,!0)}}(this)),this.q.all(promises)},RepositoryService.prototype.save=function(model,patch){var data,defered,promise,url;return null==patch&&(patch=!0),defered=this.q.defer(),!model.isModified()&&patch?(defered.resolve(model),defered.promise):(url=this.resolveUrlForModel(model),data=JSON.stringify(model.getAttrs(patch)),promise=patch?this.http.patch(url,data):this.http.put(url,data),promise.success(function(){return function(data){return model._isModified=!1,model._attrs=_.extend(model.getAttrs(),data),model._modifiedAttrs={},model.applyCasts(),defered.resolve(model)}}(this)),promise.error(function(data){return defered.reject(data)}),defered.promise)},RepositoryService.prototype.saveAttribute=function(model,attribute,patch){var data,defered,promise,url;return null==patch&&(patch=!0),defered=this.q.defer(),!model.isModified()&&patch?(defered.resolve(model),defered.promise):(url=this.resolveUrlForAttributeModel(model),data={},data[attribute]=model.getAttrs(),promise=patch?this.http.patch(url,data):this.http.put(url,data),promise.success(function(){return function(data){return model._isModified=!1,model._attrs=_.extend(model.getAttrs(),data),model._modifiedAttrs={},model.applyCasts(),defered.resolve(model)}}(this)),promise.error(function(data){return defered.reject(data)}),defered.promise)},RepositoryService.prototype.refresh=function(model){var defered,promise,url;return defered=this.q.defer(),url=this.resolveUrlForModel(model),promise=this.http.get(url),promise.success(function(data){return model._modifiedAttrs={},model._attrs=data,model._isModified=!1,model.applyCasts(),defered.resolve(model)}),promise.error(function(data){return defered.reject(data)}),defered.promise},RepositoryService.prototype.queryMany=function(name,params,options){var httpOptions,url;return null==options&&(options={}),url=this.urls.resolve(name),httpOptions={headers:{}},options.enablePagination||(httpOptions.headers["x-disable-pagination"]="1"),this.http.get(url,params,httpOptions).then(function(_this){return function(data){return _.map(data.data,function(x){return _this.model.make_model(name,x)})}}(this))},RepositoryService.prototype.queryOneAttribute=function(name,id,attribute,params,options){var httpOptions,url;return null==options&&(options={}),url=this.urls.resolve(name,id),httpOptions={headers:{}},options.enablePagination||(httpOptions.headers["x-disable-pagination"]="1"),this.http.get(url,params,httpOptions).then(function(_this){return function(data){var model;return model=_this.model.make_model(name,data.data[attribute]),model.parent=id,model}}(this))},RepositoryService.prototype.queryOne=function(name,id,params,options){var httpOptions,url;return null==options&&(options={}),url=this.urls.resolve(name),id&&(url=""+url+"/"+id),httpOptions={headers:{}},options.enablePagination||(httpOptions.headers["x-disable-pagination"]="1"),this.http.get(url,params,httpOptions).then(function(_this){return function(data){return _this.model.make_model(name,data.data)}}(this))},RepositoryService.prototype.queryOneRaw=function(name,id,params,options){var httpOptions,url;return null==options&&(options={}),url=this.urls.resolve(name),id&&(url=""+url+"/"+id),httpOptions=_.merge({headers:{}},options),options.enablePagination||(httpOptions.headers["x-disable-pagination"]="1"),this.http.get(url,params,httpOptions).then(function(){return function(data){return data.data}}(this))},RepositoryService.prototype.queryPaginated=function(name,params,options){var httpOptions,url;return null==options&&(options={}),url=this.urls.resolve(name),httpOptions=_.merge({headers:{}},options),this.http.get(url,params,httpOptions).then(function(_this){return function(data){var headers,result;return headers=data.headers(),result={},result.models=_.map(data.data,function(x){return _this.model.make_model(name,x)}),result.count=parseInt(headers["x-pagination-count"],10),result.current=parseInt(headers["x-pagination-current"]||1,10),result.paginatedBy=parseInt(headers["x-paginated-by"],10),result}}(this))},RepositoryService.prototype.resolve=function(options){var cache,params;return params={},null!=options.pslug&&(params.project=options.pslug),null!=options.usref&&(params.us=options.usref),null!=options.taskref&&(params.task=options.taskref),null!=options.issueref&&(params.issue=options.issueref),null!=options.sslug&&(params.milestone=options.sslug),null!=options.wikipage&&(params.wikipage=options.wikipage),cache=!(options.wikipage||options.sslug),this.queryOneRaw("resolver",null,params,{cache:cache})},RepositoryService}(taiga.Service),module=angular.module("taigaBase"),module.service("$tgRepo",RepositoryService)}.call(this),function(){var StorageService,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,StorageService=function(_super){function StorageService(){StorageService.__super__.constructor.call(this)}return __extends(StorageService,_super),StorageService.$inject=["$rootScope"],StorageService.prototype.get=function(key,_default){var serializedValue;return serializedValue=localStorage.getItem(key),null===serializedValue?_default||null:JSON.parse(serializedValue)},StorageService.prototype.set=function(key,val){return _.isObject(key)?_.each(key,function(_this){return function(val,key){return _this.set(key,val)}}(this)):localStorage.setItem(key,JSON.stringify(val))},StorageService.prototype.contains=function(key){var value;return value=this.get(key),null!==value},StorageService.prototype.remove=function(key){return localStorage.removeItem(key)},StorageService.prototype.clear=function(){return localStorage.clear()},StorageService}(taiga.Service),module=angular.module("taigaBase"),module.service("$tgStorage",StorageService)}.call(this),function(){var UrlsService,format,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};format=function(fmt,obj){return obj=_.clone(obj),fmt.replace(/%s/g,function(){return String(obj.shift())})},taiga=this.taiga,UrlsService=function(_super){function UrlsService(config){this.config=config,this.urls={},this.mainUrl=config.get("api")}return __extends(UrlsService,_super),UrlsService.$inject=["$tgConfig"],UrlsService.prototype.update=function(urls){return this.urls=_.merge(this.urls,urls)},UrlsService.prototype.resolve=function(){var args,name,url;if(args=_.toArray(arguments),0===args.length)throw Error("wrong arguments to setUrls");return name=args.slice(0,1)[0],url=format(this.urls[name],args.slice(1)),format("%s/%s",[_.str.rtrim(this.mainUrl,"/"),_.str.ltrim(url,"/")])},UrlsService}(taiga.Service),module=angular.module("taigaBase"),module.service("$tgUrls",UrlsService)}.call(this),function(){var module,resourceProvider,sizeFormat,taiga;taiga=this.taiga,sizeFormat=this.taiga.sizeFormat,resourceProvider=function($rootScope,$config,$urls,$model,$repo,$auth,$q){var service;return service={},service.list=function(urlName,objectId,projectId){var params;return params={object_id:objectId,project:projectId},$repo.queryMany(urlName,params)},service.create=function(urlName,projectId,objectId,file){var data,defered,maxFileSize,response,uploadComplete,uploadFailed,uploadProgress,xhr;return defered=$q.defer(),void 0===file?(defered.reject(null),defered.promise):(maxFileSize=$config.get("maxUploadFileSize",null),maxFileSize&&file.size>maxFileSize?(response={status:413,data:{_error_message:"'"+file.name+"' ("+sizeFormat(file.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+sizeFormat(maxFileSize)+")"}},defered.reject(response),defered.promise):(uploadProgress=function(){return function(evt){return $rootScope.$apply(function(){return file.status="in-progress",file.size=sizeFormat(evt.total),file.progressMessage="upload "+sizeFormat(evt.loaded)+" of "+sizeFormat(evt.total),file.progressPercent=""+Math.round(evt.loaded/evt.total*100)+"%"})}}(this),uploadComplete=function(){return function(evt){return $rootScope.$apply(function(){var data,model;file.status="done";try{data=JSON.parse(evt.target.responseText)}catch(_error){data={}}return model=$model.make_model(urlName,data),defered.resolve(model)})}}(this),uploadFailed=function(){return function(){return $rootScope.$apply(function(){return file.status="error",defered.reject("fail")})}}(this),data=new FormData,data.append("project",projectId),data.append("object_id",objectId),data.append("attached_file",file),xhr=new XMLHttpRequest,xhr.upload.addEventListener("progress",uploadProgress,!1),xhr.addEventListener("load",uploadComplete,!1),xhr.addEventListener("error",uploadFailed,!1),xhr.open("POST",$urls.resolve(urlName)),xhr.setRequestHeader("Authorization","Bearer "+$auth.getToken()),xhr.setRequestHeader("Accept","application/json"),xhr.send(data),defered.promise))},function(instance){return instance.attachments=service}},module=angular.module("taigaResources"),module.factory("$tgAttachmentsResourcesProvider",["$rootScope","$tgConfig","$tgUrls","$tgModel","$tgRepo","$tgAuth","$q",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo,$http,$urls){var service;return service={},service.get=function(type,objectId){return $repo.queryOneRaw("history/"+type,objectId)},service.deleteComment=function(type,objectId,activityId){var params,url;return url=$urls.resolve("history/"+type),url=""+url+"/"+objectId+"/delete_comment",params={id:activityId},$http.post(url,null,params).then(function(){return function(data){return data.data}}(this))},service.undeleteComment=function(type,objectId,activityId){var params,url;return url=$urls.resolve("history/"+type),url=""+url+"/"+objectId+"/undelete_comment",params={id:activityId},$http.post(url,null,params).then(function(){return function(data){return data.data}}(this))},function(instance){return instance.history=service}},module=angular.module("taigaResources"),module.factory("$tgHistoryResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo){var service;return service={},service.get=function(token){return $repo.queryOne("invitations",token)},function(instance){return instance.invitations=service}},module=angular.module("taigaResources"),module.factory("$tgInvitationsResourcesProvider",["$tgRepo",resourceProvider])}.call(this),function(){var generateHash,module,resourceProvider,taiga;taiga=this.taiga,generateHash=taiga.generateHash,resourceProvider=function($repo,$http,$urls,$storage,$q){var filtersHashSuffix,hashSuffix,myFiltersHashSuffix,service;return service={},hashSuffix="issues-queryparams",filtersHashSuffix="issues-filters",myFiltersHashSuffix="issues-my-filters",service.get=function(projectId,issueId){var params;return params=service.getQueryParams(projectId),params.project=projectId,$repo.queryOne("issues",issueId,params)},service.getByRef=function(projectId,ref){return $repo.queryOne("issues","by_ref?project="+projectId+"&ref="+ref)},service.list=function(projectId,filters,options){var params;return params={project:projectId},params=_.extend({},params,filters||{}),service.storeQueryParams(projectId,params),$repo.queryPaginated("issues",params,options)},service.bulkCreate=function(projectId,data){var params,url;return url=$urls.resolve("bulk-create-issues"),params={project_id:projectId,bulk_issues:data},$http.post(url,params)},service.stats=function(projectId){return $repo.queryOneRaw("projects",""+projectId+"/issues_stats")},service.filtersData=function(projectId){return $repo.queryOneRaw("projects",""+projectId+"/issue_filters_data")},service.listValues=function(projectId,type){var params;return params={project:projectId},service.storeQueryParams(projectId,params),$repo.queryMany(type,params)},service.storeQueryParams=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getQueryParams=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},service.storeFilters=function(projectSlug,params){var hash,ns;return ns=""+projectSlug+":"+filtersHashSuffix,hash=generateHash([projectSlug,ns]),$storage.set(hash,params)},service.getFilters=function(projectSlug){var hash,ns;return ns=""+projectSlug+":"+filtersHashSuffix,hash=generateHash([projectSlug,ns]),$storage.get(hash)||{}},service.storeMyFilters=function(projectId,myFilters){var deferred,hash,ns,promise,url;return deferred=$q.defer(),url=$urls.resolve("user-storage"),ns=""+projectId+":"+myFiltersHashSuffix,hash=generateHash([projectId,ns]),_.isEmpty(myFilters)?(promise=$http["delete"](""+url+"/"+hash,{key:hash,value:myFilters}),promise.then(function(){return deferred.resolve()}),promise.then(null,function(){return deferred.reject()})):(promise=$http.put(""+url+"/"+hash,{key:hash,value:myFilters}),promise.then(function(){return deferred.resolve()}),promise.then(null,function(){var innerPromise;return innerPromise=$http.post(""+url,{key:hash,value:myFilters}),innerPromise.then(function(){return deferred.resolve()}),innerPromise.then(null,function(){return deferred.reject()})})),deferred.promise},service.getMyFilters=function(projectId){var deferred,hash,ns,promise,url;return deferred=$q.defer(),url=$urls.resolve("user-storage"),ns=""+projectId+":"+myFiltersHashSuffix,hash=generateHash([projectId,ns]),promise=$http.get(""+url+"/"+hash),promise.then(function(data){return deferred.resolve(data.data.value)}),promise.then(null,function(){return deferred.resolve({})}),deferred.promise},function(instance){return instance.issues=service}},module=angular.module("taigaResources"),module.factory("$tgIssuesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls","$tgStorage","$q",resourceProvider])}.call(this),function(){var generateHash,module,resourceProvider,taiga;taiga=this.taiga,generateHash=taiga.generateHash,resourceProvider=function($storage){var hashSuffixStatusColumnModes,hashSuffixStatusViewModes,service;return service={},hashSuffixStatusViewModes="kanban-statusviewmodels",hashSuffixStatusColumnModes="kanban-statuscolumnmodels",service.storeStatusViewModes=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusViewModes,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getStatusViewModes=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusViewModes,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},service.storeStatusColumnModes=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusColumnModes,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getStatusColumnModes=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusColumnModes,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},function(instance){return instance.kanban=service}},module=angular.module("taigaResources"),module.factory("$tgKanbanResourcesProvider",["$tgStorage",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo,$urls,$http){var service;return service={},service.render=function(projectId,content){var params,url;return(null==content||""===content)&&(content=" "),params={project_id:projectId,content:content},url=$urls.resolve("wiki"),$http.post(""+url+"/render",params).then(function(){return function(data){return data.data}}(this))},function(instance){return instance.mdrender=service}},module=angular.module("taigaResources"),module.factory("$tgMdRenderResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo,$http,$urls){var service;return service={},service.get=function(id){return $repo.queryOne("memberships",id)},service.list=function(projectId,filters,enablePagination){var options,params;return null==enablePagination&&(enablePagination=!0),params={project:projectId},params=_.extend({},params,filters||{}),enablePagination?$repo.queryPaginated("memberships",params):$repo.queryMany("memberships",params,options={enablePagination:enablePagination})},service.listByUser=function(userId,filters){var params;return params={user:userId},params=_.extend({},params,filters||{}),$repo.queryPaginated("memberships",params)},service.resendInvitation=function(id){var url;return url=$urls.resolve("memberships"),$http.post(""+url+"/"+id+"/resend_invitation",{})},service.bulkCreateMemberships=function(projectId,data,invitation_extra_text){var params,url;return url=$urls.resolve("bulk-create-memberships"),params={project_id:projectId,bulk_memberships:data,invitation_extra_text:invitation_extra_text},$http.post(url,params)},function(instance){return instance.memberships=service}},module=angular.module("taigaResources"),module.factory("$tgMembershipsResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var module,resourceProvider;resourceProvider=function($repo){var service;return service={},service.list=function(projectId,module){return $repo.queryOneAttribute("project-modules",projectId,module)},function(instance){return instance.modules=service}},module=angular.module("taigaResources"),module.factory("$tgModulesResourcesProvider",["$tgRepo",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo){var service;return service={},service.get=function(id){return $repo.queryOne("notify-policies",id)},service.list=function(filters){var params;return params=_.extend({},params,filters||{}),$repo.queryMany("notify-policies",params)},function(instance){return instance.notifyPolicies=service}},module=angular.module("taigaResources"),module.factory("$tgNotifyPoliciesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo,$http,$urls){var service;return service={},service.get=function(id){return $repo.queryOne("projects",id)},service.getBySlug=function(slug){return $repo.queryOne("projects","by_slug?slug="+slug)},service.list=function(){return $repo.queryMany("projects")},service.templates=function(){return $repo.queryMany("project-templates")},service.usersList=function(projectId){var params;return params={project:projectId},$repo.queryMany("users",params)},service.rolesList=function(projectId){var params;return params={project:projectId},$repo.queryMany("roles",params)},service.stats=function(projectId){return $repo.queryOneRaw("projects",""+projectId+"/stats")},service.leave=function(projectId){var url;return url=""+$urls.resolve("projects")+"/"+projectId+"/leave",$http.post(url)},service.memberStats=function(projectId){return $repo.queryOneRaw("projects",""+projectId+"/member_stats")},service.tagsColors=function(id){return $repo.queryOne("projects",""+id+"/tags_colors")},function(instance){return instance.projects=service}},module=angular.module("taigaResources"),module.factory("$tgProjectsResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo){var service;return service={},service.get=function(id){return $repo.queryOne("roles",id)},service.list=function(projectId){return $repo.queryMany("roles",{project:projectId})},function(instance){return instance.roles=service}},module=angular.module("taigaResources"),module.factory("$tgRolesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga;taiga=this.taiga,resourceProvider=function($repo,$urls,$http){var service;return service={},service["do"]=function(projectId,term){var params,url;return url=$urls.resolve("search"),params={project:projectId,text:term,get_all:!1},$http.get(url,params).then(function(data){return data.data})},function(instance){return instance.search=service}},module=angular.module("taigaResources"),module.factory("$tgSearchResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",resourceProvider])}.call(this),function(){var generateHash,module,resourceProvider,taiga;taiga=this.taiga,generateHash=taiga.generateHash,resourceProvider=function($repo,$model,$storage){var hashSuffixUserstories,service;return service={},hashSuffixUserstories="userstories-queryparams",service.get=function(projectId,sprintId){return $repo.queryOne("milestones",sprintId).then(function(sprint){var uses;return service.storeUserstoriesQueryParams(projectId,{milestone:sprintId}),uses=sprint.user_stories,uses=_.map(uses,function(u){return $model.make_model("userstories",u)}),sprint._attrs.user_stories=uses,sprint})},service.stats=function(projectId,sprintId){return $repo.queryOneRaw("milestones",""+sprintId+"/stats")},service.list=function(projectId,filters){var params;return params={project:projectId},params=_.extend({},params,filters||{}),$repo.queryMany("milestones",params).then(function(){return function(milestones){var m,uses,_i,_len;for(_i=0,_len=milestones.length;_len>_i;_i++)m=milestones[_i],uses=m.user_stories,uses=_.map(uses,function(u){return $model.make_model("userstories",u)}),m._attrs.user_stories=uses;return milestones}}(this))},service.storeUserstoriesQueryParams=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffixUserstories,hash=generateHash([projectId,ns]),$storage.set(hash,params)},function(instance){return instance.sprints=service}},module=angular.module("taigaResources"),module.factory("$tgSprintsResourcesProvider",["$tgRepo","$tgModel","$tgStorage",resourceProvider])}.call(this),function(){var generateHash,module,resourceProvider,taiga;taiga=this.taiga,generateHash=taiga.generateHash,resourceProvider=function($repo,$http,$urls,$storage){var hashSuffix,hashSuffixStatusColumnModes,hashSuffixUsRowModes,service;return service={},hashSuffix="tasks-queryparams",hashSuffixStatusColumnModes="tasks-statuscolumnmodels",hashSuffixUsRowModes="tasks-usrowmodels",service.get=function(projectId,taskId){var params;return params=service.getQueryParams(projectId),params.project=projectId,$repo.queryOne("tasks",taskId,params)},service.getByRef=function(projectId,ref){return $repo.queryOne("tasks","by_ref?project="+projectId+"&ref="+ref)},service.list=function(projectId,sprintId,userStoryId){var params;return null==sprintId&&(sprintId=null),null==userStoryId&&(userStoryId=null),params={project:projectId},sprintId&&(params.milestone=sprintId),userStoryId&&(params.user_story=userStoryId),service.storeQueryParams(projectId,params),$repo.queryMany("tasks",params)},service.bulkCreate=function(projectId,sprintId,usId,data){var params,url;return url=$urls.resolve("bulk-create-tasks"),params={project_id:projectId,sprint_id:sprintId,us_id:usId,bulk_tasks:data},$http.post(url,params).then(function(result){return result.data})},service.bulkUpdateTaskTaskboardOrder=function(projectId,data){var params,url;return url=$urls.resolve("bulk-update-task-taskboard-order"),params={project_id:projectId,bulk_tasks:data},$http.post(url,params)},service.listValues=function(projectId,type){var params;return params={project:projectId},$repo.queryMany(type,params)},service.storeQueryParams=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getQueryParams=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},service.storeStatusColumnModes=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusColumnModes,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getStatusColumnModes=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffixStatusColumnModes,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},service.storeUsRowModes=function(projectId,sprintId,params){var hash,ns;return ns=""+projectId+":"+hashSuffixUsRowModes,hash=generateHash([projectId,sprintId,ns]),$storage.set(hash,params)},service.getUsRowModes=function(projectId,sprintId){var hash,ns;return ns=""+projectId+":"+hashSuffixUsRowModes,hash=generateHash([projectId,sprintId,ns]),$storage.get(hash)||{}},function(instance){return instance.tasks=service}},module=angular.module("taigaResources"),module.factory("$tgTasksResourcesProvider",["$tgRepo","$tgHttp","$tgUrls","$tgStorage",resourceProvider])}.call(this),function(){var module,resourceProvider,sizeFormat,taiga;taiga=this.taiga,sizeFormat=this.taiga.sizeFormat,resourceProvider=function($config,$repo,$http,$urls,$q){var service;return service={},service.changeAvatar=function(file){var data,defered,maxFileSize,options,response,url;return maxFileSize=$config.get("maxUploadFileSize",null),maxFileSize&&file.size>maxFileSize?(response={status:413,data:{_error_message:"'"+file.name+"' ("+sizeFormat(file.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+sizeFormat(maxFileSize)+")"}},defered=$q.defer(),defered.reject(response),defered.promise):(data=new FormData,data.append("avatar",file),options={transformRequest:angular.identity,headers:{"Content-Type":void 0}},url=""+$urls.resolve("users")+"/change_avatar",$http.post(url,data,{},options))},service.removeAvatar=function(){var url;return url=""+$urls.resolve("users")+"/remove_avatar",$http.post(url)},service.changePassword=function(currentPassword,newPassword){var data,url;return url=""+$urls.resolve("users")+"/change_password",data={current_password:currentPassword,password:newPassword},$http.post(url,data)},function(instance){return instance.userSettings=service}},module=angular.module("taigaResources"),module.factory("$tgUserSettingsResourcesProvider",["$tgConfig","$tgRepo","$tgHttp","$tgUrls","$q",resourceProvider])}.call(this),function(){var generateHash,module,resourceProvider,taiga;taiga=this.taiga,generateHash=taiga.generateHash,resourceProvider=function($repo,$http,$urls,$storage){var hashSuffix,service;return service={},hashSuffix="userstories-queryparams",service.get=function(projectId,usId){var params;return params=service.getQueryParams(projectId),params.project=projectId,$repo.queryOne("userstories",usId,params)},service.getByRef=function(projectId,ref){return $repo.queryOne("userstories","by_ref?project="+projectId+"&ref="+ref)},service.listUnassigned=function(projectId,filters){var params;return params={project:projectId,milestone:"null"},params=_.extend({},params,filters||{}),service.storeQueryParams(projectId,params),$repo.queryMany("userstories",params)},service.listAll=function(projectId,filters){var params;return params={project:projectId},params=_.extend({},params,filters||{}),service.storeQueryParams(projectId,params),$repo.queryMany("userstories",params)},service.bulkCreate=function(projectId,status,bulk){var data,url;return data={project_id:projectId,status_id:status,bulk_stories:bulk},url=$urls.resolve("bulk-create-us"),$http.post(url,data)},service.bulkUpdateBacklogOrder=function(projectId,data){var params,url;return url=$urls.resolve("bulk-update-us-backlog-order"),params={project_id:projectId,bulk_stories:data},$http.post(url,params)},service.bulkUpdateSprintOrder=function(projectId,data){var params,url;return url=$urls.resolve("bulk-update-us-sprint-order"),params={project_id:projectId,bulk_stories:data},$http.post(url,params)},service.bulkUpdateKanbanOrder=function(projectId,data){var params,url;return url=$urls.resolve("bulk-update-us-kanban-order"),params={project_id:projectId,bulk_stories:data},$http.post(url,params)},service.listValues=function(projectId,type){var params;return params={project:projectId},service.storeQueryParams(projectId,params),$repo.queryMany(type,params)},service.storeQueryParams=function(projectId,params){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.set(hash,params)},service.getQueryParams=function(projectId){var hash,ns;return ns=""+projectId+":"+hashSuffix,hash=generateHash([projectId,ns]),$storage.get(hash)||{}},service.storeShowTags=function(projectId,showTags){var hash;return hash=generateHash([projectId,"showTags"]),$storage.set(hash,showTags)},service.getShowTags=function(projectId){var hash;return hash=generateHash([projectId,"showTags"]),$storage.get(hash)||null},function(instance){return instance.userstories=service}},module=angular.module("taigaResources"),module.factory("$tgUserstoriesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls","$tgStorage",resourceProvider])}.call(this),function(){var module,resourceProvider,taiga; +taiga=this.taiga,resourceProvider=function($repo){var service;return service={},service.get=function(wikiId){return $repo.queryOne("wiki",wikiId)},service.getBySlug=function(projectId,slug){return $repo.queryOne("wiki","by_slug?project="+projectId+"&slug="+slug)},service.listLinks=function(projectId){return $repo.queryMany("wiki-links",{project:projectId})},function(instance){return instance.wiki=service}},module=angular.module("taigaResources"),module.factory("$tgWikiResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",resourceProvider])}.call(this),function(){var UserChangePasswordController,UserChangePasswordDirective,debounce,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,debounce=this.taiga.debounce,module=angular.module("taigaUserSettings"),UserChangePasswordController=function(_super){function UserChangePasswordController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,auth){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.auth=auth,this.scope.sectionName="Change Password",this.scope.project={},this.scope.user=this.auth.getUser(),promise=this.loadInitialData(),promise.then(null,this.onInitialDataError.bind(this))}return __extends(UserChangePasswordController,_super),UserChangePasswordController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth"],UserChangePasswordController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},UserChangePasswordController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this))},UserChangePasswordController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("UserChangePasswordController",UserChangePasswordController),UserChangePasswordDirective=function($rs,$confirm,$loading){var link;return link=function($scope,$el){var submit,submitButton;return submit=debounce(2e3,function(){return function(event){var promise;return event.preventDefault(),$scope.newPassword1!==$scope.newPassword2?void $confirm.notify("error","The passwords dosn't match"):($loading.start(submitButton),promise=$rs.userSettings.changePassword($scope.currentPassword,$scope.newPassword1),promise.then(function(){return $loading.finish(submitButton),$confirm.notify("success")}),promise.then(null,function(response){return $loading.finish(submitButton),$confirm.notify("error",response.data._error_message)}))}}(this)),submitButton=$el.find(".submit-button"),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgUserChangePassword",["$tgResources","$tgConfirm","$tgLoading",UserChangePasswordDirective])}.call(this),function(){var DeleteUserDirective,bindOnce,debounce,module,taiga;taiga=this.taiga,bindOnce=this.taiga.bindOnce,debounce=this.taiga.debounce,module=angular.module("taigaUserSettings"),DeleteUserDirective=function($repo,$rootscope,$auth,$location,$navUrls,lightboxService){var link;return link=function($scope,$el){var submit;return $scope.$on("deletelightbox:new",function(){return lightboxService.open($el)}),$scope.$on("$destroy",function(){return $el.off()}),submit=function(){var promise;return promise=$repo.remove($scope.user),promise.then(function(){return lightboxService.close($el),$auth.logout(),$location.path($navUrls.resolve("login"))}),promise.then(null,function(){return console.log("FAIL")})},$el.on("click",".button-red",function(event){return event.preventDefault(),lightboxService.close($el)}),$el.on("click",".button-green",debounce(2e3,function(event){return event.preventDefault(),submit()}))},{link:link,templateUrl:"/partials/views/modules/lightbox-delete-account.html"}},module.directive("tgLbDeleteUser",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","lightboxService",DeleteUserDirective])}.call(this),function(){var TaigaAvatarModelDirective,UserAvatarDirective,UserProfileDirective,UserSettingsController,debounce,mixOf,module,sizeFormat,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,sizeFormat=this.taiga.sizeFormat,module=angular.module("taigaUserSettings"),debounce=this.taiga.debounce,UserSettingsController=function(_super){function UserSettingsController(scope,rootscope,config,repo,confirm,rs,params,q,location,navUrls,auth){var maxFileSize,promise;this.scope=scope,this.rootscope=rootscope,this.config=config,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.auth=auth,this.scope.sectionName="User Profile",this.scope.project={},this.scope.user=this.auth.getUser(),maxFileSize=this.config.get("maxUploadFileSize",null),maxFileSize&&(this.scope.maxFileSizeMsg="[Max, size: "+sizeFormat(maxFileSize)),promise=this.loadInitialData(),promise.then(null,this.onInitialDataError.bind(this))}return __extends(UserSettingsController,_super),UserSettingsController.$inject=["$scope","$rootScope","$tgConfig","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth"],UserSettingsController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},UserSettingsController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this))},UserSettingsController.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.user)},UserSettingsController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("UserSettingsController",UserSettingsController),UserProfileDirective=function($confirm,$auth,$repo){var link;return link=function($scope,$el){var submit;return submit=debounce(2e3,function(){return function(event){var changeEmail,form,onError,onSuccess;return event.preventDefault(),form=$el.find("form").checksley(),form.validate()?(changeEmail=$scope.user.isAttributeModified("email"),onSuccess=function(){return $auth.setUser($scope.user),changeEmail?$confirm.success("Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address"):$confirm.notify("success")},onError=function(data){return form.setErrors(data),$confirm.notify("error",data._error_message)},$repo.save($scope.user).then(onSuccess,onError)):void 0}}(this)),$el.on("submit","form",submit),$el.on("click",".submit-button",submit),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgUserProfile",["$tgConfirm","$tgAuth","$tgRepo",UserProfileDirective]),UserAvatarDirective=function($auth,$model,$rs,$confirm){var link;return link=function($scope,$el){var onError,onSuccess,showSizeInfo;return showSizeInfo=function(){return $el.find(".size-info").removeClass("hidden")},onSuccess=function(response){var user;return user=$model.make_model("users",response.data),$auth.setUser(user),$scope.user=user,$el.find(".overlay").hide(),$confirm.notify("success")},onError=function(response){return 413===response.status&&showSizeInfo(),$el.find(".overlay").hide(),$confirm.notify("error",response.data._error_message)},$el.on("click",".button.change",function(){return $el.find("#avatar-field").click()}),$el.on("change","#avatar-field",function(){return $scope.avatarAttachment?($el.find(".overlay").show(),$rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess,onError)):void 0}),$el.on("click","a.use-gravatar",function(){return $el.find(".overlay").show(),$rs.userSettings.removeAvatar().then(onSuccess,onError)}),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgUserAvatar",["$tgAuth","$tgModel","$tgResources","$tgConfirm",UserAvatarDirective]),TaigaAvatarModelDirective=function($parse){var link;return link=function($scope,$el,$attrs){var model,modelSetter;return model=$parse($attrs.tgAvatarModel),modelSetter=model.assign,$el.bind("change",function(){return $scope.$apply(function(){return modelSetter($scope,$el[0].files[0])})})},{link:link}},module.directive("tgAvatarModel",["$parse",TaigaAvatarModelDirective])}.call(this),function(){var UserSettingsNavigationDirective,module;UserSettingsNavigationDirective=function(){var link;return link=function($scope,$el,$attrs){var section;return section=$attrs.tgUserSettingsNavigation,$el.find(".active").removeClass("active"),$el.find("#usersettingsmenu-"+section+" a").addClass("active"),$scope.$on("$destroy",function(){return $el.off()})},{link:link}},module=angular.module("taigaUserSettings"),module.directive("tgUserSettingsNavigation",UserSettingsNavigationDirective)}.call(this),function(){var UserNotificationsController,UserNotificationsDirective,UserNotificationsListDirective,bindOnce,mixOf,module,taiga,__hasProp={}.hasOwnProperty,__extends=function(child,parent){function ctor(){this.constructor=child}for(var key in parent)__hasProp.call(parent,key)&&(child[key]=parent[key]);return ctor.prototype=parent.prototype,child.prototype=new ctor,child.__super__=parent.prototype,child};taiga=this.taiga,mixOf=this.taiga.mixOf,bindOnce=this.taiga.bindOnce,module=angular.module("taigaUserSettings"),UserNotificationsController=function(_super){function UserNotificationsController(scope,rootscope,repo,confirm,rs,params,q,location,navUrls,auth){var promise;this.scope=scope,this.rootscope=rootscope,this.repo=repo,this.confirm=confirm,this.rs=rs,this.params=params,this.q=q,this.location=location,this.navUrls=navUrls,this.auth=auth,this.scope.sectionName="Email Notifications",this.scope.project={},this.scope.user=this.auth.getUser(),promise=this.loadInitialData(),promise.then(null,this.onInitialDataError.bind(this))}return __extends(UserNotificationsController,_super),UserNotificationsController.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth"],UserNotificationsController.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(_this){return function(project){return _this.scope.project=project,_this.scope.$emit("project:loaded",project),project}}(this))},UserNotificationsController.prototype.loadNotifyPolicies=function(){return this.rs.notifyPolicies.list().then(function(_this){return function(notifyPolicies){return _this.scope.notifyPolicies=notifyPolicies,notifyPolicies}}(this))},UserNotificationsController.prototype.loadInitialData=function(){var promise;return promise=this.repo.resolve({pslug:this.params.pslug}).then(function(_this){return function(data){return _this.scope.projectId=data.project,data}}(this)),promise.then(function(_this){return function(){return _this.loadProject()}}(this)).then(function(_this){return function(){return _this.loadNotifyPolicies()}}(this))},UserNotificationsController}(mixOf(taiga.Controller,taiga.PageMixin)),module.controller("UserNotificationsController",UserNotificationsController),UserNotificationsDirective=function(){var link;return link=function($scope,$el){return $scope.$on("$destroy",function(){return $el.off()})},{link:link}},module.directive("tgUserNotifications",UserNotificationsDirective),UserNotificationsListDirective=function($repo,$confirm){var link,template;return template=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
    \n
    <%- notifyPolicy.project_name %>
    \n
    \n
    \n checked="checked"<% } %>/>\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n<% }) %>'),link=function($scope,$el,$attrs){var render;return render=function(){return $el.off(),$el.html(template({notifyPolicies:$scope.notifyPolicies})),$el.on("change","input[type=radio]",function(event){var onError,onSuccess,policy,policyIndex,prev_level,target;return target=angular.element(event.currentTarget),policyIndex=target.parents(".policy-table-row").data("index"),policy=$scope.notifyPolicies[policyIndex],prev_level=policy.notify_level,policy.notify_level=parseInt(target.val(),10),onSuccess=function(){return $confirm.notify("success")},onError=function(){return $confirm.notify("error"),target.parents(".policy-table-row").find("input[value="+prev_level+"]").prop("checked",!0)},$repo.save(policy).then(onSuccess,onError)})},$scope.$on("$destroy",function(){return $el.off()}),bindOnce($scope,$attrs.ngModel,render)},{link:link}},module.directive("tgUserNotificationsList",["$tgRepo","$tgConfirm",UserNotificationsListDirective])}.call(this),function(){var AUTH_URL,GithubLoginButtonDirective,module,taiga;taiga=this.taiga,module=angular.module("taigaIntegrations"),AUTH_URL="https://github.com/login/oauth/authorize",GithubLoginButtonDirective=function($window,$params,$location,$config,$events,$confirm,$auth,$navUrls,$loader){var link,template;return template='\n \n Login with Github\n',link=function($scope,$el){var clientId,loginOnError,loginOnSuccess,loginWithGitHubAccount,renderGitHubButton;return(clientId=$config.get("gitHubClientId",null))?(renderGitHubButton=function(){return clientId?$el.html(template):void 0},loginOnSuccess=function(){var nextUrl;return nextUrl=$params.next&&$params.next!==$navUrls.resolve("login")?$params.next:$navUrls.resolve("home"),$events.setupConnection(),$location.search("next",null),$location.search("token",null),$location.search("state",null),$location.search("code",null),$location.path(nextUrl)},loginOnError=function(response){return $location.search("state",null),$location.search("code",null),$loader.pageLoaded(),response.data.error_message?$confirm.notify("light-error",response.data.error_message):$confirm.notify("light-error","Our Oompa Loompas have not been able to get you credentials from GitHub.")},loginWithGitHubAccount=function(){var code,data,token,type;return type=$params.state,code=$params.code,token=$params.token,"github"===type&&code?($loader.start(),data={code:code,token:token},$auth.login(data,type).then(loginOnSuccess,loginOnError)):void 0},renderGitHubButton(),loginWithGitHubAccount(),$el.on("click",".button-github",function(){var redirectToUri,url;return redirectToUri=$location.absUrl(),url=""+AUTH_URL+"?client_id="+clientId+"&redirect_uri="+redirectToUri+"&state=github&scope=user:email",$window.location.href=url}),$scope.$on("$destroy",function(){return $el.off()})):void 0},{link:link,restrict:"EA",template:""}},module.directive("tgGithubLoginButton",["$window","$routeParams","$tgLocation","$tgConfig","$tgEvents","$tgConfirm","$tgAuth","$tgNavUrls","tgLoader",GithubLoginButtonDirective])}.call(this),function(){var configure,module,taiga;taiga=this.taiga,module=angular.module("taigaPlugins",["ngRoute"]),configure=function($routeProvider){return $routeProvider.when("/humans.html",{templateUrl:"/plugins/humanshtml/templates/humans.html"})},module.config(["$routeProvider",configure])}.call(this),function(){var TermsNoticeDirective,module,taiga,template;taiga=this.taiga,module=angular.module("taigaPlugins",["ngRoute"]),template=_.template('

    \n By clicking "Sign up", you agree to our
    \n terms of service\n and\n privacy policy.\n

    '),TermsNoticeDirective=function($config){var privacyPolicyUrl,templateFn,termsOfServiceUrl;return privacyPolicyUrl=$config.get("privacyPolicyUrl"),termsOfServiceUrl=$config.get("termsOfServiceUrl"),templateFn=function(){var ctx;return privacyPolicyUrl&&termsOfServiceUrl?(ctx={termsUrl:termsOfServiceUrl,privacyUrl:privacyPolicyUrl},template(ctx)):""},{scope:{},restrict:"AE",template:templateFn}},module.directive("tgTermsNotice",["$tgConfig",TermsNoticeDirective])}.call(this),function(){var module;module=angular.module("taigaPlugins",["ngRoute"])}.call(this),angular.module("taigaBase").value("localesEn",{checksley:{defaultMessage:"This value seems to be invalid.","type-email":"This value should be a valid email.","type-url":"This value should be a valid url.","type-urlstrict":"This value should be a valid url.","type-number":"This value should be a valid number.","type-digits":"This value should be digits.","type-dateIso":"This value should be a valid date (YYYY-MM-DD).","type-alphanum":"This value should be alphanumeric.","type-phone":"This value should be a valid phone number.",notnull:"This value should not be null.",notblank:"This value should not be blank.",required:"This value is required.",regexp:"This value seems to be invalid.",min:"This value should be greater than or equal to %s.",max:"This value should be lower than or equal to %s.",range:"This value should be between %s and %s.",minlength:"This value is too short. It should have %s characters or more.",maxlength:"This value is too long. It should have %s characters or less.",rangelength:"This value length is invalid. It should be between %s and %s characters long.",mincheck:"You must select at least %s choices.",maxcheck:"You must select %s choices or less.",rangecheck:"You must select between %s and %s choices.",equalto:"This value should be the same."},common:{subject:"Subject",save:"Save",blocked:"Blocked",cancel:"Cancel",status:"Status","new-bulk":"New bulk insert","one-item-line":"One item per line..."},pagination:{next:"Next",prev:"Previous"},"markdown-editor":{"heading-1":"First Level Heading","heading-2":"Second Level Heading","heading-3":"Third Level Heading",bold:"Bold",italic:"Italic",strike:"Strike","bulleted-list":"Bulleted List","numeric-list":"Numeric List",picture:"Picture",link:"Link",quotes:"Quotes","code-block":"Code Block / Code",preview:"Preview",help:"Help",placeholder:"Your title here...","link-placeholder":"Your text to link here..."},us:{"title-new":"New User Story","team-requirement":"Team Requirement","client-requirement":"Client Requirement"}}); +//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/dist/js/app.js.map b/dist/js/app.js.map new file mode 100644 index 0000000..ab920ad --- /dev/null +++ b/dist/js/app.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["app.js","locales.en.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxqpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.js","sourcesContent":["\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: app.coffee\n */\n\n(function() {\n var configure, init, module, modules, taiga;\n\n this.taiga = taiga = {};\n\n taiga.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n taiga.generateUniqueSessionIdentifier = function() {\n var date, randomNumber;\n date = (new Date()).getTime();\n randomNumber = Math.floor(Math.random() * 0x9000000);\n return taiga.generateHash([date, randomNumber]);\n };\n\n taiga.sessionId = taiga.generateUniqueSessionIdentifier();\n\n configure = function($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider) {\n var authHttpIntercept, defaultHeaders, versionCheckHttpIntercept;\n $routeProvider.when(\"/\", {\n templateUrl: \"/partials/projects.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/\", {\n templateUrl: \"/partials/project.html\"\n });\n $routeProvider.when(\"/project/:pslug/backlog\", {\n templateUrl: \"/partials/backlog.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/taskboard/:sslug\", {\n templateUrl: \"/partials/taskboard.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/search\", {\n templateUrl: \"/partials/search.html\",\n reloadOnSearch: false\n });\n $routeProvider.when(\"/project/:pslug/kanban\", {\n templateUrl: \"/partials/kanban.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/us/:usref\", {\n templateUrl: \"/partials/us-detail.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/task/:taskref\", {\n templateUrl: \"/partials/task-detail.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/wiki\", {\n redirectTo: function(params) {\n return \"/project/\" + params.pslug + \"/wiki/home\";\n }\n });\n $routeProvider.when(\"/project/:pslug/wiki/:slug\", {\n templateUrl: \"/partials/wiki.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/team\", {\n templateUrl: \"/partials/views/team/team.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/issues\", {\n templateUrl: \"/partials/issues.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/issue/:issueref\", {\n templateUrl: \"/partials/issues-detail.html\",\n resolve: {\n loader: tgLoaderProvider.add()\n }\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/details\", {\n templateUrl: \"/partials/admin-project-profile.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/default-values\", {\n templateUrl: \"/partials/admin-project-default-values.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/modules\", {\n templateUrl: \"/partials/admin-project-modules.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/us-status\", {\n templateUrl: \"/partials/admin-project-values-us-status.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/us-points\", {\n templateUrl: \"/partials/admin-project-values-us-points.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/task-status\", {\n templateUrl: \"/partials/admin-project-values-task-status.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/issue-status\", {\n templateUrl: \"/partials/admin-project-values-issue-status.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/issue-types\", {\n templateUrl: \"/partials/admin-project-values-issue-types.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/issue-priorities\", {\n templateUrl: \"/partials/admin-project-values-issue-priorities.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/issue-severities\", {\n templateUrl: \"/partials/admin-project-values-issue-severities.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/memberships\", {\n templateUrl: \"/partials/admin-memberships.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/roles\", {\n templateUrl: \"/partials/admin-roles.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/github\", {\n templateUrl: \"/partials/admin-third-parties-github.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gitlab\", {\n templateUrl: \"/partials/admin-third-parties-gitlab.html\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/bitbucket\", {\n templateUrl: \"/partials/admin-third-parties-bitbucket.html\"\n });\n $routeProvider.when(\"/project/:pslug/user-settings/user-profile\", {\n templateUrl: \"/partials/user-profile.html\"\n });\n $routeProvider.when(\"/project/:pslug/user-settings/user-change-password\", {\n templateUrl: \"/partials/user-change-password.html\"\n });\n $routeProvider.when(\"/project/:pslug/user-settings/user-avatar\", {\n templateUrl: \"/partials/user-avatar.html\"\n });\n $routeProvider.when(\"/project/:pslug/user-settings/mail-notifications\", {\n templateUrl: \"/partials/mail-notifications.html\"\n });\n $routeProvider.when(\"/change-email/:email_token\", {\n templateUrl: \"/partials/change-email.html\"\n });\n $routeProvider.when(\"/cancel-account/:cancel_token\", {\n templateUrl: \"/partials/cancel-account.html\"\n });\n $routeProvider.when(\"/login\", {\n templateUrl: \"/partials/login.html\"\n });\n $routeProvider.when(\"/register\", {\n templateUrl: \"/partials/register.html\"\n });\n $routeProvider.when(\"/forgot-password\", {\n templateUrl: \"/partials/forgot-password.html\"\n });\n $routeProvider.when(\"/change-password\", {\n templateUrl: \"/partials/change-password-from-recovery.html\"\n });\n $routeProvider.when(\"/change-password/:token\", {\n templateUrl: \"/partials/change-password-from-recovery.html\"\n });\n $routeProvider.when(\"/invitation/:token\", {\n templateUrl: \"/partials/invitation.html\"\n });\n $routeProvider.when(\"/error\", {\n templateUrl: \"/partials/error.html\"\n });\n $routeProvider.when(\"/not-found\", {\n templateUrl: \"/partials/not-found.html\"\n });\n $routeProvider.when(\"/permission-denied\", {\n templateUrl: \"/partials/permission-denied.html\"\n });\n $routeProvider.otherwise({\n redirectTo: '/not-found'\n });\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false\n });\n defaultHeaders = {\n \"Content-Type\": \"application/json\",\n \"Accept-Language\": \"en\",\n \"X-Session-Id\": taiga.sessionId\n };\n $httpProvider.defaults.headers[\"delete\"] = defaultHeaders;\n $httpProvider.defaults.headers.patch = defaultHeaders;\n $httpProvider.defaults.headers.post = defaultHeaders;\n $httpProvider.defaults.headers.put = defaultHeaders;\n $httpProvider.defaults.headers.get = {\n \"X-Session-Id\": taiga.sessionId\n };\n $tgEventsProvider.setSessionId(taiga.sessionId);\n authHttpIntercept = function($q, $location, $navUrls, $lightboxService) {\n var httpResponseError;\n httpResponseError = function(response) {\n var nextPath;\n if (response.status === 0) {\n $lightboxService.closeAll();\n $location.path($navUrls.resolve(\"error\"));\n $location.replace();\n } else if (response.status === 401) {\n nextPath = $location.path();\n $location.url($navUrls.resolve(\"login\")).search(\"next=\" + nextPath);\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"authHttpIntercept\", [\"$q\", \"$location\", \"$tgNavUrls\", \"lightboxService\", authHttpIntercept]);\n $httpProvider.interceptors.push('authHttpIntercept');\n versionCheckHttpIntercept = function($q, $confirm) {\n var httpResponseError, versionErrorMsg;\n versionErrorMsg = \"Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost).\";\n httpResponseError = function(response) {\n if (response.status === 400 && response.data.version) {\n $confirm.notify(\"error\", versionErrorMsg, null, 10000);\n return $q.reject(response);\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"versionCheckHttpIntercept\", [\"$q\", \"$tgConfirm\", versionCheckHttpIntercept]);\n $httpProvider.interceptors.push('versionCheckHttpIntercept');\n window.checksley.updateValidators({\n linewidth: function(val, width) {\n var lines, valid;\n lines = taiga.nl2br(val).split(\"
    \");\n valid = _.every(lines, function(line) {\n return line.length < width;\n });\n return valid;\n }\n });\n return window.checksley.updateMessages(\"default\", {\n linewidth: \"The subject must have a maximum size of %s\"\n });\n };\n\n init = function($log, $i18n, $config, $rootscope, $auth, $events, $analytics) {\n $i18n.initialize($config.get(\"defaultLanguage\"));\n $log.debug(\"Initialize application\");\n if ($auth.isAuthenticated()) {\n $events.setupConnection();\n }\n return $analytics.initialize();\n };\n\n modules = [\"taigaBase\", \"taigaCommon\", \"taigaResources\", \"taigaLocales\", \"taigaAuth\", \"taigaEvents\", \"taigaRelatedTasks\", \"taigaBacklog\", \"taigaTaskboard\", \"taigaKanban\", \"taigaIssues\", \"taigaUserStories\", \"taigaTasks\", \"taigaTeam\", \"taigaWiki\", \"taigaSearch\", \"taigaAdmin\", \"taigaNavMenu\", \"taigaProject\", \"taigaUserSettings\", \"taigaFeedback\", \"taigaPlugins\", \"taigaIntegrations\", \"ngRoute\", \"ngAnimate\"];\n\n module = angular.module(\"taiga\", modules);\n\n module.config([\"$routeProvider\", \"$locationProvider\", \"$httpProvider\", \"$provide\", \"$tgEventsProvider\", \"tgLoaderProvider\", configure]);\n\n module.run([\"$log\", \"$tgI18n\", \"$tgConfig\", \"$rootScope\", \"$tgAuth\", \"$tgEvents\", \"$tgAnalytics\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: classes.coffee\n */\n\n(function() {\n var TaigaBase, TaigaController, TaigaService,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n TaigaBase = (function() {\n function TaigaBase() {}\n\n return TaigaBase;\n\n })();\n\n TaigaService = (function(_super) {\n __extends(TaigaService, _super);\n\n function TaigaService() {\n return TaigaService.__super__.constructor.apply(this, arguments);\n }\n\n return TaigaService;\n\n })(TaigaBase);\n\n TaigaController = (function(_super) {\n __extends(TaigaController, _super);\n\n function TaigaController() {\n this.onInitialDataError = __bind(this.onInitialDataError, this);\n return TaigaController.__super__.constructor.apply(this, arguments);\n }\n\n TaigaController.prototype.onInitialDataError = function(xhr) {\n if (xhr) {\n if (xhr.status === 404) {\n this.location.path(this.navUrls.resolve(\"not-found\"));\n this.location.replace();\n } else if (xhr.status === 403) {\n this.location.path(this.navUrls.resolve(\"permission-denied\"));\n this.location.replace();\n }\n }\n return this.q.reject(xhr);\n };\n\n return TaigaController;\n\n })(TaigaBase);\n\n this.taiga.Base = TaigaBase;\n\n this.taiga.Service = TaigaService;\n\n this.taiga.Controller = TaigaController;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils.coffee\n */\n\n(function() {\n var bindMethods, bindOnce, cancelTimeout, debounce, debounceLeading, groupBy, joinStr, mixOf, nl2br, scopeDefer, sizeFormat, slugify, startswith, taiga, timeout, toString, toggleText, trim, unslugify,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n __slice = [].slice,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n nl2br = (function(_this) {\n return function(str) {\n var breakTag;\n breakTag = '
    ';\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + breakTag + '$2');\n };\n })(this);\n\n bindMethods = (function(_this) {\n return function(object) {\n var dependencies, methods;\n dependencies = _.keys(object);\n methods = [];\n _.forIn(object, function(value, key) {\n if (__indexOf.call(dependencies, key) < 0) {\n return methods.push(key);\n }\n });\n return _.bindAll(object, methods);\n };\n })(this);\n\n bindOnce = (function(_this) {\n return function(scope, attr, continuation) {\n var delBind, val;\n val = scope.$eval(attr);\n if (val !== void 0) {\n return continuation(val);\n }\n delBind = null;\n return delBind = scope.$watch(attr, function(val) {\n if (val === void 0) {\n return;\n }\n continuation(val);\n if (delBind) {\n return delBind();\n }\n });\n };\n })(this);\n\n mixOf = function() {\n var Mixed, base, method, mixin, mixins, name, _i, _ref;\n base = arguments[0], mixins = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n Mixed = (function(_super) {\n __extends(Mixed, _super);\n\n function Mixed() {\n return Mixed.__super__.constructor.apply(this, arguments);\n }\n\n return Mixed;\n\n })(base);\n for (_i = mixins.length - 1; _i >= 0; _i += -1) {\n mixin = mixins[_i];\n _ref = mixin.prototype;\n for (name in _ref) {\n method = _ref[name];\n Mixed.prototype[name] = method;\n }\n }\n return Mixed;\n };\n\n trim = function(data, char) {\n return _.str.trim(data, char);\n };\n\n slugify = function(data) {\n return _.str.slugify(data);\n };\n\n unslugify = function(data) {\n if (data) {\n return _.str.capitalize(data.replace(/-/g, ' '));\n }\n return data;\n };\n\n toggleText = function(element, texts) {\n var nextTextPosition, text;\n nextTextPosition = element.data('nextTextPosition');\n if ((nextTextPosition == null) || nextTextPosition >= texts.length) {\n nextTextPosition = 0;\n }\n text = texts[nextTextPosition];\n element.data('nextTextPosition', nextTextPosition + 1);\n return element.text(text);\n };\n\n groupBy = function(coll, pred) {\n var item, result, _i, _len;\n result = {};\n for (_i = 0, _len = coll.length; _i < _len; _i++) {\n item = coll[_i];\n result[pred(item)] = item;\n }\n return result;\n };\n\n timeout = function(wait, continuation) {\n return window.setTimeout(continuation, wait);\n };\n\n cancelTimeout = function(timeoutVar) {\n return window.clearTimeout(timeoutVar);\n };\n\n scopeDefer = function(scope, func) {\n return _.defer((function(_this) {\n return function() {\n return scope.$apply(func);\n };\n })(this));\n };\n\n toString = function(value) {\n if (_.isNumber(value)) {\n return value + \"\";\n } else if (_.isString(value)) {\n return value;\n } else if (_.isPlainObject(value)) {\n return JSON.stringify(value);\n } else if (_.isUndefined(value)) {\n return \"\";\n }\n return value.toString();\n };\n\n joinStr = function(str, coll) {\n return _.str.join(str, coll);\n };\n\n debounce = function(wait, func) {\n return _.debounce(func, wait, {\n leading: true,\n trailing: false\n });\n };\n\n debounceLeading = function(wait, func) {\n return _.debounce(func, wait, {\n leading: false,\n trailing: true\n });\n };\n\n startswith = function(str1, str2) {\n return _.str.startsWith(str1, str2);\n };\n\n sizeFormat = function(input, precision) {\n var number, size, units;\n if (precision == null) {\n precision = 1;\n }\n if (isNaN(parseFloat(input)) || !isFinite(input)) {\n return \"-\";\n }\n if (input === 0) {\n return \"0 bytes\";\n }\n units = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n number = Math.floor(Math.log(input) / Math.log(1024));\n if (number > 5) {\n number = 5;\n }\n size = (input / Math.pow(1024, number)).toFixed(precision);\n return \"\" + size + \" \" + units[number];\n };\n\n taiga = this.taiga;\n\n taiga.nl2br = nl2br;\n\n taiga.bindMethods = bindMethods;\n\n taiga.bindOnce = bindOnce;\n\n taiga.mixOf = mixOf;\n\n taiga.trim = trim;\n\n taiga.slugify = slugify;\n\n taiga.unslugify = unslugify;\n\n taiga.toggleText = toggleText;\n\n taiga.groupBy = groupBy;\n\n taiga.timeout = timeout;\n\n taiga.cancelTimeout = cancelTimeout;\n\n taiga.scopeDefer = scopeDefer;\n\n taiga.toString = toString;\n\n taiga.joinStr = joinStr;\n\n taiga.debounce = debounce;\n\n taiga.debounceLeading = debounceLeading;\n\n taiga.startswith = startswith;\n\n taiga.sizeFormat = sizeFormat;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/controllerMixins.coffee\n */\n\n(function() {\n var FiltersMixin, PageMixin, groupBy, joinStr, taiga, toString, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n joinStr = this.taiga.joinStr;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n PageMixin = (function() {\n function PageMixin() {}\n\n PageMixin.prototype.fillUsersAndRoles = function(users, roles) {\n var activeUsers, availableRoles;\n activeUsers = _.filter(users, (function(_this) {\n return function(user) {\n return user.is_active;\n };\n })(this));\n this.scope.activeUsers = _.sortBy(activeUsers, \"full_name_display\");\n this.scope.activeUsersById = groupBy(this.scope.activeUsers, function(e) {\n return e.id;\n });\n this.scope.users = _.sortBy(users, \"full_name_display\");\n this.scope.usersById = groupBy(this.scope.users, function(e) {\n return e.id;\n });\n this.scope.roles = _.sortBy(roles, \"order\");\n availableRoles = _(this.scope.project.memberships).map(\"role\").uniq().value();\n return this.scope.computableRoles = _(roles).filter(\"computable\").filter(function(x) {\n return _.contains(availableRoles, x.id);\n }).value();\n };\n\n PageMixin.prototype.loadUsersAndRoles = function() {\n var promise;\n promise = this.q.all([this.rs.projects.usersList(this.scope.projectId), this.rs.projects.rolesList(this.scope.projectId)]);\n return promise.then((function(_this) {\n return function(results) {\n var roles, users;\n users = results[0], roles = results[1];\n _this.fillUsersAndRoles(users, roles);\n return results;\n };\n })(this));\n };\n\n return PageMixin;\n\n })();\n\n taiga.PageMixin = PageMixin;\n\n FiltersMixin = (function() {\n function FiltersMixin() {}\n\n FiltersMixin.prototype.selectFilter = function(name, value, load) {\n var existing, location, params;\n if (load == null) {\n load = false;\n }\n params = this.location.search();\n if (params[name] !== void 0 && name !== \"page\") {\n existing = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n existing.push(taiga.toString(value));\n existing = _.compact(existing);\n value = joinStr(\",\", _.uniq(existing));\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n };\n\n FiltersMixin.prototype.replaceFilter = function(name, value, load) {\n var location;\n if (load == null) {\n load = false;\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n };\n\n FiltersMixin.prototype.replaceAllFilters = function(filters, load) {\n var location;\n if (load == null) {\n load = false;\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(filters);\n };\n\n FiltersMixin.prototype.unselectFilter = function(name, value, load) {\n var location, newValues, params, parsedValues;\n if (load == null) {\n load = false;\n }\n params = this.location.search();\n if (params[name] === void 0) {\n return;\n }\n if (value === void 0 || value === null) {\n delete params[name];\n }\n parsedValues = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n newValues = _.reject(parsedValues, function(x) {\n return x === taiga.toString(value);\n });\n newValues = _.compact(newValues);\n if (_.isEmpty(newValues)) {\n value = null;\n } else {\n value = joinStr(\",\", _.uniq(newValues));\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n };\n\n return FiltersMixin;\n\n })();\n\n taiga.FiltersMixin = FiltersMixin;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaAdmin\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/auth.coffee\n */\n\n(function() {\n var AuthService, CancelAccountDirective, ChangeEmailDirective, ChangePasswordFromRecoveryDirective, ForgotPasswordDirective, InvitationDirective, LoginDirective, PublicRegisterMessageDirective, RegisterDirective, debounce, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAuth\", [\"taigaResources\"]);\n\n AuthService = (function(_super) {\n __extends(AuthService, _super);\n\n AuthService.$inject = [\"$rootScope\", \"$tgStorage\", \"$tgModel\", \"$tgResources\", \"$tgHttp\", \"$tgUrls\"];\n\n function AuthService(rootscope, storage, model, rs, http, urls) {\n this.rootscope = rootscope;\n this.storage = storage;\n this.model = model;\n this.rs = rs;\n this.http = http;\n this.urls = urls;\n AuthService.__super__.constructor.call(this);\n }\n\n AuthService.prototype.getUser = function() {\n var user, userData;\n if (this.rootscope.user) {\n return this.rootscope.user;\n }\n userData = this.storage.get(\"userInfo\");\n if (userData) {\n user = this.model.make_model(\"users\", userData);\n this.rootscope.user = user;\n return user;\n }\n return null;\n };\n\n AuthService.prototype.setUser = function(user) {\n this.rootscope.auth = user;\n this.rootscope.$broadcast(\"i18n:change\", user.default_language);\n this.storage.set(\"userInfo\", user.getAttrs());\n return this.rootscope.user = user;\n };\n\n AuthService.prototype.clear = function() {\n this.rootscope.auth = null;\n this.rootscope.user = null;\n return this.storage.remove(\"userInfo\");\n };\n\n AuthService.prototype.setToken = function(token) {\n return this.storage.set(\"token\", token);\n };\n\n AuthService.prototype.getToken = function() {\n return this.storage.get(\"token\");\n };\n\n AuthService.prototype.removeToken = function() {\n return this.storage.remove(\"token\");\n };\n\n AuthService.prototype.isAuthenticated = function() {\n if (this.getUser() !== null) {\n return true;\n }\n return false;\n };\n\n AuthService.prototype.login = function(data, type) {\n var url;\n url = this.urls.resolve(\"auth\");\n data = _.clone(data, false);\n data.type = type ? type : \"normal\";\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(data, status) {\n var user;\n user = _this.model.make_model(\"users\", data.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.logout = function() {\n this.removeToken();\n return this.clear();\n };\n\n AuthService.prototype.register = function(data, type, existing) {\n var url;\n url = this.urls.resolve(\"auth-register\");\n data = _.clone(data, false);\n data.type = type ? type : \"public\";\n if (type === \"private\") {\n data.existing = existing ? existing : false;\n }\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(response) {\n var user;\n user = _this.model.make_model(\"users\", response.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.getInvitation = function(token) {\n return this.rs.invitations.get(token);\n };\n\n AuthService.prototype.acceptInvitiationWithNewUser = function(data) {\n return this.register(data, \"private\", false);\n };\n\n AuthService.prototype.acceptInvitiationWithExistingUser = function(data) {\n return this.register(data, \"private\", true);\n };\n\n AuthService.prototype.forgotPassword = function(data) {\n var url;\n url = this.urls.resolve(\"users-password-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changePasswordFromRecovery = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-password-from-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changeEmail = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-email\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n AuthService.prototype.cancelAccount = function(data) {\n var url;\n url = this.urls.resolve(\"users-cancel-account\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n return AuthService;\n\n })(taiga.Service);\n\n module.service(\"$tgAuth\", AuthService);\n\n PublicRegisterMessageDirective = function($config, $navUrls) {\n var template, templateFn;\n template = _.template(\"

    \\n Not registered yet?\\n \\\" tg-nav=\\\"register\\\" title=\\\"Register\\\"> create your free account here\\n

    \");\n templateFn = function() {\n var publicRegisterEnabled;\n publicRegisterEnabled = $config.get(\"publicRegisterEnabled\");\n if (!publicRegisterEnabled) {\n return \"\";\n }\n return template({\n url: $navUrls.resolve(\"register\")\n });\n };\n return {\n restrict: \"AE\",\n scope: {},\n template: templateFn\n };\n };\n\n module.directive(\"tgPublicRegisterMessage\", [\"$tgConfig\", \"$tgNavUrls\", PublicRegisterMessageDirective]);\n\n LoginDirective = function($auth, $confirm, $location, $config, $routeParams, $navUrls, $events) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, submit;\n onSuccess = function(response) {\n var nextUrl;\n if ($routeParams['next'] && $routeParams['next'] !== $navUrls.resolve(\"login\")) {\n nextUrl = $routeParams['next'];\n } else {\n nextUrl = $navUrls.resolve(\"home\");\n }\n $events.setupConnection();\n return $location.path(nextUrl);\n };\n onError = function(response) {\n return $confirm.notify(\"light-error\", \"According to our Oompa Loompas, your username/email or password are incorrect.\");\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var data, form, promise;\n event.preventDefault();\n form = new checksley.Form($el.find(\"form.login-form\"));\n if (!form.validate()) {\n return;\n }\n data = {\n \"username\": $el.find(\"form.login-form input[name=username]\").val(),\n \"password\": $el.find(\"form.login-form input[name=password]\").val()\n };\n promise = $auth.login(data);\n return promise.then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLogin\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\", \"$tgNavUrls\", \"$tgEvents\", LoginDirective]);\n\n RegisterDirective = function($auth, $confirm, $location, $navUrls, $config, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n if (!$config.get(\"publicRegisterEnabled\")) {\n $location.path($navUrls.resolve(\"not-found\"));\n $location.replace();\n }\n $scope.data = {};\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmit = function(response) {\n $analytics.trackEvent(\"auth\", \"register\", \"user registration\", 1);\n $confirm.notify(\"success\", \"Our Oompa Loompas are happy, welcome to Taiga.\");\n return $location.path($navUrls.resolve(\"home\"));\n };\n onErrorSubmit = function(response) {\n if (response.data._error_message != null) {\n $confirm.notify(\"light-error\", \"According to our Oompa Loompas there was an error. \" + response.data._error_message);\n }\n return form.setErrors(response.data);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.register($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRegister\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\", \"$tgAnalytics\", RegisterDirective]);\n\n ForgotPasswordDirective = function($auth, $confirm, $location, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n $location.path($navUrls.resolve(\"login\"));\n return $confirm.success(\"Check your inbox!
    We have sent a mail to
    \" + response.data.email + \"
    with the instructions to set a new password\");\n };\n onErrorSubmit = function(response) {\n return $confirm.notify(\"light-error\", \"According to our Oompa Loompas, your are not registered yet.\");\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.forgotPassword($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgForgotPassword\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", ForgotPasswordDirective]);\n\n ChangePasswordFromRecoveryDirective = function($auth, $confirm, $location, $params, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n if ($params.token != null) {\n $scope.tokenInParams = true;\n $scope.data.token = $params.token;\n } else {\n $scope.tokenInParams = false;\n }\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n $location.path($navUrls.resolve(\"login\"));\n return $confirm.success(\"Our Oompa Loompas saved your new password.
    Try to sign in with it.\");\n };\n onErrorSubmit = function(response) {\n return $confirm.notify(\"light-error\", \"One of our Oompa Loompas say '\" + response.data._error_message + \"'.\");\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.changePasswordFromRecovery($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangePasswordFromRecovery\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", ChangePasswordFromRecoveryDirective]);\n\n InvitationDirective = function($auth, $confirm, $location, $params, $navUrls, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var loginForm, onErrorSubmitLogin, onErrorSubmitRegister, onSuccessSubmitLogin, onSuccessSubmitRegister, promise, registerForm, submitLogin, submitRegister, token;\n token = $params.token;\n promise = $auth.getInvitation(token);\n promise.then(function(invitation) {\n return $scope.invitation = invitation;\n });\n promise.then(null, function(response) {\n $location.path($navUrls.resolve(\"login\"));\n return $confirm.success(\"Ooops, we have a problem
    Our Oompa Loompas can't find your invitation.\");\n });\n $scope.dataLogin = {\n token: token\n };\n loginForm = $el.find(\"form.login-form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmitLogin = function(response) {\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with existing user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n return $confirm.notify(\"success\", \"You've successfully joined this project\", \"Welcome to \" + (_.escape($scope.invitation.project_name)));\n };\n onErrorSubmitLogin = function(response) {\n return $confirm.notify(\"light-error\", \"According to our Oompa Loompas, your are not registered yet or typed an invalid password.\");\n };\n submitLogin = debounce(2000, (function(_this) {\n return function(event) {\n event.preventDefault();\n if (!loginForm.validate()) {\n return;\n }\n promise = $auth.acceptInvitiationWithExistingUser($scope.dataLogin);\n return promise.then(onSuccessSubmitLogin, onErrorSubmitLogin);\n };\n })(this));\n $el.on(\"submit\", \"form.login-form\", submitLogin);\n $el.on(\"click\", \".button-login\", submitLogin);\n $scope.dataRegister = {\n token: token\n };\n registerForm = $el.find(\"form.register-form\").checksley();\n onSuccessSubmitRegister = function(response) {\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with new user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n return $confirm.notify(\"success\", \"You've successfully joined this project\", \"Welcome to \" + (_.escape($scope.invitation.project_name)));\n };\n onErrorSubmitRegister = function(response) {\n return $confirm.notify(\"light-error\", \"According to our Oompa Loompas, that username or email is already in use.\");\n };\n submitRegister = debounce(2000, (function(_this) {\n return function(event) {\n event.preventDefault();\n if (!registerForm.validate()) {\n return;\n }\n promise = $auth.acceptInvitiationWithNewUser($scope.dataRegister);\n return promise.then(onSuccessSubmitRegister, onErrorSubmitRegister);\n };\n })(this));\n $el.on(\"submit\", \"form.register-form\", submitRegister);\n return $el.on(\"click\", \".button-register\", submitRegister);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgInvitation\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", \"$tgAnalytics\", InvitationDirective]);\n\n ChangeEmailDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.email_token = $params.email_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n return $repo.queryOne(\"users\", $auth.getUser().id).then((function(_this) {\n return function(data) {\n $auth.setUser(data);\n $location.path($navUrls.resolve(\"home\"));\n return $confirm.success(\"Our Oompa Loompas updated your email\");\n };\n })(this));\n };\n onErrorSubmit = function(response) {\n return $confirm.notify(\"error\", \"One of our Oompa Loompas says '\" + response.data._error_message + \"'.\");\n };\n submit = function() {\n var promise;\n if (!form.validate()) {\n return;\n }\n promise = $auth.changeEmail($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n $el.on(\"submit\", function(event) {\n event.preventDefault();\n return submit();\n });\n return $el.on(\"click\", \"a.button-change-email\", function(event) {\n event.preventDefault();\n return submit();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangeEmail\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", ChangeEmailDirective]);\n\n CancelAccountDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.cancel_token = $params.cancel_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n $auth.logout();\n $location.path($navUrls.resolve(\"home\"));\n return $confirm.success(\"Our Oompa Loompas removed your account\");\n };\n onErrorSubmit = function(response) {\n return $confirm.notify(\"error\", \"One of our Oompa Loompas says '\" + response.data._error_message + \"'.\");\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.cancelAccount($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCancelAccount\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", CancelAccountDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaBacklog\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base.coffee\n */\n\n(function() {\n var TaigaMainDirective, bindOnce, groupBy, init, module, taiga, urls;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\", [\"taigaLocales\"]);\n\n TaigaMainDirective = function($rootscope, $window) {\n var link;\n link = function($scope, $el, $attrs) {\n return $window.onresize = function() {\n return $rootscope.$broadcast(\"resize\");\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMain\", [\"$rootScope\", \"$window\", TaigaMainDirective]);\n\n urls = {\n \"home\": \"/\",\n \"error\": \"/error\",\n \"not-found\": \"/not-found\",\n \"permission-denied\": \"/permission-denied\",\n \"login\": \"/login\",\n \"forgot-password\": \"/forgot-password\",\n \"change-password\": \"/change-password/:token\",\n \"change-email\": \"/change-email/:token\",\n \"cancel-account\": \"/cancel-account/:token\",\n \"register\": \"/register\",\n \"invitation\": \"/invitation/:token\",\n \"create-project\": \"/create-project\",\n \"profile\": \"/:user\",\n \"project\": \"/project/:project\",\n \"project-backlog\": \"/project/:project/backlog\",\n \"project-taskboard\": \"/project/:project/taskboard/:sprint\",\n \"project-kanban\": \"/project/:project/kanban\",\n \"project-issues\": \"/project/:project/issues\",\n \"project-search\": \"/project/:project/search\",\n \"project-userstories-detail\": \"/project/:project/us/:ref\",\n \"project-tasks-detail\": \"/project/:project/task/:ref\",\n \"project-issues-detail\": \"/project/:project/issue/:ref\",\n \"project-wiki\": \"/project/:project/wiki\",\n \"project-wiki-page\": \"/project/:project/wiki/:slug\",\n \"project-team\": \"/project/:project/team\",\n \"project-admin-home\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-details\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-default-values\": \"/project/:project/admin/project-profile/default-values\",\n \"project-admin-project-profile-modules\": \"/project/:project/admin/project-profile/modules\",\n \"project-admin-project-values-us-status\": \"/project/:project/admin/project-values/us-status\",\n \"project-admin-project-values-us-points\": \"/project/:project/admin/project-values/us-points\",\n \"project-admin-project-values-task-status\": \"/project/:project/admin/project-values/task-status\",\n \"project-admin-project-values-issue-status\": \"/project/:project/admin/project-values/issue-status\",\n \"project-admin-project-values-issue-types\": \"/project/:project/admin/project-values/issue-types\",\n \"project-admin-project-values-issue-priorities\": \"/project/:project/admin/project-values/issue-priorities\",\n \"project-admin-project-values-issue-severities\": \"/project/:project/admin/project-values/issue-severities\",\n \"project-admin-memberships\": \"/project/:project/admin/memberships\",\n \"project-admin-roles\": \"/project/:project/admin/roles\",\n \"project-admin-third-parties-github\": \"/project/:project/admin/third-parties/github\",\n \"project-admin-third-parties-gitlab\": \"/project/:project/admin/third-parties/gitlab\",\n \"project-admin-third-parties-bitbucket\": \"/project/:project/admin/third-parties/bitbucket\",\n \"user-settings-user-profile\": \"/project/:project/user-settings/user-profile\",\n \"user-settings-user-change-password\": \"/project/:project/user-settings/user-change-password\",\n \"user-settings-user-avatar\": \"/project/:project/user-settings/user-avatar\",\n \"user-settings-mail-notifications\": \"/project/:project/user-settings/mail-notifications\"\n };\n\n init = function($log, $navurls) {\n $log.debug(\"Initialize navigation urls\");\n return $navurls.update(urls);\n };\n\n module.run([\"$log\", \"$tgNavUrls\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common.coffee\n */\n\n(function() {\n var AnimationFrame, AppTitle, CheckPermissionDirective, LimitLineLengthDirective, ProjectUrl, Qqueue, SelectedText, ToggleCommentDirective, module, taiga,\n __slice = [].slice;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\", []);\n\n SelectedText = function($window, $document) {\n var get;\n get = function() {\n if ($window.getSelection) {\n return $window.getSelection().toString();\n } else if ($document.selection) {\n return $document.selection.createRange().text;\n }\n return \"\";\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$selectedText\", [\"$window\", \"$document\", SelectedText]);\n\n CheckPermissionDirective = function() {\n var link, render;\n render = function($el, project, permission) {\n if (project.my_permissions.indexOf(permission) > -1) {\n return $el.removeClass('hidden');\n }\n };\n link = function($scope, $el, $attrs) {\n var permission;\n $el.addClass('hidden');\n permission = $attrs.tgCheckPermission;\n $scope.$watch(\"project\", function(project) {\n if (project != null) {\n return render($el, project, permission);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCheckPermission\", CheckPermissionDirective);\n\n AnimationFrame = function() {\n var add, animationFrame, performAnimation, tail;\n animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n performAnimation = (function(_this) {\n return function(time) {\n var fn;\n fn = tail.shift();\n fn();\n if (tail.length) {\n return animationFrame(performAnimation);\n }\n };\n })(this);\n tail = [];\n add = function() {\n var fn, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = arguments.length; _i < _len; _i++) {\n fn = arguments[_i];\n tail.push(fn);\n if (tail.length === 1) {\n _results.push(animationFrame(performAnimation));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n return {\n add: add\n };\n };\n\n module.factory(\"animationFrame\", AnimationFrame);\n\n ToggleCommentDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.find(\"textarea\").on(\"focus\", function() {\n return $el.addClass(\"active\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgToggleComment\", ToggleCommentDirective);\n\n AppTitle = function() {\n var set;\n set = function(text) {\n return $(\"title\").text(text);\n };\n return {\n set: set\n };\n };\n\n module.factory(\"$appTitle\", AppTitle);\n\n ProjectUrl = function($navurls) {\n var get;\n get = function(project) {\n var ctx;\n ctx = {\n project: project.slug\n };\n if (project.is_backlog_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-backlog\", ctx);\n }\n if (project.is_kanban_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-kanban\", ctx);\n }\n if (project.is_wiki_activated && project.my_permissions.indexOf(\"view_wiki_pages\") > -1) {\n return $navurls.resolve(\"project-wiki\", ctx);\n }\n if (project.is_issues_activated && project.my_permissions.indexOf(\"view_issues\") > -1) {\n return $navurls.resolve(\"project-issues\", ctx);\n }\n return $navurls.resolve(\"project\", ctx);\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$projectUrl\", [\"$tgNavUrls\", ProjectUrl]);\n\n LimitLineLengthDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var maxColsPerLine;\n maxColsPerLine = parseInt($el.attr(\"cols\"));\n return $el.on(\"keyup\", function(event) {\n var code, lines;\n code = event.keyCode;\n lines = $el.val().split(\"\\n\");\n _.each(lines, function(line, index) {\n return lines[index] = line.substring(0, maxColsPerLine - 2);\n });\n return $el.val(lines.join(\"\\n\"));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLimitLineLength\", LimitLineLengthDirective);\n\n Qqueue = function($q) {\n var deferred, lastPromise, qqueue;\n deferred = $q.defer();\n deferred.resolve();\n lastPromise = deferred.promise;\n qqueue = {\n bindAdd: (function(_this) {\n return function(fn) {\n return function() {\n var args;\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n return lastPromise = lastPromise.then(function() {\n return fn.apply(_this, args);\n });\n };\n return qqueue;\n };\n })(this),\n add: (function(_this) {\n return function(fn) {\n if (!lastPromise) {\n lastPromise = fn();\n } else {\n lastPromise = lastPromise.then(fn);\n }\n return qqueue;\n };\n })(this)\n };\n return qqueue;\n };\n\n module.factory(\"$tgQqueue\", [\"$q\", Qqueue]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/events.coffee\n */\n\n(function() {\n var EventsProvider, EventsService, bindMethods, module, startswith, taiga;\n\n taiga = this.taiga;\n\n startswith = this.taiga.startswith;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaEvents\", []);\n\n EventsService = (function() {\n function EventsService(win, log, config, auth) {\n this.win = win;\n this.log = log;\n this.config = config;\n this.auth = auth;\n bindMethods(this);\n }\n\n EventsService.prototype.initialize = function(sessionId) {\n this.sessionId = sessionId;\n this.subscriptions = {};\n this.connected = false;\n this.error = false;\n this.pendingMessages = [];\n if (this.win.WebSocket === void 0) {\n return this.log.info(\"WebSockets not supported on your browser\");\n }\n };\n\n EventsService.prototype.setupConnection = function() {\n var loc, path, scheme, url;\n this.stopExistingConnection();\n url = this.config.get(\"eventsUrl\");\n if (!url) {\n return;\n }\n if (!startswith(url, \"ws:\") && !startswith(url, \"wss:\")) {\n loc = this.win.location;\n scheme = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n path = _.str.ltrim(url, \"/\");\n url = \"\" + scheme + \"//\" + loc.host + \"/\" + path;\n }\n this.ws = new this.win.WebSocket(url);\n this.ws.addEventListener(\"open\", this.onOpen);\n this.ws.addEventListener(\"message\", this.onMessage);\n this.ws.addEventListener(\"error\", this.onError);\n return this.ws.addEventListener(\"close\", this.onClose);\n };\n\n EventsService.prototype.stopExistingConnection = function() {\n if (this.ws === void 0) {\n return;\n }\n this.ws.removeEventListener(\"open\", this.onOpen);\n this.ws.removeEventListener(\"close\", this.onClose);\n this.ws.removeEventListener(\"error\", this.onError);\n this.ws.removeEventListener(\"message\", this.onMessage);\n this.ws.close();\n return delete this.ws;\n };\n\n EventsService.prototype.serialize = function(message) {\n if (_.isObject(message)) {\n return JSON.stringify(message);\n }\n return message;\n };\n\n EventsService.prototype.sendMessage = function(message) {\n var messages, msg, _i, _len, _results;\n this.pendingMessages.push(message);\n if (!this.connected) {\n return;\n }\n messages = _.map(this.pendingMessages, this.serialize);\n this.pendingMessages = [];\n _results = [];\n for (_i = 0, _len = messages.length; _i < _len; _i++) {\n msg = messages[_i];\n _results.push(this.ws.send(msg));\n }\n return _results;\n };\n\n EventsService.prototype.subscribe = function(scope, routingKey, callback) {\n var message, subscription;\n if (this.error) {\n return;\n }\n this.log.debug(\"Subscribe to: \" + routingKey);\n subscription = {\n scope: scope,\n routingKey: routingKey,\n callback: _.debounce(callback, 500, {\n \"leading\": true,\n \"trailing\": false\n })\n };\n message = {\n \"cmd\": \"subscribe\",\n \"routing_key\": routingKey\n };\n this.subscriptions[routingKey] = subscription;\n this.sendMessage(message);\n return scope.$on(\"$destroy\", (function(_this) {\n return function() {\n return _this.unsubscribe(routingKey);\n };\n })(this));\n };\n\n EventsService.prototype.unsubscribe = function(routingKey) {\n var message;\n if (this.error) {\n return;\n }\n this.log.debug(\"Unsubscribe from: \" + routingKey);\n message = {\n \"cmd\": \"unsubscribe\",\n \"routing_key\": routingKey\n };\n return this.sendMessage(message);\n };\n\n EventsService.prototype.onOpen = function() {\n var message, token;\n this.connected = true;\n this.log.debug(\"WebSocket connection opened\");\n token = this.auth.getToken();\n message = {\n cmd: \"auth\",\n data: {\n token: token,\n sessionId: this.sessionId\n }\n };\n return this.sendMessage(message);\n };\n\n EventsService.prototype.onMessage = function(event) {\n var data, routingKey, subscription;\n this.log.debug(\"WebSocket message received: \" + event.data);\n data = JSON.parse(event.data);\n routingKey = data.routing_key;\n if (this.subscriptions[routingKey] == null) {\n return;\n }\n subscription = this.subscriptions[routingKey];\n return subscription.scope.$apply(function() {\n return subscription.callback(data.data);\n });\n };\n\n EventsService.prototype.onError = function(error) {\n this.log.error(\"WebSocket error: \" + error);\n return this.error = true;\n };\n\n EventsService.prototype.onClose = function() {\n this.log.debug(\"WebSocket closed.\");\n return this.connected = false;\n };\n\n return EventsService;\n\n })();\n\n EventsProvider = (function() {\n function EventsProvider() {}\n\n EventsProvider.prototype.setSessionId = function(sessionId) {\n return this.sessionId = sessionId;\n };\n\n EventsProvider.prototype.$get = function($win, $log, $conf, $auth) {\n var service;\n service = new EventsService($win, $log, $conf, $auth);\n service.initialize(this.sessionId);\n return service;\n };\n\n EventsProvider.prototype.$get.$inject = [\"$window\", \"$log\", \"$tgConfig\", \"$tgAuth\"];\n\n return EventsProvider;\n\n })();\n\n module.provider(\"$tgEvents\", EventsProvider);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/feedback.coffee\n */\n\n(function() {\n var FeedbackDirective, bindOnce, debounce, groupBy, mixOf, module, taiga, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaFeedback\", []);\n\n FeedbackDirective = function($lightboxService, $repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley();\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.create(\"feedback\", $scope.feedback);\n promise.then(function(data) {\n $loading.finish(submitButton);\n $lightboxService.close($el);\n return $confirm.notify(\"success\", \"\\\\o/ we'll be happy to read your\");\n });\n return promise.then(null, function() {\n $loading.finish(submitButton);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n $scope.$on(\"feedback:show\", function() {\n $scope.$apply(function() {\n return $scope.feedback = {};\n });\n $lightboxService.open($el);\n return $el.find(\"textarea\").focus();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbFeedback\", [\"lightboxService\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", FeedbackDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/integrations.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIntegrations\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIssues\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaKanban\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/locales.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaLocales\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/nav.coffee\n */\n\n(function() {\n var ProjectMenuDirective, ProjectsNavigationController, ProjectsNavigationDirective, bindOnce, groupBy, module, taiga, timeout,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaNavMenu\", []);\n\n ProjectsNavigationController = (function(_super) {\n __extends(ProjectsNavigationController, _super);\n\n ProjectsNavigationController.$inject = [\"$scope\", \"$rootScope\", \"$tgResources\", \"$tgNavUrls\", \"$projectUrl\"];\n\n function ProjectsNavigationController(scope, rootscope, rs, navurls, projectUrl) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.rs = rs;\n this.navurls = navurls;\n this.projectUrl = projectUrl;\n promise = this.loadInitialData();\n promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n this.scope.$on(\"projects:reload\", (function(_this) {\n return function() {\n return _this.loadInitialData();\n };\n })(this));\n this.scope.$on(\"project:loaded\", (function(_this) {\n return function(ctx, project) {\n return _this.loadInitialData();\n };\n })(this));\n }\n\n ProjectsNavigationController.prototype.loadInitialData = function() {\n return this.rs.projects.list().then((function(_this) {\n return function(projects) {\n var project, _i, _len;\n for (_i = 0, _len = projects.length; _i < _len; _i++) {\n project = projects[_i];\n project.url = _this.projectUrl.get(project);\n }\n _this.scope.projects = projects;\n _this.scope.filteredProjects = projects;\n _this.scope.filterText = \"\";\n return projects;\n };\n })(this));\n };\n\n ProjectsNavigationController.prototype.newProject = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"projects:create\");\n };\n })(this));\n };\n\n ProjectsNavigationController.prototype.filterProjects = function(text) {\n this.scope.filteredProjects = _.filter(this.scope.projects, function(project) {\n return project.name.toLowerCase().indexOf(text) > -1;\n });\n this.scope.filterText = text;\n return this.rootscope.$broadcast(\"projects:filtered\");\n };\n\n return ProjectsNavigationController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectsNavigationController\", ProjectsNavigationController);\n\n ProjectsNavigationDirective = function($rootscope, animationFrame, $timeout, tgLoader, $location, $compile) {\n var baseTemplate, hideMenu, link, loadingStart, overlay, projectsTemplate;\n baseTemplate = _.template(\"

    Your projects

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n
      \\n
    \\n
    \\n \\n
    \");\n projectsTemplate = _.template(\"<% _.each(projects, function(project) { %>\\n
  • \\n \\\">\\n <%- project.name %>\\n \\n \\n
  • \\n<% }) %>\");\n overlay = $(\".projects-nav-overlay\");\n loadingStart = 0;\n hideMenu = function() {\n var difftime, timeoutValue;\n if (overlay.is(':visible')) {\n difftime = new Date().getTime() - loadingStart;\n timeoutValue = 0;\n if (difftime < 1000) {\n timeoutValue = 1000 - timeoutValue;\n }\n return timeout(timeoutValue, function() {\n overlay.one('transitionend', function() {\n $(document.body).removeClass(\"loading-project open-projects-nav closed-projects-nav\").css(\"overflow-x\", \"visible\");\n return overlay.hide();\n });\n $(document.body).addClass(\"closed-projects-nav\");\n return tgLoader.disablePreventLoading();\n });\n }\n };\n link = function($scope, $el, $attrs, $ctrls) {\n var $ctrl, render, renderProjects;\n $ctrl = $ctrls[0];\n $rootscope.$on(\"project:loaded\", hideMenu);\n renderProjects = function(projects) {\n var html;\n html = projectsTemplate({\n projects: projects\n });\n $el.find(\".projects-list\").html(html);\n return $scope.$emit(\"regenerate:project-pagination\");\n };\n render = function(projects) {\n $el.html($compile(baseTemplate())($scope));\n return renderProjects(projects);\n };\n overlay.on('click', function() {\n return hideMenu();\n });\n $(document).on('keydown', (function(_this) {\n return function(e) {\n var code;\n code = e.keyCode ? e.keyCode : e.which;\n if (code === 27) {\n return hideMenu();\n }\n };\n })(this));\n $scope.$on(\"nav:projects-list:open\", function() {\n if (!$(document.body).hasClass(\"open-projects-nav\")) {\n animationFrame.add((function(_this) {\n return function() {\n return overlay.show();\n };\n })(this));\n }\n return animationFrame.add((function(_this) {\n return function() {\n return $(document.body).css(\"overflow-x\", \"hidden\");\n };\n })(this), (function(_this) {\n return function() {\n return $(document.body).toggleClass(\"open-projects-nav\");\n };\n })(this));\n });\n $el.on(\"click\", \".projects-list > li > a\", function(event) {\n var currentUrl, nextUrl, target;\n target = angular.element(event.currentTarget);\n nextUrl = target.prop(\"href\");\n currentUrl = $location.absUrl();\n if (nextUrl === currentUrl) {\n hideMenu();\n return;\n }\n $(document.body).addClass('loading-project');\n tgLoader.preventLoading();\n return loadingStart = new Date().getTime();\n });\n $el.on(\"click\", \".create-project-button .button\", function(event) {\n event.preventDefault();\n return $ctrl.newProject();\n });\n $el.on(\"keyup\", \".search-project\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n return $ctrl.filterProjects(target.val());\n });\n $scope.$on(\"projects:filtered\", function() {\n return renderProjects($scope.filteredProjects);\n });\n return $scope.$watch(\"projects\", function(projects) {\n if (projects != null) {\n return render(projects);\n }\n });\n };\n return {\n require: [\"tgProjectsNav\"],\n controller: ProjectsNavigationController,\n link: link\n };\n };\n\n module.directive(\"tgProjectsNav\", [\"$rootScope\", \"animationFrame\", \"$timeout\", \"tgLoader\", \"$tgLocation\", \"$compile\", ProjectsNavigationDirective]);\n\n ProjectMenuDirective = function($log, $compile, $auth, $rootscope, $tgAuth, $location, $navUrls, $config) {\n var getSectionName, link, mainTemplate, menuEntriesTemplate, renderMainMenu, renderMenuEntries, videoConferenceUrl;\n menuEntriesTemplate = _.template(\"
    \\n \\n
    \\n
    \\n \\n \\n \\\" alt=\\\"<%- user.full_name_display %>\\\" />\\n \\n
    \\n
    \\n
    \");\n mainTemplate = _.template(\"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n taiga[beta]\\n
    \\n
    \");\n getSectionName = function($el, sectionName, project) {\n var oldSectionName, _ref;\n oldSectionName = (_ref = $el.find(\"a.active\").parent().attr(\"id\")) != null ? _ref.replace(\"nav-\", \"\") : void 0;\n if (sectionName === \"backlog-kanban\") {\n if (oldSectionName === \"backlog\" || oldSectionName === \"kanban\") {\n sectionName = oldSectionName;\n } else if (project.is_backlog_activated && !project.is_kanban_activated) {\n sectionName = \"backlog\";\n } else if (!project.is_backlog_activated && project.is_kanban_activated) {\n sectionName = \"kanban\";\n }\n }\n return sectionName;\n };\n renderMainMenu = function($el) {\n var html;\n html = mainTemplate({});\n return $el.html(html);\n };\n renderMenuEntries = function($el, targetScope, project) {\n var container, ctx, dom, sectionName;\n if (project == null) {\n project = {};\n }\n container = $el.find(\".menu-container\");\n sectionName = getSectionName($el, targetScope.section, project);\n ctx = {\n user: $auth.getUser(),\n project: project,\n feedbackEnabled: $config.get(\"feedbackEnabled\")\n };\n dom = $compile(menuEntriesTemplate(ctx))(targetScope);\n dom.find(\"a.active\").removeClass(\"active\");\n dom.find(\"#nav-\" + sectionName + \" > a\").addClass(\"active\");\n return container.replaceWith(dom);\n };\n videoConferenceUrl = function(project) {\n var baseUrl, url;\n if (project.videoconferences === \"appear-in\") {\n baseUrl = \"https://appear.in/\";\n } else if (project.videoconferences === \"talky\") {\n baseUrl = \"https://talky.io/\";\n } else {\n return \"\";\n }\n if (project.videoconferences_salt) {\n url = \"\" + project.slug + \"-\" + project.videoconferences_salt;\n } else {\n url = \"\" + project.slug;\n }\n return baseUrl + url;\n };\n link = function($scope, $el, $attrs, $ctrl) {\n var project;\n renderMainMenu($el);\n project = null;\n $el.on(\"click\", \".logo\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $rootscope.$broadcast(\"nav:projects-list:open\");\n });\n $el.on(\"click\", \".user-settings .avatar\", function(event) {\n event.preventDefault();\n return $el.find(\".user-settings .popover\").popover().open();\n });\n $el.on(\"click\", \".logout\", function(event) {\n event.preventDefault();\n $auth.logout();\n return $scope.$apply(function() {\n return $location.path($navUrls.resolve(\"login\"));\n });\n });\n $el.on(\"click\", \"#nav-search > a\", function(event) {\n event.preventDefault();\n return $rootscope.$broadcast(\"search-box:show\", project);\n });\n $el.on(\"click\", \".feedback\", function(event) {\n event.preventDefault();\n return $rootscope.$broadcast(\"feedback:show\");\n });\n $scope.$on(\"projects:loaded\", function(listener) {\n $el.addClass(\"hidden\");\n return listener.stopPropagation();\n });\n return $scope.$on(\"project:loaded\", function(ctx, newProject) {\n project = newProject;\n if ($el.hasClass(\"hidden\")) {\n $el.removeClass(\"hidden\");\n }\n project.videoconferenceUrl = videoConferenceUrl(project);\n return renderMenuEntries($el, ctx.targetScope, project);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectMenu\", [\"$log\", \"$compile\", \"$tgAuth\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\", ProjectMenuDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/projects.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaProject\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/related-tasks.coffee\n */\n\n(function() {\n var RelatedTaskAssignedToInlineEditionDirective, RelatedTaskCreateButtonDirective, RelatedTaskCreateFormDirective, RelatedTaskRowDirective, RelatedTasksDirective, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaRelatedTasks\", []);\n\n RelatedTaskRowDirective = function($repo, $compile, $confirm, $rootscope, $loading) {\n var link, templateEdit, templateView;\n templateView = _.template(\"
    \\n
    \\n \\n <%- task.subject %>\\\" class=\\\"clickable\\\">\\n #<%- task.ref %>\\n <%- task.subject %>\\n \\n
    \\n <% if(perms.modify_task) { %>\\n \\n <% } %>\\n <% if(perms.delete_task) { %>\\n \\n <% } %>\\n
    \\n
    \\n
    \\n\\n
    \\n
    editable<% } %>\\\">\\n
    \\n <% if(perms.modify_task) { %>\\n \\n <% } %>\\n
    \\n
    \");\n templateEdit = _.template(\"
    \\n
    \\n \\\" placeholder=\\\"Type the task subject\\\" />\\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var renderEdit, renderView, saveTask;\n saveTask = debounce(2000, function(task) {\n var promise;\n task.subject = $el.find('input').val();\n $loading.start($el.find('.task-name'));\n promise = $repo.save(task);\n promise.then((function(_this) {\n return function() {\n $loading.finish($el.find('.task-name'));\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"related-tasks:update\");\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n $loading.finish($el.find('.task-name'));\n $el.find('input').val(task.subject);\n return $confirm.notify(\"error\");\n };\n })(this));\n return promise;\n });\n renderEdit = function(task) {\n $el.html($compile(templateEdit({\n task: task\n }))($scope));\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n } else if (event.keyCode === 27) {\n return renderView($model.$modelValue);\n }\n });\n $el.on(\"click\", \".icon-floppy\", function(event) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n });\n return $el.on(\"click\", \".cancel-edit\", function(event) {\n return renderView($model.$modelValue);\n });\n };\n renderView = function(task) {\n var perms;\n $el.off();\n perms = {\n modify_task: $scope.project.my_permissions.indexOf(\"modify_task\") !== -1,\n delete_task: $scope.project.my_permissions.indexOf(\"delete_task\") !== -1\n };\n $el.html($compile(templateView({\n task: task,\n perms: perms\n }))($scope));\n $el.on(\"click\", \".icon-edit\", function() {\n renderEdit($model.$modelValue);\n return $el.find('input').focus().select();\n });\n return $el.on(\"click\", \".delete-task\", function(event) {\n var message, title;\n task = $model.$modelValue;\n title = \"Delete Task\";\n message = task.subject;\n return $confirm.askOnDelete(title, message).then(function(finish) {\n var promise;\n promise = $repo.remove(task);\n promise.then(function() {\n finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"related-tasks:delete\");\n });\n return promise.then(null, function() {\n return $confirm.notify(\"error\");\n });\n });\n });\n };\n $scope.$watch($attrs.ngModel, function(val) {\n if (!val) {\n return;\n }\n return renderView(val);\n });\n $scope.$on(\"related-tasks:assigned-to-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n $scope.$on(\"related-tasks:status-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgRelatedTaskRow\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"$tgAnalytics\", RelatedTaskRowDirective]);\n\n RelatedTaskCreateFormDirective = function($repo, $compile, $confirm, $tgmodel, $loading, $analytics) {\n var link, newTask, template;\n template = _.template(\"
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \");\n newTask = {\n subject: \"\",\n assigned_to: null\n };\n link = function($scope, $el, $attrs) {\n var createTask, render;\n createTask = debounce(2000, function(task) {\n var promise;\n task.subject = $el.find('input').val();\n task.assigned_to = $scope.newTask.assigned_to;\n task.status = $scope.newTask.status;\n $scope.newTask.status = $scope.project.default_task_status;\n $scope.newTask.assigned_to = null;\n $loading.start($el.find('.task-name'));\n promise = $repo.create(\"tasks\", task);\n promise.then(function() {\n $analytics.trackEvent(\"task\", \"create\", \"create task on userstory\", 1);\n $loading.finish($el.find('.task-name'));\n $scope.$emit(\"related-tasks:add\");\n return $confirm.notify(\"success\");\n });\n promise.then(null, function() {\n $el.find('input').val(task.subject);\n $loading.finish($el.find('.task-name'));\n return $confirm.notify(\"error\");\n });\n return promise;\n });\n render = function() {\n $el.off();\n $el.html($compile(template())($scope));\n $el.find('input').focus().select();\n $el.addClass('active');\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return createTask(newTask).then(function() {\n return render();\n });\n } else if (event.keyCode === 27) {\n return $el.html(\"\");\n }\n });\n $el.on(\"click\", \".icon-delete\", function(event) {\n return $el.html(\"\");\n });\n return $el.on(\"click\", \".icon-floppy\", function(event) {\n return createTask(newTask).then(function() {\n return $el.html(\"\");\n });\n });\n };\n taiga.bindOnce($scope, \"us\", function(val) {\n newTask[\"status\"] = $scope.project.default_task_status;\n newTask[\"project\"] = $scope.project.id;\n newTask[\"user_story\"] = $scope.us.id;\n $scope.newTask = $tgmodel.make_model(\"tasks\", newTask);\n return $el.html(\"\");\n });\n $scope.$on(\"related-tasks:show-form\", function() {\n return render();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskCreateForm\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgLoading\", \"$tgAnalytics\", RelatedTaskCreateFormDirective]);\n\n RelatedTaskCreateButtonDirective = function($repo, $compile, $confirm, $tgmodel) {\n var link, template;\n template = _.template(\"\");\n link = function($scope, $el, $attrs) {\n $scope.$watch(\"project\", function(val) {\n if (!val) {\n return;\n }\n $el.off();\n if ($scope.project.my_permissions.indexOf(\"add_task\") !== -1) {\n $el.html(template());\n } else {\n $el.html(\"\");\n }\n return $el.on(\"click\", \".icon\", function(event) {\n return $scope.$emit(\"related-tasks:add-new-clicked\");\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskCreateButton\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", RelatedTaskCreateButtonDirective]);\n\n RelatedTasksDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var loadTasks;\n loadTasks = function() {\n return $rs.tasks.list($scope.projectId, null, $scope.usId).then((function(_this) {\n return function(tasks) {\n $scope.tasks = tasks;\n return tasks;\n };\n })(this));\n };\n $scope.$on(\"related-tasks:add\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:delete\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:add-new-clicked\", function() {\n return $scope.$broadcast(\"related-tasks:show-form\");\n });\n taiga.bindOnce($scope, \"us\", function(val) {\n return loadTasks();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", RelatedTasksDirective]);\n\n RelatedTaskAssignedToInlineEditionDirective = function($repo, $rootscope, popoverService) {\n var link, template;\n template = _.template(\"\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task, updateRelatedTask;\n updateRelatedTask = function(task) {\n var ctx, member;\n ctx = {\n name: \"Unassigned\",\n imgurl: \"/images/unnamed.png\"\n };\n member = $scope.usersById[task.assigned_to];\n if (member) {\n ctx.imgurl = member.photo;\n ctx.name = member.full_name_display;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".task-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n updateRelatedTask(task);\n $el.on(\"click\", \".task-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", task);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", debounce(2000, (function(_this) {\n return function(ctx, userId, updatedRelatedTask) {\n if (updatedRelatedTask.id === task.id) {\n updatedRelatedTask.assigned_to = userId;\n if (autoSave) {\n $repo.save(updatedRelatedTask).then(function() {\n return $scope.$emit(\"related-tasks:assigned-to-changed\");\n });\n }\n return updateRelatedTask(updatedRelatedTask);\n }\n };\n })(this)));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", RelatedTaskAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources.coffee\n */\n\n(function() {\n var ResourcesService, initResources, initUrls, module, taiga, urls,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n ResourcesService = (function(_super) {\n __extends(ResourcesService, _super);\n\n function ResourcesService() {\n return ResourcesService.__super__.constructor.apply(this, arguments);\n }\n\n return ResourcesService;\n\n })(taiga.Service);\n\n urls = {\n \"auth\": \"/auth\",\n \"auth-register\": \"/auth/register\",\n \"invitations\": \"/invitations\",\n \"permissions\": \"/permissions\",\n \"roles\": \"/roles\",\n \"projects\": \"/projects\",\n \"memberships\": \"/memberships\",\n \"notify-policies\": \"/notify-policies\",\n \"bulk-create-memberships\": \"/memberships/bulk_create\",\n \"milestones\": \"/milestones\",\n \"userstories\": \"/userstories\",\n \"bulk-create-us\": \"/userstories/bulk_create\",\n \"bulk-update-us-backlog-order\": \"/userstories/bulk_update_backlog_order\",\n \"bulk-update-us-sprint-order\": \"/userstories/bulk_update_sprint_order\",\n \"bulk-update-us-kanban-order\": \"/userstories/bulk_update_kanban_order\",\n \"userstories-restore\": \"/userstories/%s/restore\",\n \"tasks\": \"/tasks\",\n \"bulk-create-tasks\": \"/tasks/bulk_create\",\n \"bulk-update-task-taskboard-order\": \"/tasks/bulk_update_taskboard_order\",\n \"tasks-restore\": \"/tasks/%s/restore\",\n \"issues\": \"/issues\",\n \"bulk-create-issues\": \"/issues/bulk_create\",\n \"issues-restore\": \"/issues/%s/restore\",\n \"wiki\": \"/wiki\",\n \"wiki-restore\": \"/wiki/%s/restore\",\n \"wiki-links\": \"/wiki-links\",\n \"choices/userstory-statuses\": \"/userstory-statuses\",\n \"choices/userstory-statuses/bulk-update-order\": \"/userstory-statuses/bulk_update_order\",\n \"choices/points\": \"/points\",\n \"choices/points/bulk-update-order\": \"/points/bulk_update_order\",\n \"choices/task-statuses\": \"/task-statuses\",\n \"choices/task-statuses/bulk-update-order\": \"/task-statuses/bulk_update_order\",\n \"choices/issue-statuses\": \"/issue-statuses\",\n \"choices/issue-statuses/bulk-update-order\": \"/issue-statuses/bulk_update_order\",\n \"choices/issue-types\": \"/issue-types\",\n \"choices/issue-types/bulk-update-order\": \"/issue-types/bulk_update_order\",\n \"choices/priorities\": \"/priorities\",\n \"choices/priorities/bulk-update-order\": \"/priorities/bulk_update_order\",\n \"choices/severities\": \"/severities\",\n \"choices/severities/bulk-update-order\": \"/severities/bulk_update_order\",\n \"search\": \"/search\",\n \"sites\": \"/sites\",\n \"project-templates\": \"/project-templates\",\n \"site-members\": \"/site-members\",\n \"site-projects\": \"/site-projects\",\n \"users\": \"/users\",\n \"users-password-recovery\": \"/users/password_recovery\",\n \"users-change-password-from-recovery\": \"/users/change_password_from_recovery\",\n \"users-change-password\": \"/users/change_password\",\n \"users-change-email\": \"/users/change_email\",\n \"users-cancel-account\": \"/users/cancel\",\n \"user-storage\": \"/user-storage\",\n \"resolver\": \"/resolver\",\n \"userstory-statuses\": \"/userstory-statuses\",\n \"points\": \"/points\",\n \"task-statuses\": \"/task-statuses\",\n \"issue-statuses\": \"/issue-statuses\",\n \"issue-types\": \"/issue-types\",\n \"priorities\": \"/priorities\",\n \"severities\": \"/severities\",\n \"project-modules\": \"/projects/%s/modules\",\n \"history/us\": \"/history/userstory\",\n \"history/issue\": \"/history/issue\",\n \"history/task\": \"/history/task\",\n \"history/wiki\": \"/history/wiki\",\n \"attachments/us\": \"/userstories/attachments\",\n \"attachments/issue\": \"/issues/attachments\",\n \"attachments/task\": \"/tasks/attachments\",\n \"attachments/wiki_page\": \"/wiki/attachments\",\n \"feedback\": \"/feedback\"\n };\n\n initUrls = function($log, $urls) {\n $log.debug(\"Initialize api urls\");\n return $urls.update(urls);\n };\n\n initResources = function($log, $rs) {\n var provider, providers, _i, _len, _results;\n $log.debug(\"Initialize resources\");\n providers = _.toArray(arguments).slice(2);\n _results = [];\n for (_i = 0, _len = providers.length; _i < _len; _i++) {\n provider = providers[_i];\n _results.push(provider($rs));\n }\n return _results;\n };\n\n module = angular.module(\"taigaResources\", [\"taigaBase\"]);\n\n module.service(\"$tgResources\", ResourcesService);\n\n module.run([\"$log\", \"$tgUrls\", initUrls]);\n\n module.run([\"$log\", \"$tgResources\", \"$tgProjectsResourcesProvider\", \"$tgMembershipsResourcesProvider\", \"$tgNotifyPoliciesResourcesProvider\", \"$tgInvitationsResourcesProvider\", \"$tgRolesResourcesProvider\", \"$tgUserSettingsResourcesProvider\", \"$tgSprintsResourcesProvider\", \"$tgUserstoriesResourcesProvider\", \"$tgTasksResourcesProvider\", \"$tgIssuesResourcesProvider\", \"$tgWikiResourcesProvider\", \"$tgSearchResourcesProvider\", \"$tgAttachmentsResourcesProvider\", \"$tgMdRenderResourcesProvider\", \"$tgHistoryResourcesProvider\", \"$tgKanbanResourcesProvider\", \"$tgModulesResourcesProvider\", initResources]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/search.coffee\n */\n\n(function() {\n var SearchBoxDirective, SearchController, SearchDirective, bindOnce, debounce, debounceLeading, groupBy, mixOf, module, taiga, trim,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounceLeading = this.taiga.debounceLeading;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaSearch\", []);\n\n SearchController = (function(_super) {\n __extends(SearchController, _super);\n\n SearchController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$appTitle\", \"$tgNavUrls\", \"tgLoader\"];\n\n function SearchController(scope, repo, rs, params, q, location, appTitle, navUrls, tgLoader) {\n var loadSearchData, promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.tgLoader = tgLoader;\n this.scope.sectionName = \"Search\";\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Search\");\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.searchTerm = \"\";\n loadSearchData = debounceLeading(100, (function(_this) {\n return function(t) {\n return _this.loadSearchData(t);\n };\n })(this));\n this.scope.$watch(\"searchTerm\", (function(_this) {\n return function(term) {\n if (!term) {\n return _this.tgLoader.pageLoaded();\n } else {\n return loadSearchData(term);\n }\n };\n })(this));\n }\n\n SearchController.prototype.loadFilters = function() {\n var defered;\n defered = this.q.defer();\n defered.resolve();\n return defered.promise;\n };\n\n SearchController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n _this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n _this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n _this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n _this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n })(this));\n };\n\n SearchController.prototype.loadSearchData = function(term) {\n var promise;\n promise = this.rs.search[\"do\"](this.scope.projectId, term).then((function(_this) {\n return function(data) {\n _this.scope.searchResults = data;\n return data;\n };\n })(this));\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.tgLoader.pageLoaded();\n };\n })(this));\n return promise;\n };\n\n SearchController.prototype.loadInitialData = function() {\n return this.loadProject().then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n return _this.fillUsersAndRoles(project.users, project.roles);\n };\n })(this));\n };\n\n return SearchController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"SearchController\", SearchController);\n\n SearchBoxDirective = function($lightboxService, $navurls, $location, $route) {\n var link;\n link = function($scope, $el, $attrs) {\n var project, submit;\n project = null;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, text, url;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n text = $el.find(\"#search-text\").val();\n url = $navurls.resolve(\"project-search\", {\n project: project.slug\n });\n $lightboxService.close($el);\n return $scope.$apply(function() {\n $location.path(url);\n $location.search(\"text\", text).path(url);\n return $route.reload();\n });\n };\n })(this));\n $scope.$on(\"search-box:show\", function(ctx, newProject) {\n project = newProject;\n $lightboxService.open($el);\n return $el.find(\"#search-text\").val(\"\");\n });\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSearchBox\", [\"lightboxService\", \"$tgNavUrls\", \"$tgLocation\", \"$route\", SearchBoxDirective]);\n\n SearchDirective = function($log, $compile, $templatecache, $routeparams, $location) {\n var link, linkTable;\n linkTable = function($scope, $el, $attrs, $ctrl) {\n var getActiveSection, lastSeatchResults, markSectionTabActive, renderFilterTabs, renderTableContent, tabsDom, templates;\n tabsDom = $el.find(\"section.search-filter\");\n lastSeatchResults = null;\n getActiveSection = function(data) {\n var maxVal, name, selectedSectionData, selectedSectionName, value;\n maxVal = 0;\n selectedSectionName = null;\n selectedSectionData = null;\n for (name in data) {\n value = data[name];\n if (name === \"count\") {\n continue;\n }\n if (value.length > maxVal) {\n maxVal = value.length;\n selectedSectionName = name;\n selectedSectionData = value;\n }\n }\n if (maxVal === 0) {\n return {\n name: \"userstories\",\n value: []\n };\n }\n return {\n name: selectedSectionName,\n value: selectedSectionData\n };\n };\n renderFilterTabs = function(data) {\n var name, value, _results;\n _results = [];\n for (name in data) {\n value = data[name];\n if (name === \"count\") {\n continue;\n }\n _results.push(tabsDom.find(\"li.\" + name + \" .num\").html(value.length));\n }\n return _results;\n };\n markSectionTabActive = function(section) {\n tabsDom.find(\"a.active\").removeClass(\"active\");\n return tabsDom.find(\"li.\" + section.name + \" a\").addClass(\"active\");\n };\n templates = {\n issues: $templatecache.get(\"search-issues\"),\n tasks: $templatecache.get(\"search-tasks\"),\n userstories: $templatecache.get(\"search-userstories\"),\n wikipages: $templatecache.get(\"search-wikipages\")\n };\n renderTableContent = function(section) {\n var element, oldElements, oldScope, scope, template;\n oldElements = $el.find(\".search-result-table\").children();\n oldScope = oldElements.scope();\n if (oldScope) {\n oldScope.$destroy();\n oldElements.remove();\n }\n scope = $scope.$new();\n scope[section.name] = section.value;\n template = angular.element.parseHTML(trim(templates[section.name]));\n element = $compile(template)(scope);\n return $el.find(\".search-result-table\").html(element);\n };\n $scope.$watch(\"searchResults\", function(data) {\n var activeSection;\n lastSeatchResults = data;\n activeSection = getActiveSection(data);\n renderFilterTabs(data);\n renderTableContent(activeSection);\n return markSectionTabActive(activeSection);\n });\n $scope.$watch(\"searchTerm\", function(searchTerm) {\n if (searchTerm) {\n return $location.search(\"text\", searchTerm);\n }\n });\n return $el.on(\"click\", \".search-filter li > a\", function(event) {\n var section, sectionData, sectionName, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n sectionName = target.parent().data(\"name\");\n sectionData = lastSeatchResults[sectionName];\n section = {\n name: sectionName,\n value: sectionData\n };\n return $scope.$apply(function() {\n renderTableContent(section);\n return markSectionTabActive(section);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, searchText;\n $ctrl = $el.controller();\n linkTable($scope, $el, $attrs, $ctrl);\n searchText = $routeparams.text;\n return $scope.$watch(\"projectId\", function(projectId) {\n if (projectId != null) {\n return $scope.searchTerm = searchText;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSearch\", [\"$log\", \"$compile\", \"$templateCache\", \"$routeParams\", \"$tgLocation\", SearchDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTaskboard\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTasks\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTeam\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserSettings\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserStories\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaWiki\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/analytics.coffee\n */\n\n(function() {\n var AnalyticsService, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n AnalyticsService = (function(_super) {\n __extends(AnalyticsService, _super);\n\n AnalyticsService.$inject = [\"$rootScope\", \"$log\", \"$tgConfig\", \"$window\", \"$document\", \"$location\"];\n\n function AnalyticsService(rootscope, log, config, win, doc, location) {\n var conf;\n this.rootscope = rootscope;\n this.log = log;\n this.config = config;\n this.win = win;\n this.doc = doc;\n this.location = location;\n this.initialized = false;\n conf = this.config.get(\"analytics\", {});\n this.accountId = conf.accountId;\n this.pageEvent = conf.pageEvent || \"$routeChangeSuccess\";\n this.trackRoutes = conf.trackRoutes || true;\n this.ignoreFirstPageLoad = conf.ignoreFirstPageLoad || false;\n }\n\n AnalyticsService.prototype.initialize = function() {\n if (!this.accountId) {\n this.log.debug(\"Analytics: no acount id provided. Disabling.\");\n return;\n }\n this.injectAnalytics();\n this.win.ga(\"create\", this.accountId, \"auto\");\n this.win.ga(\"require\", \"displayfeatures\");\n if (this.trackRoutes && (!this.ignoreFirstPageLoad)) {\n this.win.ga(\"send\", \"pageview\", this.getUrl());\n }\n if (this.trackRoutes) {\n this.rootscope.$on(this.pageEvent, (function(_this) {\n return function() {\n return _this.trackPage(_this.getUrl(), \"Taiga\");\n };\n })(this));\n }\n return this.initialized = true;\n };\n\n AnalyticsService.prototype.getUrl = function() {\n return this.location.path();\n };\n\n AnalyticsService.prototype.injectAnalytics = function() {\n var fn;\n fn = (function(i,s,o,g,r,a,m){i[\"GoogleAnalyticsObject\"]=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);});\n return fn(window, document, \"script\", \"//www.google-analytics.com/analytics.js\", \"ga\");\n };\n\n AnalyticsService.prototype.trackPage = function(url, title) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n title = title || this.doc[0].title;\n return this.win.ga(\"send\", \"pageview\", {\n \"page\": url,\n \"title\": title\n });\n };\n\n AnalyticsService.prototype.trackEvent = function(category, action, label, value) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n return this.win.ga(\"send\", \"event\", category, action, label, value);\n };\n\n return AnalyticsService;\n\n })(taiga.Service);\n\n module.service(\"$tgAnalytics\", AnalyticsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/attachments.coffee\n */\n\n(function() {\n var AttachmentDirective, AttachmentsController, AttachmentsDirective, bindMethods, bindOnce, module, sizeFormat, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaCommon\");\n\n AttachmentsController = (function(_super) {\n __extends(AttachmentsController, _super);\n\n AttachmentsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\"];\n\n function AttachmentsController(scope, rootscope, repo, rs, confirm, q) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.confirm = confirm;\n this.q = q;\n bindMethods(this);\n this.type = null;\n this.objectId = null;\n this.projectId = null;\n this.uploadingAttachments = [];\n this.attachments = [];\n this.attachmentsCount = 0;\n this.deprecatedAttachmentsCount = 0;\n this.showDeprecated = false;\n }\n\n AttachmentsController.prototype.initialize = function(type, objectId) {\n this.type = type;\n this.objectId = objectId;\n return this.projectId = this.scope.projectId;\n };\n\n AttachmentsController.prototype.loadAttachments = function() {\n var urlname;\n if (!this.objectId) {\n return this.attachments;\n }\n urlname = \"attachments/\" + this.type;\n return this.rs.attachments.list(urlname, this.objectId, this.projectId).then((function(_this) {\n return function(attachments) {\n _this.attachments = _.sortBy(attachments, \"order\");\n _this.updateCounters();\n return attachments;\n };\n })(this));\n };\n\n AttachmentsController.prototype.updateCounters = function() {\n this.attachmentsCount = this.attachments.length;\n return this.deprecatedAttachmentsCount = _.filter(this.attachments, {\n is_deprecated: true\n }).length;\n };\n\n AttachmentsController.prototype._createAttachment = function(attachment) {\n var promise, urlName;\n urlName = \"attachments/\" + this.type;\n promise = this.rs.attachments.create(urlName, this.projectId, this.objectId, attachment);\n promise = promise.then((function(_this) {\n return function(data) {\n var index;\n data.isCreatedRightNow = true;\n index = _this.uploadingAttachments.indexOf(attachment);\n _this.uploadingAttachments.splice(index, 1);\n _this.attachments.push(data);\n return _this.rootscope.$broadcast(\"attachment:create\");\n };\n })(this));\n promise = promise.then(null, (function(_this) {\n return function(data) {\n var index;\n if (data.status === 413) {\n _this.scope.$emit(\"attachments:size-error\");\n }\n index = _this.uploadingAttachments.indexOf(attachment);\n _this.uploadingAttachments.splice(index, 1);\n _this.confirm.notify(\"error\", \"We have not been able to upload '\" + attachment.name + \"'. \" + data.data._error_message);\n return _this.q.reject(data);\n };\n })(this));\n return promise;\n };\n\n AttachmentsController.prototype.createAttachments = function(attachments) {\n var promises;\n promises = _.map(attachments, (function(_this) {\n return function(x) {\n return _this._createAttachment(x);\n };\n })(this));\n return this.q.all(promises).then((function(_this) {\n return function() {\n return _this.updateCounters();\n };\n })(this));\n };\n\n AttachmentsController.prototype.addUploadingAttachments = function(attachments) {\n return this.uploadingAttachments = _.union(this.uploadingAttachments, attachments);\n };\n\n AttachmentsController.prototype.reorderAttachment = function(attachment, newIndex) {\n var oldIndex;\n oldIndex = this.attachments.indexOf(attachment);\n if (oldIndex === newIndex) {\n return;\n }\n this.attachments.splice(oldIndex, 1);\n this.attachments.splice(newIndex, 0, attachment);\n return _.each(this.attachments, function(x, i) {\n return x.order = i + 1;\n });\n };\n\n AttachmentsController.prototype.updateAttachment = function(attachment) {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.updateCounters();\n return _this.rootscope.$broadcast(\"attachment:edit\");\n };\n })(this);\n onError = (function(_this) {\n return function(response) {\n if (response.status === 413) {\n $scope.$emit(\"attachments:size-error\");\n }\n _this.confirm.notify(\"error\");\n return _this.q.reject();\n };\n })(this);\n return this.repo.save(attachment).then(onSuccess, onError);\n };\n\n AttachmentsController.prototype.saveAttachments = function() {\n return this.repo.saveAll(this.attachments).then(null, (function(_this) {\n return function() {\n var item, _i, _len, _ref;\n _ref = _this.attachments;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n item = _ref[_i];\n item.revert();\n }\n return _this.attachments = _.sorBy(_this.attachments, \"order\");\n };\n })(this));\n };\n\n AttachmentsController.prototype.removeAttachment = function(attachment) {\n var message, title;\n title = \"Delete attachment\";\n message = \"the attachment '\" + attachment.name + \"'\";\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var onError, onSuccess;\n onSuccess = function() {\n var index;\n finish();\n index = _this.attachments.indexOf(attachment);\n _this.attachments.splice(index, 1);\n _this.updateCounters();\n return _this.rootscope.$broadcast(\"attachment:delete\");\n };\n onError = function() {\n finish(false);\n _this.confirm.notify(\"error\", null, \"We have not been able to delete \" + message + \".\");\n return _this.q.reject();\n };\n return _this.repo.remove(attachment).then(onSuccess, onError);\n };\n })(this));\n };\n\n AttachmentsController.prototype.filterAttachments = function(item) {\n if (this.showDeprecated) {\n return true;\n }\n return !item.is_deprecated;\n };\n\n return AttachmentsController;\n\n })(taiga.Controller);\n\n AttachmentsDirective = function($config, $confirm) {\n var link, template, templateFn;\n template = _.template(\"
    \\n
    \\n

    \\n \\n attachments\\n

    \\n
    \\\" class=\\\"add-attach\\\"\\n title=\\\"Add new attachment. <%- maxFileSizeMsg %>\\\">\\n <% if (maxFileSize){ %>\\n [Max. size: <%- maxFileSize %>]\\n <% }; %>\\n \\n \\n
    \\n
    \\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $ctrls) {\n var $ctrl, $model, showSizeInfo, tdom;\n $ctrl = $ctrls[0];\n $model = $ctrls[1];\n bindOnce($scope, $attrs.ngModel, function(value) {\n $ctrl.initialize($attrs.type, value.id);\n return $ctrl.loadAttachments();\n });\n tdom = $el.find(\"div.attachment-body.sortable\");\n tdom.sortable({\n items: \"div.single-attachment\",\n handle: \"a.settings.icon.icon-drag-v\",\n containment: \".attachments\",\n dropOnEmpty: true,\n scroll: false,\n tolerance: \"pointer\",\n placeholder: \"sortable-placeholder single-attachment\"\n });\n tdom.on(\"sortstop\", function(event, ui) {\n var attachment, newIndex;\n attachment = ui.item.scope().attach;\n newIndex = ui.item.index();\n $ctrl.reorderAttachment(attachment, newIndex);\n return $ctrl.saveAttachments();\n });\n showSizeInfo = function() {\n return $el.find(\".size-info\").removeClass(\"hidden\");\n };\n $scope.$on(\"attachments:size-error\", function() {\n return showSizeInfo();\n });\n $el.on(\"change\", \".attachments-header input\", function(event) {\n var files;\n files = _.toArray(event.target.files);\n if (files.length < 1) {\n return;\n }\n return $scope.$apply(function() {\n $ctrl.addUploadingAttachments(files);\n return $ctrl.createAttachments(files);\n });\n });\n $el.on(\"click\", \".more-attachments\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $scope.$apply(function() {\n return $ctrl.showDeprecated = !$ctrl.showDeprecated;\n });\n target.find(\"span.text\").addClass(\"hidden\");\n if ($ctrl.showDeprecated) {\n target.find(\"span[data-type=hide]\").removeClass(\"hidden\");\n return target.find(\"more-attachments-num\").addClass(\"hidden\");\n } else {\n target.find(\"span[data-type=show]\").removeClass(\"hidden\");\n return target.find(\"more-attachments-num\").removeClass(\"hidden\");\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n templateFn = function($el, $attrs) {\n var ctx, maxFileSize, maxFileSizeMsg;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize) {\n maxFileSize = sizeFormat(maxFileSize);\n }\n maxFileSizeMsg = maxFileSize ? \"Maximum upload size is \" + maxFileSize : \"\";\n ctx = {\n type: $attrs.type,\n maxFileSize: maxFileSize,\n maxFileSizeMsg: maxFileSizeMsg\n };\n return template(ctx);\n };\n return {\n require: [\"tgAttachments\", \"ngModel\"],\n controller: AttachmentsController,\n controllerAs: \"ctrl\",\n restrict: \"AE\",\n scope: true,\n link: link,\n template: templateFn\n };\n };\n\n module.directive(\"tgAttachments\", [\"$tgConfig\", \"$tgConfirm\", AttachmentsDirective]);\n\n AttachmentDirective = function() {\n var link, template, templateEdit;\n template = _.template(\"\\n
    \\n <%- size %>\\n
    \\n
    \\n <% if (isDeprecated){ %> (deprecated) <% } %>\\n <%- description %>\\n
    \\n<% if (modifyPermission) {%>\\n
    \\n \\n \\n \\n
    \\n<% } %>\");\n templateEdit = _.template(\"\\n
    \\n <%- size %>\\n
    \\n
    \\n \\\"\\\"\\n placeholder=\\\"Type a short description\\\" />\\n
    \\n
    \\n -is-deprecated\\\"\\n <% if (isDeprecated){ %>checked<% } %> />\\n \\n
    \\n
    \\n \\n \\n
    \");\n link = function($scope, $el, $attrs, $ctrl) {\n var attachment, render, saveAttachment;\n render = function(attachment, edit) {\n var ctx, html, modifyPermission, permissions;\n if (edit == null) {\n edit = false;\n }\n permissions = $scope.project.my_permissions;\n modifyPermission = permissions.indexOf(\"modify_\" + $ctrl.type) > -1;\n ctx = {\n id: attachment.id,\n name: attachment.name,\n created_date: moment(attachment.created_date).format(\"DD MMM YYYY [at] hh:mm\"),\n url: attachment.url,\n size: sizeFormat(attachment.size),\n description: attachment.description,\n isDeprecated: attachment.is_deprecated,\n modifyPermission: modifyPermission\n };\n if (edit) {\n html = templateEdit(ctx);\n } else {\n html = template(ctx);\n }\n $el.html(html);\n if (attachment.is_deprecated) {\n return $el.addClass(\"deprecated\");\n }\n };\n saveAttachment = function() {\n attachment.description = $el.find(\"input[name='description']\").val();\n attachment.is_deprecated = $el.find(\"input[name='is-deprecated']\").prop(\"checked\");\n return $scope.$apply(function() {\n return $ctrl.updateAttachment(attachment).then(function() {\n return render(attachment, false);\n });\n });\n };\n $el.on(\"click\", \"a.editable-settings.icon-floppy\", function(event) {\n event.preventDefault();\n return saveAttachment();\n });\n $el.on(\"keyup\", \"input[name=description]\", function(event) {\n if (event.keyCode === 13) {\n return saveAttachment();\n } else if (event.keyCode === 27) {\n return render(attachment, false);\n }\n });\n $el.on(\"click\", \"a.editable-settings.icon-delete\", function(event) {\n event.preventDefault();\n return render(attachment, false);\n });\n $el.on(\"click\", \"a.settings.icon-edit\", function(event) {\n event.preventDefault();\n render(attachment, true);\n return $el.find(\"input[name='description']\").focus().select();\n });\n $el.on(\"click\", \"a.settings.icon-delete\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n return $ctrl.removeAttachment(attachment);\n });\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n attachment = $scope.$eval($attrs.tgAttachment);\n render(attachment, attachment.isCreatedRightNow);\n if (attachment.isCreatedRightNow) {\n return $el.find(\"input[name='description']\").focus().select();\n }\n };\n return {\n link: link,\n require: \"^tgAttachments\",\n restrict: \"AE\"\n };\n };\n\n module.directive(\"tgAttachment\", AttachmentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/components.coffee\n */\n\n(function() {\n var AssignedToDirective, BlockButtonDirective, CreatedByDisplayDirective, DateRangeDirective, DateSelectorDirective, DeleteButtonDirective, EditableDescriptionDirective, EditableSubjectDirective, ListItemAssignedtoDirective, ListItemIssueStatusDirective, ListItemPriorityDirective, ListItemSeverityDirective, ListItemTaskStatusDirective, ListItemTypeDirective, ListItemUsStatusDirective, SprintProgressBarDirective, TgMainTitleDirective, TgProgressBarDirective, WatchersDirective, bindOnce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n DateRangeDirective = function() {\n var link, renderRange;\n renderRange = function($el, first, second) {\n var endDate, initDate;\n initDate = moment(first).format(\"DD MMM YYYY\");\n endDate = moment(second).format(\"DD MMM YYYY\");\n return $el.html(\"\" + initDate + \"-\" + endDate);\n };\n link = function($scope, $el, $attrs) {\n var first, second, _ref;\n _ref = $attrs.tgDateRange.split(\",\"), first = _ref[0], second = _ref[1];\n return bindOnce($scope, first, function(valFirst) {\n return bindOnce($scope, second, function(valSecond) {\n return renderRange($el, valFirst, valSecond);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgDateRange\", DateRangeDirective);\n\n DateSelectorDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var selectedDate;\n selectedDate = null;\n $el.picker = new Pikaday({\n field: $el[0],\n format: \"DD MMM YYYY\",\n onSelect: (function(_this) {\n return function(date) {\n return selectedDate = date;\n };\n })(this),\n onOpen: (function(_this) {\n return function() {\n if (selectedDate != null) {\n return $el.picker.setDate(selectedDate);\n }\n };\n })(this)\n });\n return $scope.$watch($attrs.ngModel, function(val) {\n if (val != null) {\n return $el.picker.setDate(val);\n }\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgDateSelector\", DateSelectorDirective);\n\n SprintProgressBarDirective = function() {\n var link, renderProgress;\n renderProgress = function($el, percentage, visual_percentage) {\n if ($el.hasClass(\".current-progress\")) {\n return $el.css(\"width\", \"\" + percentage + \"%\");\n } else {\n $el.find(\".current-progress\").css(\"width\", \"\" + visual_percentage + \"%\");\n return $el.find(\".number\").html(\"\" + percentage + \" %\");\n }\n };\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgSprintProgressbar, function(sprint) {\n var closedPoints, percentage, totalPoints, visual_percentage;\n closedPoints = sprint.closed_points;\n totalPoints = sprint.total_points;\n percentage = 0;\n if (totalPoints !== 0) {\n percentage = Math.round(100 * (closedPoints / totalPoints));\n }\n visual_percentage = 0;\n if (totalPoints !== 0) {\n visual_percentage = Math.round(98 * (closedPoints / totalPoints));\n }\n return renderProgress($el, percentage, visual_percentage);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintProgressbar\", SprintProgressBarDirective);\n\n CreatedByDisplayDirective = function() {\n var link, template;\n template = _.template(\"
    \\n \\\" alt=\\\"<%- owner.full_name_display %>\\\" />\\n
    \\n\\n
    \\n Created by <%- owner.full_name_display %>\\n <%- date %>\\n
    \");\n link = function($scope, $el, $attrs) {\n var render;\n render = function(model) {\n var html, owner, _ref;\n owner = ((_ref = $scope.usersById) != null ? _ref[model.owner] : void 0) || {\n full_name_display: \"external user\",\n photo: \"/images/unnamed.png\"\n };\n html = template({\n owner: owner,\n date: moment(model.created_date).format(\"DD MMM YYYY HH:mm\")\n });\n return $el.html(html);\n };\n bindOnce($scope, $attrs.ngModel, function(model) {\n if (model != null) {\n return render(model);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgCreatedByDisplay\", CreatedByDisplayDirective);\n\n WatchersDirective = function($rootscope, $confirm, $repo, $qqueue) {\n var link, template;\n template = _.template(\"<% if(isEditable){ %>\\n
    \\n watchers\\n \\n
    \\n<% } else if(watchers.length > 0){ %>\\n
    \\n watchers\\n
    \\n<% }; %>\\n\\n<% _.each(watchers, function(watcher) { %>\\n<% if(watcher) { %>\\n
    \\n
    \\n \\\">\\n \\\" alt=\\\"<%- watcher.full_name_display %>\\\">\\n \\n
    \\n
    \\n <%- watcher.full_name_display %>\\n\\n <% if(isEditable){ %>\\n \\\" href=\\\"\\\" title=\\\"delete-watcher\\\">\\n \\n <% }; %>\\n
    \\n
    \\n<% } %>\\n<% }); %>\");\n link = function($scope, $el, $attrs, $model) {\n var deleteWatcher, isEditable, renderWatchers, save;\n isEditable = function() {\n var _ref, _ref1;\n return ((_ref = $scope.project) != null ? (_ref1 = _ref.my_permissions) != null ? _ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(watchers) {\n var item, promise;\n item = $model.$modelValue.clone();\n item.watchers = watchers;\n $model.$setViewValue(item);\n promise = $repo.save($model.$modelValue);\n promise.then(function() {\n $confirm.notify(\"success\");\n watchers = _.map(watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"history:reload\");\n });\n return promise.then(null, function() {\n return $model.$modelValue.revert();\n });\n };\n })(this));\n deleteWatcher = $qqueue.bindAdd((function(_this) {\n return function(watcherIds) {\n var item, promise;\n item = $model.$modelValue.clone();\n item.watchers = watcherIds;\n $model.$setViewValue(item);\n promise = $repo.save($model.$modelValue);\n promise.then(function() {\n var watchers;\n $confirm.notify(\"success\");\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"history:reload\");\n });\n return promise.then(null, function() {\n item.revert();\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n renderWatchers = function(watchers) {\n var ctx, html;\n ctx = {\n watchers: watchers,\n isEditable: isEditable()\n };\n html = template(ctx);\n $el.html(html);\n if (isEditable() && watchers.length === 0) {\n $el.find(\".title\").text(\"Add watchers\");\n return $el.find(\".watchers-header\").addClass(\"no-watchers\");\n }\n };\n $el.on(\"click\", \".icon-delete\", function(event) {\n var message, target, title, watcherId;\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n watcherId = target.data(\"watcher-id\");\n title = \"Delete watcher\";\n message = $scope.usersById[watcherId].full_name_display;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var watcherIds;\n finish();\n watcherIds = _.clone($model.$modelValue.watchers, false);\n watcherIds = _.pull(watcherIds, watcherId);\n return deleteWatcher(watcherIds);\n };\n })(this));\n });\n $el.on(\"click\", \".add-watcher\", function(event) {\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"watcher:add\", $model.$modelValue);\n });\n });\n $scope.$on(\"watcher:added\", function(ctx, watcherId) {\n var watchers;\n watchers = _.clone($model.$modelValue.watchers, false);\n watchers.push(watcherId);\n watchers = _.uniq(watchers);\n return save(watchers);\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var watchers;\n if (item == null) {\n return;\n }\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n return renderWatchers(watchers);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWatchers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQqueue\", WatchersDirective]);\n\n AssignedToDirective = function($rootscope, $confirm, $repo, $loading, $qqueue) {\n var link, template;\n template = _.template(\"<% if (assignedTo) { %>\\n
    \\n \\\" alt=\\\"<%- assignedTo.full_name_display %>\\\" />\\n
    \\n<% } %>\\n\\n\");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, renderAssignedTo, save;\n isEditable = function() {\n var _ref, _ref1;\n return ((_ref = $scope.project) != null ? (_ref1 = _ref.my_permissions) != null ? _ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(userId) {\n var promise;\n $model.$modelValue.assigned_to = userId;\n $loading.start($el);\n promise = $repo.save($model.$modelValue);\n promise.then(function() {\n $loading.finish($el);\n $confirm.notify(\"success\");\n renderAssignedTo($model.$modelValue);\n return $rootscope.$broadcast(\"history:reload\");\n });\n promise.then(null, function() {\n $model.$modelValue.revert();\n $confirm.notify(\"error\");\n return $loading.finish($el);\n });\n return promise;\n };\n })(this));\n renderAssignedTo = function(issue) {\n var assignedTo, assignedToId, ctx, html;\n assignedToId = issue != null ? issue.assigned_to : void 0;\n assignedTo = assignedToId != null ? $scope.usersById[assignedToId] : null;\n ctx = {\n assignedTo: assignedTo,\n isEditable: isEditable()\n };\n html = template(ctx);\n return $el.html(html);\n };\n $el.on(\"click\", \".user-assigned\", function(event) {\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"assigned-to:add\", $model.$modelValue);\n });\n });\n $el.on(\"click\", \".icon-delete\", function(event) {\n var title;\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n title = \"Are you sure you want to leave it unassigned?\";\n return $confirm.ask(title).then((function(_this) {\n return function(finish) {\n finish();\n $model.$modelValue.assigned_to = null;\n return save(null);\n };\n })(this));\n });\n $scope.$on(\"assigned-to:added\", function(ctx, userId, item) {\n if (item.id !== $model.$modelValue.id) {\n return;\n }\n return save(userId);\n });\n $scope.$watch($attrs.ngModel, function(instance) {\n return renderAssignedTo(instance);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgAssignedTo\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQqueue\", AssignedToDirective]);\n\n BlockButtonDirective = function($rootscope, $loading) {\n var link, template;\n template = \"Block\\nUnblock\";\n link = function($scope, $el, $attrs, $model) {\n var isEditable;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n $scope.$watch($attrs.ngModel, function(item) {\n if (!item) {\n return;\n }\n if (isEditable()) {\n $el.find('.item-block').addClass('editable');\n }\n if (item.is_blocked) {\n $el.find('.item-block').hide();\n return $el.find('.item-unblock').show();\n } else {\n $el.find('.item-block').show();\n return $el.find('.item-unblock').hide();\n }\n });\n $el.on(\"click\", \".item-block\", function(event) {\n event.preventDefault();\n return $rootscope.$broadcast(\"block\", $model.$modelValue);\n });\n $el.on(\"click\", \".item-unblock\", function(event) {\n var finish;\n event.preventDefault();\n $loading.start($el.find(\".item-unblock\"));\n finish = function() {\n return $loading.finish($el.find(\".item-unblock\"));\n };\n return $rootscope.$broadcast(\"unblock\", $model.$modelValue, finish);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgBlockButton\", [\"$rootScope\", \"$tgLoading\", BlockButtonDirective]);\n\n DeleteButtonDirective = function($log, $repo, $confirm, $location) {\n var link, template;\n template = \"Delete\";\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.onDeleteGoToUrl) {\n return $log.error(\"DeleteButtonDirective requires on-delete-go-to-url set in scope.\");\n }\n if (!$attrs.onDeleteTitle) {\n return $log.error(\"DeleteButtonDirective requires on-delete-title set in scope.\");\n }\n $el.on(\"click\", \".button\", function(event) {\n var subtitle, title;\n title = $scope.$eval($attrs.onDeleteTitle);\n subtitle = $model.$modelValue.subject;\n return $confirm.askOnDelete(title, subtitle).then((function(_this) {\n return function(finish) {\n var promise;\n promise = $repo.remove($model.$modelValue);\n promise.then(function() {\n var url;\n finish();\n url = $scope.$eval($attrs.onDeleteGoToUrl);\n return $location.path(url);\n });\n return promise.then(null, function() {\n finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgDeleteButton\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", DeleteButtonDirective]);\n\n EditableSubjectDirective = function($rootscope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = \"
    \\n {{ item.subject }}\\n \\n
    \\n\";\n link = function($scope, $el, $attrs, $model) {\n var isEditable, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) !== -1;\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(subject) {\n var promise;\n $model.$modelValue.subject = subject;\n $loading.start($el.find('.save-container'));\n promise = $repo.save($model.$modelValue);\n promise.then(function() {\n $confirm.notify(\"success\");\n $rootscope.$broadcast(\"history:reload\");\n $el.find('.edit-subject').hide();\n return $el.find('.view-subject').show();\n });\n promise.then(null, function() {\n return $confirm.notify(\"error\");\n });\n promise[\"finally\"](function() {\n return $loading.finish($el.find('.save-container'));\n });\n return promise;\n };\n })(this));\n $el.click(function() {\n if (!isEditable()) {\n return;\n }\n $el.find('.edit-subject').show();\n $el.find('.view-subject').hide();\n return $el.find('input').focus();\n });\n $el.on(\"click\", \".save\", function() {\n var subject;\n subject = $scope.item.subject;\n return save(subject);\n });\n $el.on(\"keyup\", \"input\", function(event) {\n var subject;\n if (event.keyCode === 13) {\n subject = $scope.item.subject;\n return save(subject);\n } else if (event.keyCode === 27) {\n $scope.$apply((function(_this) {\n return function() {\n return $model.$modelValue.revert();\n };\n })(this));\n $el.find('div.edit-subject').hide();\n return $el.find('div.view-subject').show();\n }\n });\n $el.find('div.edit-subject').hide();\n $el.find('div.view-subject span.edit').hide();\n $scope.$watch($attrs.ngModel, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n if (!isEditable()) {\n return $el.find('.view-subject .edit').remove();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgEditableSubject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", EditableSubjectDirective]);\n\n EditableDescriptionDirective = function($rootscope, $repo, $confirm, $compile, $loading, $selectedText, $qqueue) {\n var link, noDescriptionMegEditMode, noDescriptionMegReadMode, template;\n template = \"
    \\n
    \\n \\n
    \\n
    \";\n noDescriptionMegEditMode = \"

    \\n Empty space is so boring...\\n go on be descriptive...\\n A rose by any other name would smell as sweet...\\n

    \";\n noDescriptionMegReadMode = \"

    \\n No description yet.\\n

    \";\n link = function($scope, $el, $attrs, $model) {\n var isEditable, save;\n $el.find('.edit-description').hide();\n $el.find('.view-description .edit').hide();\n isEditable = function() {\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) !== -1;\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(description) {\n var promise;\n $model.$modelValue.description = description;\n $loading.start($el.find('.save-container'));\n promise = $repo.save($model.$modelValue);\n promise.then(function() {\n $confirm.notify(\"success\");\n $rootscope.$broadcast(\"history:reload\");\n $el.find('.edit-description').hide();\n return $el.find('.view-description').show();\n });\n promise.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return promise[\"finally\"](function() {\n return $loading.finish($el.find('.save-container'));\n });\n };\n })(this));\n $el.on(\"mouseup\", \".view-description\", function(event) {\n var target;\n target = angular.element(event.target);\n if (!isEditable()) {\n return;\n }\n if (target.is('a')) {\n return;\n }\n if ($selectedText.get().length) {\n return;\n }\n $el.find('.edit-description').show();\n $el.find('.view-description').hide();\n return $el.find('textarea').focus();\n });\n $el.on(\"click\", \".save\", function() {\n var description;\n description = $scope.item.description;\n return save(description);\n });\n $el.on(\"keydown\", \"textarea\", function(event) {\n if (event.keyCode === 27) {\n $scope.$apply((function(_this) {\n return function() {\n return $scope.item.revert();\n };\n })(this));\n $el.find('.edit-description').hide();\n return $el.find('.view-description').show();\n }\n });\n $scope.$watch($attrs.ngModel, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n if (isEditable()) {\n $el.find('.view-description .edit').show();\n $el.find('.view-description .us-content').addClass('editable');\n return $scope.noDescriptionMsg = noDescriptionMegEditMode;\n } else {\n return $scope.noDescriptionMsg = noDescriptionMegReadMode;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgEditableDescription\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\", \"$tgLoading\", \"$selectedText\", \"$tgQqueue\", EditableDescriptionDirective]);\n\n ListItemIssueStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemIssueStatus);\n return bindOnce($scope, \"issueStatusById\", function(issueStatusById) {\n return $el.html(issueStatusById[issue.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n ListItemTaskStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var task;\n task = $scope.$eval($attrs.tgListitemTaskStatus);\n return bindOnce($scope, \"taskStatusById\", function(taskStatusById) {\n return $el.html(taskStatusById[task.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n ListItemUsStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var us;\n us = $scope.$eval($attrs.tgListitemUsStatus);\n return bindOnce($scope, \"usStatusById\", function(usStatusById) {\n return $el.html(usStatusById[us.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n ListItemAssignedtoDirective = function() {\n var link, template;\n template = _.template(\"
    \\n \\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \\n
    \");\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"membersById\", function(membersById) {\n var ctx, item, member;\n item = $scope.$eval($attrs.tgListitemAssignedto);\n ctx = {\n name: \"Unassigned\",\n imgurl: \"/images/unnamed.png\"\n };\n member = membersById[item.assigned_to];\n if (member) {\n ctx.imgurl = member.photo;\n ctx.name = member.full_name;\n }\n return $el.html(template(ctx));\n });\n };\n return {\n link: link\n };\n };\n\n ListItemPriorityDirective = function() {\n var link, template;\n template = \"
    \";\n link = function($scope, $el, $attrs) {\n var render;\n render = function(priorityById, issue) {\n var domNode, priority;\n priority = priorityById[issue.priority];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", priority.color);\n return domNode.attr(\"title\", priority.name);\n };\n bindOnce($scope, \"priorityById\", function(priorityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemPriority);\n return render(priorityById, issue);\n });\n return $scope.$watch($attrs.tgListitemPriority, function(issue) {\n return render($scope.priorityById, issue);\n });\n };\n return {\n link: link,\n template: template\n };\n };\n\n ListItemSeverityDirective = function() {\n var link, template;\n template = \"
    \";\n link = function($scope, $el, $attrs) {\n var render;\n render = function(severityById, issue) {\n var domNode, severity;\n severity = severityById[issue.severity];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", severity.color);\n return domNode.attr(\"title\", severity.name);\n };\n bindOnce($scope, \"severityById\", function(severityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemSeverity);\n return render(severityById, issue);\n });\n return $scope.$watch($attrs.tgListitemSeverity, function(issue) {\n return render($scope.severityById, issue);\n });\n };\n return {\n link: link,\n template: template\n };\n };\n\n ListItemTypeDirective = function() {\n var link, template;\n template = \"
    \";\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issueTypeById, issue) {\n var domNode, type;\n type = issueTypeById[issue.type];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", type.color);\n return domNode.attr(\"title\", type.name);\n };\n bindOnce($scope, \"issueTypeById\", function(issueTypeById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemType);\n return render(issueTypeById, issue);\n });\n return $scope.$watch($attrs.tgListitemType, function(issue) {\n return render($scope.issueTypeById, issue);\n });\n };\n return {\n link: link,\n template: template\n };\n };\n\n TgProgressBarDirective = function() {\n var link, render, template;\n template = _.template(\"
    %\\\">
    \");\n render = function(el, percentage) {\n return el.html(template({\n percentage: percentage\n }));\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgProgressBar, function(percentage) {\n percentage = _.max([0, percentage]);\n percentage = _.min([100, percentage]);\n return render($el, percentage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n TgMainTitleDirective = function() {\n var link, render, template;\n template = _.template(\"<%- projectName %>\\n<%- sectionName %>\");\n render = function(el, projectName, sectionName) {\n return el.html(template({\n projectName: projectName,\n sectionName: sectionName\n }));\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch(\"project\", function(project) {\n if (project) {\n return render($el, project.name, $scope.sectionName);\n }\n });\n $scope.$on(\"project:loaded\", (function(_this) {\n return function(ctx, project) {\n return render($el, project.name, $scope.sectionName);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemType\", ListItemTypeDirective);\n\n module.directive(\"tgListitemIssueStatus\", ListItemIssueStatusDirective);\n\n module.directive(\"tgListitemAssignedto\", ListItemAssignedtoDirective);\n\n module.directive(\"tgListitemPriority\", ListItemPriorityDirective);\n\n module.directive(\"tgListitemSeverity\", ListItemSeverityDirective);\n\n module.directive(\"tgListitemTaskStatus\", ListItemTaskStatusDirective);\n\n module.directive(\"tgListitemUsStatus\", ListItemUsStatusDirective);\n\n module.directive(\"tgProgressBar\", TgProgressBarDirective);\n\n module.directive(\"tgMainTitle\", TgMainTitleDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/confirm.coffee\n */\n\n(function() {\n var ConfirmService, NOTIFICATION_MSG, bindMethods, cancelTimeout, debounce, module, taiga, timeout,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n timeout = this.taiga.timeout;\n\n cancelTimeout = this.taiga.cancelTimeout;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n NOTIFICATION_MSG = {\n \"success\": {\n title: \"Everything is ok\",\n message: \"Our Oompa Loompas saved all your changes!\"\n },\n \"error\": {\n title: \"Oops, something happened...\",\n message: \"Our Oompa Loompas are sad, your changes were not saved!\"\n },\n \"light-error\": {\n title: \"Oops, something happened...\",\n message: \"Our Oompa Loompas are sad, your changes were not saved!\"\n }\n };\n\n ConfirmService = (function(_super) {\n __extends(ConfirmService, _super);\n\n ConfirmService.$inject = [\"$q\", \"lightboxService\", \"$tgLoading\"];\n\n function ConfirmService(q, lightboxService, loading) {\n this.q = q;\n this.lightboxService = lightboxService;\n this.loading = loading;\n bindMethods(this);\n }\n\n ConfirmService.prototype.hide = function(el) {\n if (el) {\n this.lightboxService.close(el);\n return el.off(\".confirm-dialog\");\n }\n };\n\n ConfirmService.prototype.ask = function(title, subtitle, message, lightboxSelector) {\n var defered, el;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-generic-ask\";\n }\n el = angular.element(lightboxSelector);\n el.find(\"h2.title\").html(title);\n el.find(\"span.subtitle\").html(subtitle);\n el.find(\"span.message\").html(message);\n defered = this.q.defer();\n el.on(\"click.confirm-dialog\", \"a.button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n _this.loading.start(target);\n return defered.resolve(function(ok) {\n if (ok == null) {\n ok = true;\n }\n _this.loading.finish(target);\n if (ok) {\n return _this.hide(el);\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \"a.button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.askOnDelete = function(title, message) {\n return this.ask(title, \"Are you sure you want to delete?\", message);\n };\n\n ConfirmService.prototype.askChoice = function(title, subtitle, choices, replacement, warning, lightboxSelector) {\n var choicesField, defered, el;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-ask-choice\";\n }\n el = angular.element(lightboxSelector);\n el.find(\".title\").html(title);\n el.find(\".subtitle\").html(subtitle);\n if (replacement) {\n el.find(\".replacement\").html(replacement);\n } else {\n el.find(\".replacement\").remove();\n }\n if (warning) {\n el.find(\".warning\").html(warning);\n } else {\n el.find(\".warning\").remove();\n }\n choicesField = el.find(\".choices\");\n choicesField.html('');\n _.each(choices, function(value, key) {\n return choicesField.append(angular.element(\"\"));\n });\n defered = this.q.defer();\n el.on(\"click.confirm-dialog\", \"a.button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n _this.loading.start(target);\n return defered.resolve({\n selected: choicesField.val(),\n finish: function() {\n _this.loading.finish(target);\n return _this.hide(el);\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \"a.button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.error = function(message) {\n var defered, el;\n el = angular.element(\".lightbox-generic-error\");\n el.find(\"h2.title\").html(message);\n defered = this.q.defer();\n el.on(\"click.confirm-dialog\", \"a.button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \"a.close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.success = function(message) {\n var defered, el;\n el = angular.element(\".lightbox-generic-success\");\n el.find(\"h2.title\").html(message);\n defered = this.q.defer();\n el.on(\"click.confirm-dialog\", \"a.button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \"a.close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.notify = function(type, message, title, time) {\n var body, el, selector;\n selector = \".notification-message-\" + type;\n el = angular.element(selector);\n if (el.hasClass(\"active\")) {\n return;\n }\n if (title) {\n el.find(\"h4\").html(title);\n } else {\n el.find(\"h4\").html(NOTIFICATION_MSG[type].title);\n }\n if (message) {\n el.find(\"p\").html(message);\n } else {\n el.find(\"p\").html(NOTIFICATION_MSG[type].message);\n }\n body = angular.element(\"body\");\n body.find(\".notification-message .notification-light\").removeClass('active').addClass('inactive');\n body.find(selector).removeClass('inactive').addClass('active');\n if (this.tsem) {\n cancelTimeout(this.tsem);\n }\n if (!time) {\n time = type === 'error' || type === 'light-error' ? 3500 : 1500;\n }\n this.tsem = timeout(time, (function(_this) {\n return function() {\n body.find(selector).removeClass('active').addClass('inactive');\n return delete _this.tsem;\n };\n })(this));\n return el.on(\"click\", \".icon-delete\", (function(_this) {\n return function(event) {\n return body.find(selector).removeClass('active').addClass('inactive');\n };\n })(this));\n };\n\n return ConfirmService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaCommon\");\n\n module.service(\"$tgConfirm\", ConfirmService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/estimation.coffee\n */\n\n(function() {\n var LbUsEstimationDirective, UsEstimationDirective, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n LbUsEstimationDirective = function($rootScope, $repo, $confirm) {\n var link, mainTemplate, pointsTemplate;\n mainTemplate = _.template(\"
      \\n
    • \\n <%- totalPoints %>\\n total\\n
    • \\n <% _.each(roles, function(role) { %>\\n
    • \\\">\\n <%- role.points %>\\n <%- role.name %>
    • \\n <% }); %>\\n
    \");\n pointsTemplate = _.template(\"
    \");\n link = function($scope, $el, $attrs, $model) {\n var calculateTotalPoints, render, renderPoints;\n render = function(points) {\n var computableRoles, ctx, html, roles, totalPoints;\n totalPoints = calculateTotalPoints(points) || 0;\n computableRoles = _.filter($scope.project.roles, \"computable\");\n roles = _.map(computableRoles, function(role) {\n var pointId, pointObj;\n pointId = points[role.id];\n pointObj = $scope.pointsById[pointId];\n role = _.clone(role, true);\n role.points = (pointObj != null) && (pointObj.name != null) ? pointObj.name : \"?\";\n return role;\n });\n ctx = {\n totalPoints: totalPoints,\n roles: roles\n };\n html = mainTemplate(ctx);\n return $el.html(html);\n };\n renderPoints = function(target, usPoints, roleId) {\n var html, points;\n points = _.map($scope.project.points, function(point) {\n point = _.clone(point, true);\n point.selected = usPoints[roleId] === point.id ? false : true;\n return point;\n });\n html = pointsTemplate({\n \"points\": points,\n roleId: roleId\n });\n $el.find(\".popover\").popover().close();\n $el.find(\".pop-points-open\").remove();\n if ($el.find(\".pop-role:visible\").css(\"left\") == null) {\n $el.find(\".pop-points-open\").css(\"left\", \"110px\");\n }\n $el.find(\".pop-points-open\").remove();\n $el.find(target).append(html);\n $el.find(\".pop-points-open\").popover().open(function() {\n return $(this).removeClass(\"active\");\n });\n return $el.find(\".pop-points-open\").show();\n };\n calculateTotalPoints = function(points) {\n var values;\n values = _.map(points, function(v, k) {\n var _ref;\n return ((_ref = $scope.pointsById[v]) != null ? _ref.value : void 0) || 0;\n });\n if (values.length === 0) {\n return \"0\";\n }\n return _.reduce(values, function(acc, num) {\n return acc + num;\n });\n };\n $el.on(\"click\", \".total.clickable\", function(event) {\n var points, roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n points = $model.$modelValue;\n renderPoints(target, points, roleId);\n target.siblings().removeClass('active');\n return target.addClass('active');\n });\n $el.on(\"click\", \".point\", function(event) {\n var pointId, points, roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n pointId = target.data(\"point-id\");\n $el.find(\".popover\").popover().close();\n points = _.clone($model.$modelValue, true);\n points[roleId] = pointId;\n return $scope.$apply(function() {\n return $model.$setViewValue(points);\n });\n });\n $scope.$watch($attrs.ngModel, function(points) {\n if (points) {\n return render(points);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbUsEstimation\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", LbUsEstimationDirective]);\n\n UsEstimationDirective = function($rootScope, $repo, $confirm, $qqueue) {\n var link, mainTemplate, pointsTemplate;\n mainTemplate = _.template(\"
      \\n
    • \\n <%- totalPoints %>\\n total\\n
    • \\n <% _.each(roles, function(role) { %>\\n
    • clickable<% } %>\\\" data-role-id=\\\"<%- role.id %>\\\">\\n <%- role.points %>\\n <%- role.name %>
    • \\n <% }); %>\\n
    \");\n pointsTemplate = _.template(\"\");\n link = function($scope, $el, $attrs, $model) {\n var calculateTotalPoints, isEditable, render, renderPoints, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var computableRoles, ctx, html, roles, totalPoints;\n totalPoints = us.total_points != null ? us.total_points : \"?\";\n computableRoles = _.filter($scope.project.roles, \"computable\");\n roles = _.map(computableRoles, function(role) {\n var pointId, pointObj;\n pointId = us.points[role.id];\n pointObj = $scope.pointsById[pointId];\n role = _.clone(role, true);\n role.points = (pointObj != null) && (pointObj.name != null) ? pointObj.name : \"?\";\n return role;\n });\n ctx = {\n totalPoints: totalPoints,\n roles: roles,\n editable: isEditable()\n };\n html = mainTemplate(ctx);\n return $el.html(html);\n };\n renderPoints = function(target, us, roleId) {\n var html, points;\n points = _.map($scope.project.points, function(point) {\n point = _.clone(point, true);\n point.selected = us.points[roleId] === point.id ? false : true;\n return point;\n });\n html = pointsTemplate({\n \"points\": points,\n roleId: roleId\n });\n $el.find(\".popover\").popover().close();\n $el.find(\".pop-points-open\").remove();\n if ($el.find(\".pop-role:visible\").css(\"left\") == null) {\n $el.find(\".pop-points-open\").css(\"left\", \"110px\");\n }\n $el.find(\".pop-points-open\").remove();\n $el.find(target).append(html);\n $el.find(\".pop-points-open\").popover().open(function() {\n return $(this).removeClass(\"active\").closest(\"li\").removeClass(\"active\");\n });\n return $el.find(\".pop-points-open\").show();\n };\n calculateTotalPoints = function(us) {\n var notNullValues, values;\n values = _.map(us.points, function(v, k) {\n var _ref;\n return (_ref = $scope.pointsById[v]) != null ? _ref.value : void 0;\n });\n if (values.length === 0) {\n return \"0\";\n }\n notNullValues = _.filter(values, function(v) {\n return v != null;\n });\n if (notNullValues.length === 0) {\n return \"?\";\n }\n return _.reduce(notNullValues, function(acc, num) {\n return acc + num;\n });\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(roleId, pointId) {\n var onError, onSuccess, points, us;\n $el.find(\".popover\").popover().close();\n us = angular.copy($model.$modelValue);\n points = _.clone($model.$modelValue.points, true);\n points[roleId] = pointId;\n us.setAttr('points', points);\n us.points = points;\n us.total_points = calculateTotalPoints(us);\n $model.$setViewValue(us);\n onSuccess = function() {\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"history:reload\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n us.revert();\n return $model.$setViewValue(us);\n };\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".total.clickable\", function(event) {\n var roleId, target, us;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n us = $model.$modelValue;\n renderPoints(target, us, roleId);\n target.siblings().removeClass('active');\n return target.addClass('active');\n });\n $el.on(\"click\", \".point\", function(event) {\n var pointId, roleId, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n pointId = target.data(\"point-id\");\n return save(roleId, pointId);\n });\n $scope.$watch($attrs.ngModel, function(us) {\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsEstimation\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", UsEstimationDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/filters.coffee\n */\n\n(function() {\n var defaultFilter, module, momentFormat, momentFromNow, taiga, unslugify, yesNoFilter;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n defaultFilter = function() {\n return function(value, defaultValue) {\n if (value === [null, void 0]) {\n return defaultValue;\n }\n return value;\n };\n };\n\n module.filter(\"default\", defaultFilter);\n\n yesNoFilter = function() {\n return function(value) {\n if (value) {\n return \"Yes\";\n }\n return \"No\";\n };\n };\n\n module.filter(\"yesNo\", yesNoFilter);\n\n unslugify = function() {\n return taiga.unslugify;\n };\n\n module.filter(\"unslugify\", unslugify);\n\n momentFormat = function() {\n return function(input, format) {\n if (input) {\n return moment(input).format(format);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFormat\", momentFormat);\n\n momentFromNow = function() {\n return function(input, without_suffix) {\n if (input) {\n return moment(input).fromNow(without_suffix || false);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFromNow\", momentFromNow);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/history.coffee\n */\n\n(function() {\n var HistoryController, HistoryDirective, bindOnce, debounce, module, taiga, trim,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaCommon\");\n\n HistoryController = (function(_super) {\n __extends(HistoryController, _super);\n\n HistoryController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\"];\n\n function HistoryController(scope, repo, rs) {\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n }\n\n HistoryController.prototype.initialize = function(type, objectId) {\n this.type = type;\n return this.objectId = objectId;\n };\n\n HistoryController.prototype.loadHistory = function(type, objectId) {\n return this.rs.history.get(type, objectId).then((function(_this) {\n return function(history) {\n var historyResult, _i, _len;\n for (_i = 0, _len = history.length; _i < _len; _i++) {\n historyResult = history[_i];\n if (historyResult.values_diff.description_diff != null) {\n historyResult.values_diff.description = historyResult.values_diff.description_diff;\n }\n delete historyResult.values_diff.description_html;\n delete historyResult.values_diff.description_diff;\n }\n _this.scope.history = history;\n return _this.scope.comments = _.filter(history, function(item) {\n return item.comment !== \"\";\n });\n };\n })(this));\n };\n\n HistoryController.prototype.deleteComment = function(type, objectId, activityId) {\n return this.rs.history.deleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n return _this.loadHistory(type, objectId);\n };\n })(this));\n };\n\n HistoryController.prototype.undeleteComment = function(type, objectId, activityId) {\n return this.rs.history.undeleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n return _this.loadHistory(type, objectId);\n };\n })(this));\n };\n\n return HistoryController;\n\n })(taiga.Controller);\n\n HistoryDirective = function($log, $loading, $qqueue) {\n var link, templateActivity, templateBase, templateBaseEntries, templateChangeAttachment, templateChangeDiff, templateChangeGeneric, templateChangePoints, templateDeletedComment, templateFn;\n templateChangeDiff = _.template(\"
    \\n
    \\n <%- name %>\\n
    \\n
    \\n

    \\n <%= diff %>\\n

    \\n
    \\n
    \");\n templateChangePoints = _.template(\"<% _.each(points, function(point, name) { %>\\n
    \\n
    \\n US points (<%- name.toLowerCase() %>)\\n
    \\n
    \\n

    \\n from
    \\n <%- point[0] %>\\n

    \\n

    \\n to
    \\n <%- point[1] %>\\n

    \\n
    \\n
    \\n<% }); %>\");\n templateChangeGeneric = _.template(\"
    \\n
    \\n <%- name %>\\n
    \\n
    \\n

    \\n from
    \\n <%- from %>\\n

    \\n

    \\n to
    \\n <%- to %>\\n

    \\n
    \\n
    \");\n templateChangeAttachment = _.template(\"
    \\n
    \\n <%- name %>\\n
    \\n
    \\n <% _.each(diff, function(change) { %>\\n

    \\n <%- change.name %> from
    \\n <%- change.from %>\\n

    \\n

    \\n <%- change.name %> to
    \\n <%- change.to %>\\n

    \\n <% }) %>\\n
    \\n
    \");\n templateDeletedComment = _.template(\"
    \\n
    \\n Comment deleted by <%- deleteCommentUser %> on <%- deleteCommentDate %>\\n (Show deleted comment)\\n (Hide deleted comment)\\n
    <%= deleteComment %>
    \\n
    \\n <% if (canRestoreComment) { %>\\n \\\">\\n \\n Restore comment\\n \\n <% } %>\\n
    \");\n templateActivity = _.template(\"
    \\\">\\n \\n
    \\n
    \\n \\\">\\n <%- userFullName %>\\n \\n \\n <%- creationDate %>\\n \\n
    \\n\\n <% if (comment.length > 0) { %>\\n <% if ((deleteCommentDate || deleteCommentUser)) { %>\\n
    \\n Comment deleted by <%- deleteCommentUser %> on <%- deleteCommentDate %>\\n
    \\n <% } %>\\n
    \\n <%= comment %>\\n
    \\n <% if (!deleteCommentDate && mode !== \\\"activity\\\" && canDeleteComment) { %>\\n \\\">\\n <% } %>\\n <% } %>\\n\\n <% if(changes.length > 0) { %>\\n
    \\n <% if (mode != \\\"activity\\\") { %>\\n \\n <%- changesText %>\\n \\n \\n <% } %>\\n\\n <% _.each(changes, function(change) { %>\\n <%= change %>\\n <% }) %>\\n
    \\n <% } %>\\n
    \\n
    \");\n templateBaseEntries = _.template(\"\\n<% if (showMore > 0) { %>\\n\\n+ Show previous entries (<%- showMore %> more)\\n\\n<% } %>\\n<% _.each(entries, function(entry) { %>\\n <%= entry %>\\n<% }) %>\");\n templateBase = _.template(\"
    \\n \\n
    \\n
    \\n
    \\\" tg-toggle-comment class=\\\"add-comment\\\">\\n \\n <% if (mode !== \\\"edit\\\") { %>\\n \\n \\n Markdown syntax help\\n \\n Comment\\n <% } %>\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \");\n link = function($scope, $el, $attrs, $ctrl) {\n var countChanges, formatChange, getHumanizedFieldName, getUserAvatar, getUserFullName, objectId, renderActivity, renderAttachmentEntry, renderChange, renderChangeEntries, renderChangeEntry, renderChangesHelperText, renderComment, renderComments, renderHistory, save, showAllActivity, showAllComments, type;\n type = $attrs.type;\n objectId = null;\n showAllComments = false;\n showAllActivity = false;\n bindOnce($scope, $attrs.ngModel, function(model) {\n type = $attrs.type;\n objectId = model.id;\n $ctrl.initialize(type, objectId);\n return $ctrl.loadHistory(type, objectId);\n });\n getHumanizedFieldName = function(field) {\n var humanizedFieldNames;\n humanizedFieldNames = {\n assigned_to: \"assigned to\",\n is_closed: \"is closed\",\n finish_date: \"finish date\",\n client_requirement: \"client requirement\",\n team_requirement: \"team requirement\",\n milestone: \"sprint\",\n user_story: \"user story\",\n is_iocaine: \"is iocaine\",\n is_deprecated: \"is deprecated\"\n };\n return humanizedFieldNames[field] || field;\n };\n getUserFullName = function(userId) {\n var _ref;\n return (_ref = $scope.usersById[userId]) != null ? _ref.full_name_display : void 0;\n };\n getUserAvatar = function(userId) {\n if ($scope.usersById[userId] != null) {\n return $scope.usersById[userId].photo;\n } else {\n return \"/images/unnamed.png\";\n }\n };\n countChanges = function(comment) {\n return _.keys(comment.values_diff).length;\n };\n formatChange = function(change) {\n if (_.isArray(change)) {\n if (change.length === 0) {\n return \"nil\";\n }\n return change.join(\", \");\n }\n if (change === \"\") {\n return \"nil\";\n }\n if (change === true) {\n return \"yes\";\n }\n if (change === false) {\n return \"no\";\n }\n return change;\n };\n renderAttachmentEntry = function(value) {\n var attachments;\n attachments = _.map(value, function(changes, type) {\n if (type === \"new\") {\n return _.map(changes, function(change) {\n return templateChangeDiff({\n name: \"new attachment\",\n diff: change.filename\n });\n });\n } else if (type === \"deleted\") {\n return _.map(changes, function(change) {\n return templateChangeDiff({\n name: \"deleted attachment\",\n diff: change.filename\n });\n });\n } else {\n return _.map(changes, function(change) {\n var diff, name;\n name = \"updated attachment \" + change.filename;\n diff = _.map(change.changes, function(values, name) {\n return {\n name: getHumanizedFieldName(name),\n from: formatChange(values[0]),\n to: formatChange(values[1])\n };\n });\n return templateChangeAttachment({\n name: name,\n diff: diff\n });\n });\n }\n });\n return _.flatten(attachments).join(\"\\n\");\n };\n renderChangeEntry = function(field, value) {\n var from, name, to;\n if (field === \"description\") {\n return templateChangeDiff({\n name: \"description\",\n diff: value[1]\n });\n } else if (field === \"points\") {\n return templateChangePoints({\n points: value\n });\n } else if (field === \"attachments\") {\n return renderAttachmentEntry(value);\n } else if (field === \"assigned_to\") {\n name = getHumanizedFieldName(field);\n from = formatChange(value[0] || \"Unassigned\");\n to = formatChange(value[1] || \"Unassigned\");\n return templateChangeGeneric({\n name: name,\n from: from,\n to: to\n });\n } else {\n name = getHumanizedFieldName(field);\n from = formatChange(value[0]);\n to = formatChange(value[1]);\n return templateChangeGeneric({\n name: name,\n from: from,\n to: to\n });\n }\n };\n renderChangeEntries = function(change, join) {\n var entries;\n if (join == null) {\n join = true;\n }\n entries = _.map(change.values_diff, function(value, field) {\n return renderChangeEntry(field, value);\n });\n if (join) {\n return entries.join(\"\\n\");\n }\n return entries;\n };\n renderChangesHelperText = function(change) {\n var size;\n size = countChanges(change);\n if (size === 1) {\n return \"Made \" + size + \" change\";\n }\n return \"Made \" + size + \" changes\";\n };\n renderComment = function(comment) {\n var _ref;\n if (comment.delete_comment_date || comment.delete_comment_user) {\n return templateDeletedComment({\n deleteCommentDate: moment(comment.delete_comment_date).format(\"DD MMM YYYY HH:mm\"),\n deleteCommentUser: comment.delete_comment_user.name,\n deleteComment: comment.comment_html,\n activityId: comment.id,\n canRestoreComment: comment.delete_comment_user.pk === $scope.user.id || $scope.project.my_permissions.indexOf(\"modify_project\") > -1\n });\n }\n return templateActivity({\n avatar: getUserAvatar(comment.user.pk),\n userFullName: comment.user.name,\n creationDate: moment(comment.created_at).format(\"DD MMM YYYY HH:mm\"),\n comment: comment.comment_html,\n changesText: renderChangesHelperText(comment),\n changes: renderChangeEntries(comment, false),\n mode: \"comment\",\n deleteCommentDate: comment.delete_comment_date ? moment(comment.delete_comment_date).format(\"DD MMM YYYY HH:mm\") : void 0,\n deleteCommentUser: ((_ref = comment.delete_comment_user) != null ? _ref.name : void 0) ? comment.delete_comment_user.name : void 0,\n activityId: comment.id,\n canDeleteComment: comment.user.pk === $scope.user.id || $scope.project.my_permissions.indexOf(\"modify_project\") > -1\n });\n };\n renderChange = function(change) {\n var _ref;\n return templateActivity({\n avatar: getUserAvatar(change.user.pk),\n userFullName: change.user.name,\n creationDate: moment(change.created_at).format(\"DD MMM YYYY HH:mm\"),\n comment: change.comment_html,\n changes: renderChangeEntries(change, false),\n changesText: \"\",\n mode: \"activity\",\n deleteCommentDate: change.delete_comment_date ? moment(change.delete_comment_date).format(\"DD MMM YYYY HH:mm\") : void 0,\n deleteCommentUser: ((_ref = change.delete_comment_user) != null ? _ref.name : void 0) ? change.delete_comment_user.name : void 0,\n activityId: change.id\n });\n };\n renderHistory = function(entries, totalEntries) {\n var showMore;\n if (entries.length === totalEntries) {\n showMore = 0;\n } else {\n showMore = totalEntries - entries.length;\n }\n return templateBaseEntries({\n entries: entries,\n showMore: showMore\n });\n };\n renderComments = function() {\n var comments, html, totalComments;\n comments = $scope.comments || [];\n totalComments = comments.length;\n if (!showAllComments) {\n comments = _.last(comments, 4);\n }\n comments = _.map(comments, function(x) {\n return renderComment(x);\n });\n html = renderHistory(comments, totalComments);\n return $el.find(\".comments-list\").html(html);\n };\n renderActivity = function() {\n var changes, html, totalChanges;\n changes = $scope.history || [];\n totalChanges = changes.length;\n if (!showAllActivity) {\n changes = _.last(changes, 4);\n }\n changes = _.map(changes, function(x) {\n return renderChange(x);\n });\n html = renderHistory(changes, totalChanges);\n return $el.find(\".changes-list\").html(html);\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(target) {\n var model, onError, onSuccess;\n $scope.$broadcast(\"markdown-editor:submit\");\n $el.find(\".comment-list\").addClass(\"activeanimation\");\n onSuccess = function() {\n return $ctrl.loadHistory(type, objectId)[\"finally\"](function() {\n return $loading.finish(target);\n });\n };\n onError = function() {\n $loading.finish(target);\n return $confirm.notify(\"error\");\n };\n model = $scope.$eval($attrs.ngModel);\n $loading.start(target);\n return $ctrl.repo.save(model).then(onSuccess, onError);\n };\n })(this));\n $scope.$watch(\"comments\", renderComments);\n $scope.$watch(\"history\", renderActivity);\n $scope.$on(\"history:reload\", function() {\n return $ctrl.loadHistory(type, objectId);\n });\n $el.on(\"click\", \".add-comment a.button-green\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return save(target);\n }));\n $el.on(\"click\", \".show-more\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n if (target.parent().is(\".changes-list\")) {\n showAllActivity = !showAllActivity;\n return renderActivity();\n } else {\n showAllComments = !showAllComments;\n return renderComments();\n }\n });\n $el.on(\"click\", \".show-deleted-comment\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.parents('.activity-single').find('.hide-deleted-comment').show();\n target.parents('.activity-single').find('.show-deleted-comment').hide();\n return target.parents('.activity-single').find('.comment-body').show();\n });\n $el.on(\"click\", \".hide-deleted-comment\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.parents('.activity-single').find('.hide-deleted-comment').hide();\n target.parents('.activity-single').find('.show-deleted-comment').show();\n return target.parents('.activity-single').find('.comment-body').hide();\n });\n $el.on(\"click\", \".changes-title\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return target.parent().find(\".change-entry\").toggleClass(\"active\");\n });\n $el.on(\"focus\", \".add-comment textarea\", function(event) {\n return $(this).addClass('active');\n });\n $el.on(\"click\", \".history-tabs li a\", function(event) {\n $el.find(\".history-tabs li a\").toggleClass(\"active\");\n return $el.find(\".history section\").toggleClass(\"hidden\");\n });\n $el.on(\"click\", \".comment-delete\", debounce(2000, function(event) {\n var activityId, target;\n target = angular.element(event.currentTarget);\n activityId = target.data('activity-id');\n return $ctrl.deleteComment(type, objectId, activityId);\n }));\n $el.on(\"click\", \".comment-restore\", debounce(2000, function(event) {\n var activityId, target;\n target = angular.element(event.currentTarget);\n activityId = target.data('activity-id');\n return $ctrl.undeleteComment(type, objectId, activityId);\n }));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n templateFn = function($el, $attrs) {\n return templateBase({\n ngmodel: $attrs.ngModel,\n type: $attrs.type,\n mode: $attrs.mode\n });\n };\n return {\n controller: HistoryController,\n template: templateFn,\n restrict: \"AE\",\n link: link\n };\n };\n\n module.directive(\"tgHistory\", [\"$log\", \"$tgLoading\", \"$tgQqueue\", HistoryDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/lightboxes.coffee\n */\n\n(function() {\n var AssignedToLightboxDirective, BlockLightboxDirective, BlockingMessageInputDirective, CreateBulkUserstoriesDirective, CreateEditUserstoryDirective, LightboxDirective, LightboxKeyboardNavigationService, LightboxService, NotionButtonDirective, NotionLightboxDirective, WatchersLightboxDirective, bindOnce, debounce, module, timeout, usersTemplate,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n module = angular.module(\"taigaCommon\");\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n LightboxService = (function(_super) {\n __extends(LightboxService, _super);\n\n function LightboxService(animationFrame) {\n this.animationFrame = animationFrame;\n }\n\n LightboxService.prototype.open = function($el) {\n var docEl, lightboxContent;\n lightboxContent = $el.children().not(\".close\");\n lightboxContent.hide();\n $el.css('display', 'flex');\n $el.find('input,textarea').first().focus();\n this.animationFrame.add((function(_this) {\n return function() {\n $el.addClass(\"open\");\n return lightboxContent.show();\n };\n })(this));\n docEl = angular.element(document);\n return docEl.on(\"keydown.lightbox\", (function(_this) {\n return function(e) {\n var code;\n code = e.keyCode ? e.keyCode : e.which;\n if (code === 27) {\n return _this.close($el);\n }\n };\n })(this));\n };\n\n LightboxService.prototype.close = function($el) {\n var docEl;\n docEl = angular.element(document);\n docEl.off(\".lightbox\");\n docEl.off(\".keyboard-navigation\");\n $el.one(\"transitionend\", (function(_this) {\n return function() {\n $el.removeAttr('style');\n return $el.removeClass(\"open\").removeClass('close');\n };\n })(this));\n return $el.addClass('close');\n };\n\n LightboxService.prototype.closeAll = function() {\n var docEl, lightboxEl, _i, _len, _ref, _results;\n docEl = angular.element(document);\n _ref = docEl.find(\".lightbox.open\");\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n lightboxEl = _ref[_i];\n _results.push(this.close($(lightboxEl)));\n }\n return _results;\n };\n\n return LightboxService;\n\n })(taiga.Service);\n\n module.service(\"lightboxService\", [\"animationFrame\", LightboxService]);\n\n LightboxKeyboardNavigationService = (function(_super) {\n __extends(LightboxKeyboardNavigationService, _super);\n\n function LightboxKeyboardNavigationService() {\n return LightboxKeyboardNavigationService.__super__.constructor.apply(this, arguments);\n }\n\n LightboxKeyboardNavigationService.prototype.stop = function() {\n var docEl;\n docEl = angular.element(document);\n return docEl.off(\".keyboard-navigation\");\n };\n\n LightboxKeyboardNavigationService.prototype.dispatch = function($el, code) {\n var activeElement, next, prev;\n activeElement = $el.find(\".active\");\n if (code === 13) {\n return activeElement.trigger(\"click\");\n } else if (code === 40) {\n if (!activeElement.length) {\n return $el.find('.watcher-single:first').addClass('active');\n } else {\n next = activeElement.next('.watcher-single');\n if (next.length) {\n activeElement.removeClass('active');\n return next.addClass('active');\n }\n }\n } else if (code === 38) {\n if (!activeElement.length) {\n return $el.find('.watcher-single:last').addClass('active');\n } else {\n prev = activeElement.prev('.watcher-single');\n if (prev.length) {\n activeElement.removeClass('active');\n return prev.addClass('active');\n }\n }\n }\n };\n\n LightboxKeyboardNavigationService.prototype.init = function($el) {\n var docEl;\n this.stop();\n docEl = angular.element(document);\n return docEl.on(\"keydown.keyboard-navigation\", (function(_this) {\n return function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 40 || code === 38 || code === 13) {\n event.preventDefault();\n return _this.dispatch($el, code);\n }\n };\n })(this));\n };\n\n return LightboxKeyboardNavigationService;\n\n })(taiga.Service);\n\n module.service(\"lightboxKeyboardNavigationService\", LightboxKeyboardNavigationService);\n\n LightboxDirective = function(lightboxService) {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n };\n return {\n restrict: \"C\",\n link: link\n };\n };\n\n module.directive(\"lightbox\", [\"lightboxService\", LightboxDirective]);\n\n BlockLightboxDirective = function($rootscope, $tgrepo, $confirm, lightboxService, $loading, $qqueue) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var block, unblock;\n $el.find(\"h2.title\").text($attrs.title);\n unblock = $qqueue.bindAdd((function(_this) {\n return function(item, finishCallback) {\n var promise;\n promise = $tgrepo.save(item);\n promise.then(function() {\n $confirm.notify(\"success\");\n $rootscope.$broadcast(\"history:reload\");\n $model.$setViewValue(item);\n return finishCallback();\n });\n promise.then(null, function() {\n $confirm.notify(\"error\");\n item.revert();\n return $model.$setViewValue(item);\n });\n promise[\"finally\"](function() {\n return finishCallback();\n });\n return promise;\n };\n })(this));\n block = $qqueue.bindAdd((function(_this) {\n return function(item) {\n var promise;\n $model.$setViewValue(item);\n $loading.start($el.find(\".button-green\"));\n promise = $tgrepo.save($model.$modelValue);\n promise.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"history:reload\");\n });\n promise.then(null, function() {\n $confirm.notify(\"error\");\n item.revert();\n return $model.$setViewValue(item);\n });\n return promise[\"finally\"](function() {\n $loading.finish($el.find(\".button-green\"));\n return lightboxService.close($el);\n });\n };\n })(this));\n $scope.$on(\"block\", function() {\n $el.find(\".reason\").val($model.$modelValue.blocked_note);\n return lightboxService.open($el);\n });\n $scope.$on(\"unblock\", (function(_this) {\n return function(event, model, finishCallback) {\n var item;\n item = $model.$modelValue.clone();\n item.is_blocked = false;\n item.blocked_note = \"\";\n return unblock(item, finishCallback);\n };\n })(this));\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n var item;\n event.preventDefault();\n item = $model.$modelValue.clone();\n item.is_blocked = true;\n item.blocked_note = $el.find(\".reason\").val();\n return block(item);\n });\n };\n return {\n templateUrl: \"/partials/views/modules/lightbox-block.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbBlock\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"lightboxService\", \"$tgLoading\", \"$tgQqueue\", BlockLightboxDirective]);\n\n BlockingMessageInputDirective = function($log) {\n var link, template, templateFn;\n template = _.template(\"
    \\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.watch) {\n return $log.error(\"No watch attribute on tg-blocking-message-input directive\");\n }\n return $scope.$watch($attrs.watch, function(value) {\n if (value === !void 0 && value === true) {\n return $el.find(\".blocked-note\").removeClass(\"hidden\");\n } else {\n return $el.find(\".blocked-note\").addClass(\"hidden\");\n }\n });\n };\n templateFn = function($el, $attrs) {\n return template({\n ngmodel: $attrs.ngModel\n });\n };\n return {\n template: templateFn,\n link: link,\n require: \"ngModel\",\n restrict: \"EA\"\n };\n };\n\n module.directive(\"tgBlockingMessageInput\", [\"$log\", BlockingMessageInputDirective]);\n\n CreateEditUserstoryDirective = function($repo, $model, $rs, $rootScope, lightboxService, $loading) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.isNew = true;\n $scope.$on(\"usform:new\", function(ctx, projectId, status, statusList) {\n $scope.isNew = true;\n $scope.usStatusList = statusList;\n $scope.us = $model.make_model(\"userstories\", {\n project: projectId,\n points: {},\n status: status,\n is_archived: false,\n tags: []\n });\n $el.find(\".button-green\").html(\"Create\");\n $el.find(\".title\").html(\"New user story \");\n $el.find(\".tag-input\").val(\"\");\n $el.find(\".blocked-note\").addClass(\"hidden\");\n $el.find(\"label.blocked\").removeClass(\"selected\");\n $el.find(\"label.team-requirement\").removeClass(\"selected\");\n $el.find(\"label.client-requirement\").removeClass(\"selected\");\n return lightboxService.open($el);\n });\n $scope.$on(\"usform:edit\", function(ctx, us) {\n $scope.us = us;\n $scope.isNew = false;\n $el.find(\".button-green\").html(\"Save\");\n $el.find(\".title\").html(\"Edit user story \");\n $el.find(\".tag-input\").val(\"\");\n if (us.is_blocked) {\n $el.find(\".blocked-note\").removeClass(\"hidden\");\n $el.find(\"label.blocked\").addClass(\"selected\");\n } else {\n $el.find(\".blocked-note\").addClass(\"hidden\");\n $el.find(\"label.blocked\").removeClass(\"selected\");\n }\n if (us.team_requirement) {\n $el.find(\"label.team-requirement\").addClass(\"selected\");\n } else {\n $el.find(\"label.team-requirement\").removeClass(\"selected\");\n }\n if (us.client_requirement) {\n $el.find(\"label.client-requirement\").addClass(\"selected\");\n } else {\n $el.find(\"label.client-requirement\").removeClass(\"selected\");\n }\n return lightboxService.open($el);\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var broadcastEvent, form, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n if ($scope.isNew) {\n promise = $repo.create(\"userstories\", $scope.us);\n broadcastEvent = \"usform:new:success\";\n } else {\n promise = $repo.save($scope.us);\n broadcastEvent = \"usform:edit:success\";\n }\n promise.then(function(data) {\n $loading.finish(submitButton);\n lightboxService.close($el);\n return $rootScope.$broadcast(broadcastEvent, data);\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n $scope.$apply(function() {\n return $scope.us.revert();\n });\n return lightboxService.close($el);\n });\n $el.keydown(function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 27) {\n lightboxService.close($el);\n return $scope.$apply(function() {\n return $scope.us.revert();\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEditUserstory\", [\"$tgRepo\", \"$tgModel\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", CreateEditUserstoryDirective]);\n\n CreateBulkUserstoriesDirective = function($repo, $rs, $rootscope, lightboxService, $loading) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.$on(\"usform:bulk\", function(ctx, projectId, status) {\n $scope[\"new\"] = {\n projectId: projectId,\n statusId: status,\n bulk: \"\"\n };\n return lightboxService.open($el);\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $rs.userstories.bulkCreate($scope[\"new\"].projectId, $scope[\"new\"].statusId, $scope[\"new\"].bulk);\n promise.then(function(result) {\n $loading.finish(submitButton);\n $rootscope.$broadcast(\"usform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkUserstories\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", CreateBulkUserstoriesDirective]);\n\n usersTemplate = _.template(\"<% if (selected) { %>\\n\\n<% } %>\\n\\n<% _.each(users, function(user) { %>\\n\\n<% }) %>\\n\\n<% if (showMore) { %>\\n
    \\n ...too many users, keep filtering\\n
    \\n<% } %>\");\n\n AssignedToLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, filterUsers, normalizeString, render, selectedItem, selectedUser;\n selectedUser = null;\n selectedItem = null;\n normalizeString = function(string) {\n var normalizedString;\n normalizedString = string;\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\");\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\");\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\");\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\");\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\");\n return normalizedString;\n };\n filterUsers = function(text, user) {\n var username;\n username = user.full_name_display.toUpperCase();\n username = normalizeString(username);\n text = text.toUpperCase();\n text = normalizeString(text);\n return _.contains(username, text);\n };\n render = function(selected, text) {\n var ctx, html, users;\n $el.find(\"input\").focus();\n users = _.clone($scope.activeUsers, true);\n if (selected != null) {\n users = _.reject(users, {\n \"id\": selected.id\n });\n }\n if (text != null) {\n users = _.filter(users, _.partial(filterUsers, text));\n }\n ctx = {\n selected: selected,\n users: _.first(users, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n $el.find(\"div.watchers\").html(html);\n return lightboxKeyboardNavigationService.init($el);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"assigned-to:add\", function(ctx, item) {\n var assignedToId;\n selectedItem = item;\n assignedToId = item.assigned_to;\n selectedUser = $scope.usersById[assignedToId];\n render(selectedUser);\n lightboxService.open($el);\n return $el.find('input').focus();\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n return render(selectedUser, searchingText);\n }\n });\n $el.on(\"click\", \".watcher-single\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n closeLightbox();\n return $scope.$apply(function() {\n $scope.$broadcast(\"assigned-to:added\", target.data(\"user-id\"), selectedItem);\n return $scope.usersSearch = null;\n });\n });\n $el.on(\"click\", \".remove-assigned-to\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n closeLightbox();\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-to:added\", null, selectedItem);\n });\n });\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"/partials/views/modules/lightbox-assigned-to.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbAssignedto\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", AssignedToLightboxDirective]);\n\n WatchersLightboxDirective = function($repo, lightboxService, lightboxKeyboardNavigationService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, getFilteredUsers, render, selectedItem;\n selectedItem = null;\n getFilteredUsers = function(text) {\n var users, _filterUsers;\n if (text == null) {\n text = \"\";\n }\n _filterUsers = function(text, user) {\n var username;\n if (selectedItem && _.find(selectedItem.watchers, function(x) {\n return x === user.id;\n })) {\n return false;\n }\n username = user.full_name_display.toUpperCase();\n text = text.toUpperCase();\n return _.contains(username, text);\n };\n users = _.clone($scope.activeUsers, true);\n users = _.filter(users, _.partial(_filterUsers, text));\n return users;\n };\n render = function(users) {\n var ctx, html;\n $el.find(\"input\").focus();\n ctx = {\n selected: false,\n users: _.first(users, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n return $el.find(\"div.watchers\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"watcher:add\", function(ctx, item) {\n var users;\n selectedItem = item;\n users = getFilteredUsers();\n render(users);\n lightboxService.open($el);\n return lightboxKeyboardNavigationService.init($el);\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n var users;\n if (searchingText == null) {\n return;\n }\n users = getFilteredUsers(searchingText);\n return render(users);\n });\n $el.on(\"click\", \".watcher-single\", debounce(2000, function(event) {\n var target;\n closeLightbox();\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"watcher:added\", target.data(\"user-id\"));\n });\n }));\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"/partials/views/modules/lightbox-users.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbWatchers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", WatchersLightboxDirective]);\n\n NotionLightboxDirective = function(lightboxService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n $scope.$on(\"notion:open\", function(event, lightboxId) {\n if ($el.attr(\"id\") === lightboxId) {\n return lightboxService.open($el);\n }\n });\n $el.on(\"click\", \".button-green\", function(event) {\n return lightboxService.close($el);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbNotion\", [\"lightboxService\", NotionLightboxDirective]);\n\n NotionButtonDirective = function($log, $rootScope) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n if ($attrs.tgLbNotionButton == null) {\n return $log.error(\"NotionButtonDirective: the directive need the id of the notion lightbox\");\n }\n $el.on(\"click\", function() {\n return $rootScope.$broadcast(\"notion:open\", $attrs.tgLbNotionButton);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbNotionButton\", [\"$log\", \"$rootScope\", NotionButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n * Copyright (C) 2014 Juan Francisco Alcántara \n * Copyright (C) 2014 Alejandro Alonso \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/loader.coffee\n */\n\n(function() {\n var Loader, LoaderDirective, module, sizeFormat, taiga, timeout;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaCommon\");\n\n LoaderDirective = function(tgLoader, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n tgLoader.onStart(function() {\n $(document.body).addClass(\"loader-active\");\n return $el.addClass(\"active\");\n });\n tgLoader.onEnd(function() {\n $(document.body).removeClass(\"loader-active\");\n return $el.removeClass(\"active\");\n });\n $rootscope.$on(\"$routeChangeSuccess\", function(e) {\n return tgLoader.startCurrentPageLoader();\n });\n return $rootscope.$on(\"$locationChangeSuccess\", function(e) {\n return tgLoader.reset();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLoader\", [\"tgLoader\", \"$rootScope\", LoaderDirective]);\n\n Loader = function() {\n var config, defaultConfig, forceDisabled;\n forceDisabled = false;\n defaultConfig = {\n enabled: false,\n minTime: 300\n };\n config = _.merge({}, defaultConfig);\n this.add = function() {\n return function() {\n if (!forceDisabled) {\n return config.enabled = true;\n }\n };\n };\n this.$get = [\n \"$rootScope\", function($rootscope) {\n var pageLoaded, reset, start, startLoadTime;\n startLoadTime = 0;\n reset = function() {\n return config = _.merge({}, defaultConfig);\n };\n pageLoaded = function(force) {\n var diff, endTime, timeoutValue;\n if (force == null) {\n force = false;\n }\n if (startLoadTime) {\n timeoutValue = 0;\n if (!force) {\n endTime = new Date().getTime();\n diff = endTime - startLoadTime;\n if (diff < config.minTime) {\n timeoutValue = config.minTime - diff;\n }\n }\n return timeout(timeoutValue, function() {\n return $rootscope.$broadcast(\"loader:end\");\n });\n }\n };\n start = function() {\n startLoadTime = new Date().getTime();\n return $rootscope.$broadcast(\"loader:start\");\n };\n return {\n reset: reset,\n pageLoaded: pageLoaded,\n start: start,\n startCurrentPageLoader: function() {\n if (config.enabled) {\n return start();\n }\n },\n onStart: function(fn) {\n return $rootscope.$on(\"loader:start\", fn);\n },\n onEnd: function(fn) {\n return $rootscope.$on(\"loader:end\", fn);\n },\n preventLoading: function() {\n return forceDisabled = true;\n },\n disablePreventLoading: function() {\n return forceDisabled = false;\n }\n };\n }\n ];\n };\n\n module.provider(\"tgLoader\", [Loader]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/lightboxes.coffee\n */\n\n(function() {\n var TgLoadingService, module,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n module = angular.module(\"taigaCommon\");\n\n TgLoadingService = (function(_super) {\n __extends(TgLoadingService, _super);\n\n function TgLoadingService() {\n return TgLoadingService.__super__.constructor.apply(this, arguments);\n }\n\n TgLoadingService.prototype.start = function(target) {\n if (!target.hasClass('loading')) {\n target.data('loading-old-content', target.html());\n target.addClass('loading');\n return target.html(\"\");\n }\n };\n\n TgLoadingService.prototype.finish = function(target) {\n var oldContent;\n if (target.hasClass('loading')) {\n oldContent = target.data('loading-old-content');\n target.data('loading-old-content', null);\n target.html(oldContent);\n return target.removeClass('loading');\n }\n };\n\n return TgLoadingService;\n\n })(taiga.Service);\n\n module.service(\"$tgLoading\", TgLoadingService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/popovers.coffee\n */\n\n(function() {\n var RelatedTaskStatusDirective, UsStatusDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaCommon\");\n\n UsStatusDirective = function($repo, popoverService) {\n\n /*\n Print the status of a US and a popover to change it.\n - tg-us-status: The user story\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-us-status=\"us\" on-update=\"ctrl.loadSprintState()\")\n a.us-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'usStatusById' and 'project'.\n */\n var link, template;\n template = _.template(\"\");\n link = function($scope, $el, $attrs) {\n var $ctrl, render, us;\n $ctrl = $el.controller();\n render = function(us) {\n var usStatusById, usStatusDom, usStatusDomParent;\n usStatusDomParent = $el.find(\".us-status\");\n usStatusDom = $el.find(\".us-status .us-status-bind\");\n usStatusById = $scope.usStatusById;\n if (usStatusById[us.status]) {\n usStatusDom.text(usStatusById[us.status].name);\n return usStatusDomParent.css(\"color\", usStatusById[us.status].color);\n }\n };\n $el.on(\"click\", \".us-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target, us;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgUsStatus);\n us.status = target.data(\"status-id\");\n render(us);\n $el.find(\".pop-status\").popover().close();\n return $scope.$apply(function() {\n return $repo.save(us).then(function() {\n return $scope.$eval($attrs.onUpdate);\n });\n });\n }));\n $scope.$on(\"userstories:loaded\", function() {\n return render($scope.$eval($attrs.tgUsStatus));\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n us = $scope.$eval($attrs.tgUsStatus);\n render(us);\n return bindOnce($scope, \"project\", function(project) {\n var html;\n html = template({\n \"statuses\": project.us_statuses\n });\n $el.append(html);\n if ($scope.project.my_permissions.indexOf(\"modify_us\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsStatus\", [\"$tgRepo\", UsStatusDirective]);\n\n RelatedTaskStatusDirective = function($repo, popoverService) {\n\n /*\n Print the status of a related task and a popover to change it.\n - tg-related-task-status: The related task\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-related-task-status=\"task\" on-update=\"ctrl.loadSprintState()\")\n a.task-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'taskStatusById' and 'project'.\n */\n var link, selectionTemplate, updateTaskStatus;\n selectionTemplate = _.template(\"\");\n updateTaskStatus = function($el, task, taskStatusById) {\n var taskStatusDom, taskStatusDomParent;\n taskStatusDomParent = $el.find(\".us-status\");\n taskStatusDom = $el.find(\".task-status .task-status-bind\");\n if (taskStatusById[task.status]) {\n taskStatusDom.text(taskStatusById[task.status].name);\n return taskStatusDomParent.css('color', taskStatusById[task.status].color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task;\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskStatus);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n $el.on(\"click\", \".task-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n task.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (autoSave) {\n return $scope.$apply(function() {\n return $repo.save(task).then(function() {\n $scope.$eval($attrs.onUpdate);\n return $scope.$emit(\"related-tasks:status-changed\");\n });\n });\n }\n }));\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.task_statuses\n }));\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskStatus\", [\"$tgRepo\", RelatedTaskStatusDirective]);\n\n $.fn.popover = function() {\n var $el, close, closeAll, closePopover, isVisible, open;\n $el = this;\n isVisible = (function(_this) {\n return function() {\n var docViewBottom, docViewLeft, docViewRight, docViewTop, docViewWidth, elemBottom, elemLeft, elemRight, elemTop, elemWidth;\n $el.css({\n \"display\": \"block\",\n \"visibility\": \"hidden\"\n });\n docViewTop = $(window).scrollTop();\n docViewBottom = docViewTop + $(window).height();\n docViewWidth = $(window).width();\n docViewRight = docViewWidth;\n docViewLeft = 0;\n elemTop = $el.offset().top;\n elemBottom = elemTop + $el.height();\n elemWidth = $el.width();\n elemLeft = $el.offset().left;\n elemRight = $el.offset().left + elemWidth;\n $el.css({\n \"display\": \"none\",\n \"visibility\": \"visible\"\n });\n return (elemBottom <= docViewBottom) && (elemTop >= docViewTop) && (elemLeft >= docViewLeft) && (elemRight <= docViewRight);\n };\n })(this);\n closePopover = (function(_this) {\n return function(onClose) {\n if (onClose) {\n onClose.call($el);\n }\n $el.fadeOut(function() {\n return $el.removeClass(\"active\").removeClass(\"fix\");\n });\n return $el.off(\"popup:close\");\n };\n })(this);\n closeAll = (function(_this) {\n return function() {\n return $(\".popover.active\").each(function() {\n return $(this).trigger(\"popup:close\");\n });\n };\n })(this);\n open = (function(_this) {\n return function(onClose) {\n if ($el.hasClass(\"active\")) {\n return close();\n } else {\n closeAll();\n if (!isVisible()) {\n $el.addClass(\"fix\");\n }\n $el.fadeIn(function() {\n $el.addClass(\"active\");\n $(document.body).off(\"popover\");\n return $(document.body).one(\"click.popover\", function() {\n return closeAll();\n });\n });\n return $el.on(\"popup:close\", function(e) {\n return closePopover(onClose);\n });\n }\n };\n })(this);\n close = (function(_this) {\n return function() {\n return $el.trigger(\"popup:close\");\n };\n })(this);\n return {\n open: open,\n close: close,\n closeAll: closeAll\n };\n };\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/raven-logger.coffee\n */\n\n(function() {\n var ExceptionHandlerFactory, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n ExceptionHandlerFactory = function($log, config) {\n var ravenConfig;\n this.config = config;\n ravenConfig = this.config.get(\"ravenConfig\", null);\n if (ravenConfig) {\n $log.debug(\"Using the RavenJS exception handler.\");\n Raven.config(ravenConfig).install();\n return function(exception, cause) {\n $log.error.apply($log, arguments);\n return Raven.captureException(exception);\n };\n } else {\n $log.debug(\"Using the default logging exception handler.\");\n return function(exception, cause) {\n return $log.error.apply($log, arguments);\n };\n }\n };\n\n module.factory(\"$exceptionHandler\", [\"$log\", \"$tgConfig\", ExceptionHandlerFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/tags.coffee\n */\n\n(function() {\n var ColorizeTagsDirective, LbTagLineDirective, TagLineDirective, TagsDirective, bindOnce, module, taiga, trim,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n TagsDirective = function() {\n var formatter, link, parser;\n formatter = function(v) {\n if (_.isArray(v)) {\n return v.join(\", \");\n }\n return \"\";\n };\n parser = function(v) {\n var result;\n if (!v) {\n return [];\n }\n result = _(v.split(\",\")).map(function(x) {\n return _.str.trim(x);\n });\n return result.value();\n };\n link = function($scope, $el, $attrs, $ctrl) {\n $ctrl.$formatters.push(formatter);\n $ctrl.$parsers.push(parser);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n require: \"ngModel\",\n link: link\n };\n };\n\n module.directive(\"tgTags\", TagsDirective);\n\n ColorizeTagsDirective = function() {\n var link, templates;\n templates = {\n backlog: _.template(\"<% _.each(tags, function(tag) { %>\\n \\\"><%- tag.name %>\\n<% }) %>\"),\n kanban: _.template(\"<% _.each(tags, function(tag) { %>\\n \\\" title=\\\"<%- tag.name %>\\\" />\\n<% }) %>\"),\n taskboard: _.template(\"<% _.each(tags, function(tag) { %>\\n \\\" title=\\\"<%- tag.name %>\\\" />\\n<% }) %>\")\n };\n link = function($scope, $el, $attrs, $ctrl) {\n var render;\n render = function(srcTags) {\n var html, tags, template;\n template = templates[$attrs.tgColorizeTagsType];\n srcTags.sort();\n tags = _.map(srcTags, function(tag) {\n var color;\n color = $scope.project.tags_colors[tag];\n return {\n name: tag,\n color: color\n };\n });\n html = template({\n tags: tags\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.tgColorizeTags, function(tags) {\n if (tags != null) {\n return render(tags);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgColorizeTags\", ColorizeTagsDirective);\n\n LbTagLineDirective = function($rs) {\n var COMMA_KEY, ENTER_KEY, link, template, templateTags;\n ENTER_KEY = 13;\n COMMA_KEY = 188;\n template = \"
    \\n\\n
    \";\n templateTags = _.template(\"<% _.each(tags, function(tag) { %>\\n style=\\\"border-left: 5px solid <%- tag.color %>;\\\"<% } %>>\\n <%- tag.name %>\\n \\n \\n<% }); %>\");\n link = function($scope, $el, $attrs, $model) {\n var addValue, deleteValue, hideSaveButton, removeInputLastCharacter, renderTags, resetInput, saveInputTag, showSaveButton;\n renderTags = function(tags, tagsColors) {\n var ctx, html;\n ctx = {\n tags: _.map(tags, function(t) {\n return {\n name: t,\n color: tagsColors[t]\n };\n })\n };\n html = templateTags(ctx);\n return $el.find(\"div.tags-container\").html(html);\n };\n showSaveButton = function() {\n return $el.find(\".save\").removeClass(\"hidden\");\n };\n hideSaveButton = function() {\n return $el.find(\".save\").addClass(\"hidden\");\n };\n resetInput = function() {\n $el.find(\"input\").val(\"\");\n return $el.find(\"input\").autocomplete(\"close\");\n };\n addValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n if (tags == null) {\n tags = [];\n }\n if (__indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n return $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n };\n deleteValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n tags = _.pull(tags, value);\n return $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n };\n saveInputTag = function() {\n var value;\n value = $el.find(\"input\").val();\n addValue(value);\n resetInput();\n return hideSaveButton();\n };\n removeInputLastCharacter = (function(_this) {\n return function(input) {\n var inputValue;\n inputValue = input.val();\n return input.val(inputValue.substring(0, inputValue.length - 1));\n };\n })(this);\n $el.on(\"keypress\", \"input\", function(event) {\n if (event.keyCode !== ENTER_KEY) {\n return;\n }\n return event.preventDefault();\n });\n $el.on(\"keyup\", \"input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === ENTER_KEY) {\n return saveInputTag();\n } else if (event.keyCode === COMMA_KEY) {\n removeInputLastCharacter(target);\n return saveInputTag();\n } else {\n if (target.val().length) {\n return showSaveButton();\n } else {\n return hideSaveButton();\n }\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return saveInputTag();\n });\n $el.on(\"click\", \".icon-delete\", function(event) {\n var target, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n value = target.siblings(\".tag-name\").text();\n return deleteValue(value);\n });\n bindOnce($scope, \"project\", function(project) {\n var positioningFunction;\n positioningFunction = function(position, elements) {\n var menu;\n menu = elements.element.element;\n menu.css(\"width\", elements.target.width);\n menu.css(\"top\", position.top);\n return menu.css(\"left\", position.left);\n };\n return $el.find(\"input\").autocomplete({\n source: _.keys(project.tags_colors),\n position: {\n my: \"left top\",\n using: positioningFunction\n },\n select: function(event, ui) {\n addValue(ui.item.value);\n return ui.item.value = \"\";\n }\n });\n });\n $scope.$watch($attrs.ngModel, function(tags) {\n var tagsColors, _ref;\n tagsColors = ((_ref = $scope.project) != null ? _ref.tags_colors : void 0) || [];\n return renderTags(tags, tagsColors);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgLbTagLine\", [\"$tgResources\", LbTagLineDirective]);\n\n TagLineDirective = function($rootScope, $repo, $rs, $confirm, $qqueue) {\n var COMMA_KEY, ENTER_KEY, ESC_KEY, link, template, templateTags;\n ENTER_KEY = 13;\n ESC_KEY = 27;\n COMMA_KEY = 188;\n template = \"
    \\n\\n \\n Add tag\\n\\n\\n\";\n templateTags = _.template(\"<% _.each(tags, function(tag) { %>\\n ;\\\">\\n <%- tag.name %>\\n <% if (isEditable) { %>\\n \\n <% } %>\\n \\n<% }); %>\");\n link = function($scope, $el, $attrs, $model) {\n var addValue, deleteValue, hideAddTagButton, hideAddTagButtonText, hideInput, hideSaveButton, isEditable, removeInputLastCharacter, renderInReadModeOnly, renderTags, resetInput, saveInputTag, showAddTagButton, showAddTagButtonText, showInput, showSaveButton;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) !== -1;\n };\n renderTags = function(tags, tagsColors) {\n var ctx, html;\n ctx = {\n tags: _.map(tags, function(t) {\n return {\n name: t,\n color: tagsColors[t]\n };\n }),\n isEditable: isEditable()\n };\n html = templateTags(ctx);\n return $el.find(\"div.tags-container\").html(html);\n };\n renderInReadModeOnly = function() {\n $el.find(\".add-tag\").remove();\n $el.find(\"input\").remove();\n return $el.find(\".save\").remove();\n };\n showAddTagButton = function() {\n return $el.find(\".add-tag\").removeClass(\"hidden\");\n };\n hideAddTagButton = function() {\n return $el.find(\".add-tag\").addClass(\"hidden\");\n };\n showAddTagButtonText = function() {\n return $el.find(\".add-tag-text\").removeClass(\"hidden\");\n };\n hideAddTagButtonText = function() {\n return $el.find(\".add-tag-text\").addClass(\"hidden\");\n };\n showSaveButton = function() {\n return $el.find(\".save\").removeClass(\"hidden\");\n };\n hideSaveButton = function() {\n return $el.find(\".save\").addClass(\"hidden\");\n };\n showInput = function() {\n return $el.find(\"input\").removeClass(\"hidden\").focus();\n };\n hideInput = function() {\n return $el.find(\"input\").addClass(\"hidden\").blur();\n };\n resetInput = function() {\n $el.find(\"input\").val(\"\");\n return $el.find(\"input\").autocomplete(\"close\");\n };\n addValue = $qqueue.bindAdd(function(value) {\n var model, onError, onSuccess, tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue.tags, false);\n if (tags == null) {\n tags = [];\n }\n if (__indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n model = $model.$modelValue.clone();\n model.tags = tags;\n $model.$setViewValue(model);\n onSuccess = function() {\n return $rootScope.$broadcast(\"history:reload\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n model.revert();\n return $model.$setViewValue(model);\n };\n return $repo.save(model).then(onSuccess, onError);\n });\n deleteValue = $qqueue.bindAdd(function(value) {\n var model, onError, onSuccess, tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue.tags, false);\n tags = _.pull(tags, value);\n model = $model.$modelValue.clone();\n model.tags = tags;\n $model.$setViewValue(model);\n onSuccess = function() {\n return $rootScope.$broadcast(\"history:reload\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n model.revert();\n return $model.$setViewValue(model);\n };\n return $repo.save(model).then(onSuccess, onError);\n });\n saveInputTag = function() {\n var value;\n value = $el.find(\"input\").val();\n addValue(value);\n resetInput();\n return hideSaveButton();\n };\n removeInputLastCharacter = (function(_this) {\n return function(input) {\n var inputValue;\n inputValue = input.val();\n return input.val(inputValue.substring(0, inputValue.length - 1));\n };\n })(this);\n $el.on(\"keypress\", \"input\", function(event) {\n var _ref;\n if ((_ref = event.keyCode) !== ENTER_KEY && _ref !== ESC_KEY) {\n return;\n }\n return event.preventDefault();\n });\n $el.on(\"keyup\", \"input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === ENTER_KEY) {\n return saveInputTag();\n } else if (event.keyCode === COMMA_KEY) {\n removeInputLastCharacter(target);\n return saveInputTag();\n } else if (event.keyCode === ESC_KEY) {\n resetInput();\n hideInput();\n hideSaveButton();\n return showAddTagButton();\n } else {\n if (target.val().length) {\n return showSaveButton();\n } else {\n return hideSaveButton();\n }\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return saveInputTag();\n });\n $el.on(\"click\", \".add-tag\", function(event) {\n event.preventDefault();\n hideAddTagButton();\n return showInput();\n });\n $el.on(\"click\", \".icon-delete\", function(event) {\n var target, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n value = target.siblings(\".tag-name\").text();\n return deleteValue(value);\n });\n bindOnce($scope, \"project\", function(project) {\n var positioningFunction;\n if (!isEditable()) {\n renderInReadModeOnly();\n return;\n }\n showAddTagButton();\n positioningFunction = function(position, elements) {\n var menu;\n menu = elements.element.element;\n menu.css(\"width\", elements.target.width);\n menu.css(\"top\", position.top);\n return menu.css(\"left\", position.left);\n };\n return $el.find(\"input\").autocomplete({\n source: _.keys(project.tags_colors),\n position: {\n my: \"left top\",\n using: positioningFunction\n },\n select: function(event, ui) {\n addValue(ui.item.value);\n return ui.item.value = \"\";\n }\n });\n });\n $scope.$watch($attrs.ngModel, function(model) {\n var tagsColors, _ref, _ref1;\n if (!model) {\n return;\n }\n if ((_ref = model.tags) != null ? _ref.length : void 0) {\n hideAddTagButtonText();\n } else {\n showAddTagButtonText();\n }\n tagsColors = ((_ref1 = $scope.project) != null ? _ref1.tags_colors : void 0) || [];\n return renderTags(model.tags, tagsColors);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgTagLine\", [\"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$tgQqueue\", TagLineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/wisiwyg.coffee\n */\n\n(function() {\n var bindOnce, module, taiga, tgMarkitupDirective;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n tgMarkitupDirective = function($rootscope, $rs, $tr, $selectedText) {\n var link, previewTemplate;\n previewTemplate = _.template(\"
    \\n
    \\n \\n
    \\n
    \\n <%= data %>\\n
    \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var closePreviewMode, element, markdownCaretPositon, markdownSettings, markdownTitle, preview, previewDomNode, removeEmptyLine, setCaretPosition;\n element = angular.element($el);\n previewDomNode = $(\"
    \", {\n \"class\": \"preview\"\n });\n closePreviewMode = function() {\n element.parents(\".markdown\").find(\".preview\").remove();\n return element.parents(\".markItUp\").show();\n };\n $scope.$on(\"markdown-editor:submit\", function() {\n return closePreviewMode();\n });\n preview = function() {\n var markItUpDomNode, markdownDomNode;\n markdownDomNode = element.parents(\".markdown\");\n markItUpDomNode = element.parents(\".markItUp\");\n return $rs.mdrender.render($scope.projectId, $model.$modelValue).then(function(data) {\n var markdown;\n markdownDomNode.append(previewTemplate({\n data: data.data\n }));\n markItUpDomNode.hide();\n markdown = element.closest(\".markdown\");\n return markdown.on(\"mouseup.preview\", \".preview\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.target);\n if (!target.is('a') && $selectedText.get().length) {\n return;\n }\n markdown.off(\".preview\");\n return closePreviewMode();\n });\n });\n };\n markdownCaretPositon = false;\n setCaretPosition = function(elm, caretPos) {\n var range;\n if (elm.createTextRange) {\n range = elm.createTextRange();\n range.move(\"character\", caretPos);\n return range.select();\n } else if (elm.selectionStart) {\n elm.focus();\n return elm.setSelectionRange(caretPos, caretPos);\n }\n };\n removeEmptyLine = function(textarea, line, currentCaretPosition) {\n var lines, removedLineLength;\n lines = textarea.value.split(\"\\n\");\n removedLineLength = lines[line].length;\n lines[line] = \"\";\n textarea.value = lines.join(\"\\n\");\n return currentCaretPosition - removedLineLength + 1;\n };\n markdownSettings = {\n nameSpace: \"markdown\",\n onShiftEnter: {\n keepDefault: false,\n openWith: \"\\n\\n\"\n },\n onEnter: {\n keepDefault: false,\n replaceWith: (function(_this) {\n return function(data) {\n var breakLineAtBeginning, cursorLine, emptyListItem, lastLine, lines, match, newLineContent;\n lines = data.textarea.value.split(\"\\n\");\n cursorLine = data.textarea.value.slice(0, +(data.caretPosition - 1) + 1 || 9e9).split(\"\\n\").length;\n newLineContent = data.textarea.value.slice(data.caretPosition).split(\"\\n\")[0];\n lastLine = lines[cursorLine - 1];\n match = lastLine.match(/^(\\s*- ).*/);\n if (match) {\n emptyListItem = lastLine.match(/^(\\s*)\\-\\s$/);\n if (emptyListItem) {\n markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition);\n } else {\n breakLineAtBeginning = newLineContent.match(/^(\\s*)\\-\\s/);\n if (!breakLineAtBeginning) {\n if (match) {\n return \"\\n\" + match[1];\n }\n }\n }\n }\n match = lastLine.match(/^(\\s*\\* ).*/);\n if (match) {\n emptyListItem = lastLine.match(/^(\\s*\\* )$/);\n if (emptyListItem) {\n markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition);\n } else {\n breakLineAtBeginning = newLineContent.match(/^(\\s*)\\*\\s/);\n if (!breakLineAtBeginning) {\n if (match) {\n return \"\\n\" + match[1];\n }\n }\n }\n }\n match = lastLine.match(/^(\\s*)(\\d+)\\.\\s/);\n if (match) {\n emptyListItem = lastLine.match(/^(\\s*)(\\d+)\\.\\s$/);\n if (emptyListItem) {\n markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition);\n } else {\n breakLineAtBeginning = newLineContent.match(/^(\\s*)(\\d+)\\.\\s/);\n if (!breakLineAtBeginning) {\n return \"\\n\" + (match[1] + (parseInt(match[2], 10) + 1)) + \". \";\n }\n }\n }\n return \"\\n\";\n };\n })(this),\n afterInsert: function(data) {\n var caretPosition, line, scrollRelation, totalLines;\n if (markdownCaretPositon) {\n setCaretPosition(data.textarea, markdownCaretPositon);\n caretPosition = markdownCaretPositon;\n markdownCaretPositon = false;\n } else {\n caretPosition = data.caretPosition;\n }\n totalLines = data.textarea.value.split(\"\\n\").length;\n line = data.textarea.value.slice(0, +(caretPosition - 1) + 1 || 9e9).split(\"\\n\").length;\n scrollRelation = line / totalLines;\n return $el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2));\n }\n },\n markupSet: [\n {\n name: $tr.t(\"markdown-editor.heading-1\"),\n key: \"1\",\n placeHolder: $tr.t(\"markdown-editor.placeholder\"),\n closeWith: function(markItUp) {\n return markdownTitle(markItUp, \"=\");\n }\n }, {\n name: $tr.t(\"markdown-editor.heading-2\"),\n key: \"2\",\n placeHolder: $tr.t(\"markdown-editor.placeholder\"),\n closeWith: function(markItUp) {\n return markdownTitle(markItUp, \"-\");\n }\n }, {\n name: $tr.t(\"markdown-editor.heading-3\"),\n key: \"3\",\n openWith: \"### \",\n placeHolder: $tr.t(\"markdown-editor.placeholder\")\n }, {\n separator: \"---------------\"\n }, {\n name: $tr.t(\"markdown-editor.bold\"),\n key: \"B\",\n openWith: \"**\",\n closeWith: \"**\"\n }, {\n name: $tr.t(\"markdown-editor.italic\"),\n key: \"I\",\n openWith: \"_\",\n closeWith: \"_\"\n }, {\n name: $tr.t(\"markdown-editor.strike\"),\n key: \"S\",\n openWith: \"~~\",\n closeWith: \"~~\"\n }, {\n separator: \"---------------\"\n }, {\n name: $tr.t(\"markdown-editor.bulleted-list\"),\n openWith: \"- \"\n }, {\n name: $tr.t(\"markdown-editor.numeric-list\"),\n openWith: function(markItUp) {\n return markItUp.line + \". \";\n }\n }, {\n separator: \"---------------\"\n }, {\n name: $tr.t(\"markdown-editor.picture\"),\n key: \"P\",\n replaceWith: '![[![Alternative text]!]]([![Url:!:http://]!] \"[![Title]!]\")'\n }, {\n name: $tr.t(\"markdown-editor.link\"),\n key: \"L\",\n openWith: \"[\",\n closeWith: ']([![Url:!:http://]!] \"[![Title]!]\")',\n placeHolder: $tr.t(\"markdown-editor.link-placeholder\")\n }, {\n separator: \"---------------\"\n }, {\n name: $tr.t(\"markdown-editor.quotes\"),\n openWith: \"> \"\n }, {\n name: $tr.t(\"markdown-editor.code-block\"),\n openWith: \"```\\n\",\n closeWith: \"\\n```\"\n }, {\n separator: \"---------------\"\n }, {\n name: $tr.t(\"markdown-editor.preview\"),\n call: preview,\n className: \"preview-icon\"\n }\n ],\n afterInsert: function(event) {\n var target;\n target = angular.element(event.textarea);\n return $model.$setViewValue(target.val());\n }\n };\n markdownTitle = function(markItUp, char) {\n var heading, i, n, _i, _ref;\n heading = \"\";\n n = $.trim(markItUp.selection || markItUp.placeHolder).length;\n for (i = _i = 0, _ref = n - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {\n heading += char;\n }\n return \"\\n\" + heading + \"\\n\";\n };\n element.markItUp(markdownSettings);\n element.on(\"keypress\", function(event) {\n return $scope.$apply();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgMarkitup\", [\"$rootScope\", \"$tgResources\", \"$tgI18n\", \"$selectedText\", tgMarkitupDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/main.coffee\n */\n\n(function() {\n var BacklogFiltersDirective, bindOnce, debounceLeading, groupBy, mixOf, module, scopeDefer, taiga, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogFiltersDirective = function($log, $location) {\n var link, template, templateSelected;\n template = _.template(\"<% _.each(filters, function(f) { %>\\n <% if (f.selected) { %>\\n \\\"\\n data-id=\\\"<%- f.id %>\\\">\\n style=\\\"border-left: 3px solid <%- f.color %>;\\\"<% } %>>\\n <%- f.name %>\\n \\n <%- f.count %>\\n \\n <% } else { %>\\n \\\"\\n data-id=\\\"<%- f.id %>\\\">\\n style=\\\"border-left: 3px solid <%- f.color %>;\\\"<% } %>>\\n <%- f.name %>\\n \\n <%- f.count %>\\n \\n <% } %>\\n<% }) %>\");\n templateSelected = _.template(\"<% _.each(filters, function(f) { %>\\n\\\"\\n data-id=\\\"<%- f.id %>\\\">\\n style=\\\"border-left: 3px solid <%- f.color %>;\\\"<% } %>>\\n <%- f.name %>\\n \\n\\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var $ctrl, initializeSelectedFilters, renderFilters, renderSelectedFilters, selectQFilter, selectedFilters, showCategories, showFilters, toggleFilterSelection;\n $ctrl = $el.closest(\".wrapper\").controller();\n selectedFilters = [];\n showFilters = function(title, type) {\n $el.find(\".filters-cats\").hide();\n $el.find(\".filter-list\").removeClass(\"hidden\");\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\");\n $el.find(\"h2 a.subfilter span.title\").html(title);\n return $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type);\n };\n showCategories = function() {\n $el.find(\".filters-cats\").show();\n $el.find(\".filter-list\").addClass(\"hidden\");\n return $el.find(\"h2.breadcrumb\").addClass(\"hidden\");\n };\n initializeSelectedFilters = function(filters) {\n var name, val, values, _i, _len;\n showCategories();\n selectedFilters = [];\n for (name in filters) {\n values = filters[name];\n for (_i = 0, _len = values.length; _i < _len; _i++) {\n val = values[_i];\n if (val.selected) {\n selectedFilters.push(val);\n }\n }\n }\n return renderSelectedFilters();\n };\n renderSelectedFilters = function() {\n var html;\n html = templateSelected({\n filters: selectedFilters\n });\n return $el.find(\".filters-applied\").html(html);\n };\n renderFilters = function(filters) {\n var html;\n html = template({\n filters: filters\n });\n return $el.find(\".filter-list\").html(html);\n };\n toggleFilterSelection = function(type, id) {\n var currentFiltersType, filter, filters;\n filters = $scope.filters[type];\n filter = _.find(filters, {\n id: taiga.toString(id)\n });\n filter.selected = !filter.selected;\n if (filter.selected) {\n selectedFilters.push(filter);\n $scope.$apply(function() {\n $ctrl.selectFilter(type, id);\n return $ctrl.filterVisibleUserstories();\n });\n } else {\n selectedFilters = _.reject(selectedFilters, filter);\n $scope.$apply(function() {\n $ctrl.unselectFilter(type, id);\n return $ctrl.filterVisibleUserstories();\n });\n }\n renderSelectedFilters(selectedFilters);\n currentFiltersType = $el.find(\"h2 a.subfilter span.title\").prop('data-type');\n if (type === currentFiltersType) {\n renderFilters(_.reject(filters, \"selected\"));\n }\n return $ctrl.loadUserstories();\n };\n selectQFilter = debounceLeading(100, function(value) {\n if (value === void 0) {\n return;\n }\n if (value.length === 0) {\n $ctrl.replaceFilter(\"q\", null);\n } else {\n $ctrl.replaceFilter(\"q\", value);\n }\n return $ctrl.loadUserstories();\n });\n $scope.$watch(\"filtersQ\", selectQFilter);\n $scope.$on(\"filters:loaded\", function(ctx, filters) {\n return initializeSelectedFilters(filters);\n });\n $el.on(\"click\", \".filters-cats > ul > li > a\", function(event) {\n var tags, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n tags = $scope.filters[target.data(\"type\")];\n renderFilters(_.reject(tags, \"selected\"));\n return showFilters(target.attr(\"title\"), target.data(\"type\"));\n });\n $el.on(\"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", function(event) {\n event.preventDefault();\n return showCategories();\n });\n $el.on(\"click\", \".filters-applied a\", function(event) {\n var id, target, type;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n id = target.data(\"id\");\n type = target.data(\"type\");\n return toggleFilterSelection(type, id);\n });\n return $el.on(\"click\", \".filter-list .single-filter\", function(event) {\n var id, target, type;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n if (target.hasClass(\"active\")) {\n target.removeClass(\"active\");\n } else {\n target.addClass(\"active\");\n }\n id = target.data(\"id\");\n type = target.data(\"type\");\n return toggleFilterSelection(type, id);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogFilters\", [\"$log\", \"$tgLocation\", BacklogFiltersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/lightboxes.coffee\n */\n\n(function() {\n var CreateEditSprint, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaBacklog\");\n\n CreateEditSprint = function($repo, $confirm, $rs, $rootscope, lightboxService, $loading) {\n var link;\n link = function($scope, $el, attrs) {\n var createSprint, hasErrors, remove, submit, submitButton;\n hasErrors = false;\n createSprint = true;\n $scope.sprint = {\n project: null,\n name: null,\n estimated_start: null,\n estimated_finish: null\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var broadcastEvent, form, newSprint, promise, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n hasErrors = true;\n $el.find(\".last-sprint-name\").addClass(\"disappear\");\n return;\n }\n hasErrors = false;\n newSprint = angular.copy($scope.sprint);\n broadcastEvent = null;\n if (createSprint) {\n newSprint.estimated_start = moment(newSprint.estimated_start).format(\"YYYY-MM-DD\");\n newSprint.estimated_finish = moment(newSprint.estimated_finish).format(\"YYYY-MM-DD\");\n promise = $repo.create(\"milestones\", newSprint);\n broadcastEvent = \"sprintform:create:success\";\n } else {\n newSprint.setAttr(\"estimated_start\", moment(newSprint.estimated_start).format(\"YYYY-MM-DD\"));\n newSprint.setAttr(\"estimated_finish\", moment(newSprint.estimated_finish).format(\"YYYY-MM-DD\"));\n promise = $repo.save(newSprint);\n broadcastEvent = \"sprintform:edit:success\";\n }\n $loading.start(submitButton);\n promise.then(function(data) {\n $loading.finish(submitButton);\n if (createSprint) {\n $scope.sprintsCounter += 1;\n }\n $rootscope.$broadcast(broadcastEvent, data);\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"light-error\", data._error_message);\n } else if (data.__all__) {\n return $confirm.notify(\"light-error\", data.__all__[0]);\n }\n });\n };\n })(this));\n remove = function() {\n var message, title;\n title = \"Delete sprint\";\n message = $scope.sprint.name;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var onError, onSuccess;\n onSuccess = function() {\n finish();\n $scope.milestonesCounter -= 1;\n lightboxService.close($el);\n return $rootscope.$broadcast(\"sprintform:remove:success\");\n };\n onError = function() {\n finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.remove($scope.sprint).then(onSuccess, onError);\n };\n })(this));\n };\n $scope.$on(\"sprintform:create\", function(event, projectId) {\n var estimatedFinish, estimatedStart, lastSprint, lastSprintNameDom;\n createSprint = true;\n $scope.sprint.project = projectId;\n $scope.sprint.name = null;\n $scope.sprint.slug = null;\n lastSprint = $scope.sprints[0];\n estimatedStart = moment();\n if ($scope.sprint.estimated_start) {\n estimatedStart = moment($scope.sprint.estimated_start);\n } else if (lastSprint != null) {\n estimatedStart = moment(lastSprint.estimated_finish);\n }\n $scope.sprint.estimated_start = estimatedStart.format(\"DD MMM YYYY\");\n estimatedFinish = moment().add(2, \"weeks\");\n if ($scope.sprint.estimated_finish) {\n estimatedFinish = moment($scope.sprint.estimated_finish);\n } else if (lastSprint != null) {\n estimatedFinish = moment(lastSprint.estimated_finish).add(2, \"weeks\");\n }\n $scope.sprint.estimated_finish = estimatedFinish.format(\"DD MMM YYYY\");\n lastSprintNameDom = $el.find(\".last-sprint-name\");\n if ((lastSprint != null ? lastSprint.name : void 0) != null) {\n lastSprintNameDom.html(\" last sprint is \" + lastSprint.name + \" ;-) \");\n }\n $el.find(\".delete-sprint\").addClass(\"hidden\");\n $el.find(\".title\").text(\"New sprint\");\n $el.find(\".button-green\").text(\"Create\");\n lightboxService.open($el);\n return $el.find(\".sprint-name\").focus();\n });\n $scope.$on(\"sprintform:edit\", function(ctx, sprint) {\n createSprint = false;\n $scope.$apply(function() {\n $scope.sprint = sprint;\n $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(\"DD MMM YYYY\");\n return $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format(\"DD MMM YYYY\");\n });\n $el.find(\".delete-sprint\").removeClass(\"hidden\");\n $el.find(\".title\").text(\"Edit sprint\");\n $el.find(\".button-green\").text(\"Save\");\n lightboxService.open($el);\n $el.find(\".sprint-name\").focus().select();\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n });\n $el.on(\"keyup\", \".sprint-name\", function(event) {\n if ($el.find(\".sprint-name\").val().length > 0 || hasErrors) {\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n } else {\n return $el.find(\".last-sprint-name\").removeClass(\"disappear\");\n }\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n $el.on(\"click\", \".delete-sprint .icon-delete\", function(event) {\n event.preventDefault();\n return remove();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEditSprint\", [\"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", CreateEditSprint]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/main.coffee\n */\n\n(function() {\n var BacklogController, BacklogDirective, TgBacklogProgressBarDirective, UsPointsDirective, UsRolePointsSelectorDirective, bindMethods, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, tgBacklogGraphDirective, timeout, toggleText,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogController = (function(_super) {\n __extends(BacklogController, _super);\n\n BacklogController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$appTitle\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"tgLoader\"];\n\n function BacklogController(scope, rootscope, repo, confirm, rs, params, q, location, appTitle, navUrls, events, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n bindMethods(this);\n this.scope.sectionName = \"Backlog\";\n this.showTags = false;\n this.activeFilters = false;\n this.excludeClosedSprints = true;\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this.appTitle.set(\"Backlog - \" + _this.scope.project.name);\n if (_this.rs.userstories.getShowTags(_this.scope.projectId)) {\n _this.showTags = true;\n return _this.scope.$broadcast(\"showTags\", _this.showTags);\n }\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n BacklogController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function() {\n _this.loadUserstories();\n _this.loadProjectStats();\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:create:success\", (function(_this) {\n return function() {\n _this.loadSprints();\n _this.loadProjectStats();\n return _this.analytics.trackEvent(\"sprint\", \"create\", \"create sprint on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function() {\n _this.loadUserstories();\n _this.loadProjectStats();\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:edit:success\", (function(_this) {\n return function() {\n return _this.loadProjectStats();\n };\n })(this));\n this.scope.$on(\"sprintform:remove:success\", (function(_this) {\n return function() {\n _this.loadSprints();\n _this.loadProjectStats();\n return _this.loadUserstories();\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function() {\n return _this.loadUserstories();\n };\n })(this));\n this.scope.$on(\"sprint:us:move\", this.moveUs);\n this.scope.$on(\"sprint:us:moved\", this.loadSprints);\n this.scope.$on(\"sprint:us:moved\", this.loadProjectStats);\n return this.scope.$on(\"backlog:toggle-closed-sprints-visualization\", this.toggleClosedSprintsVisualization);\n };\n\n BacklogController.prototype.initializeSubscription = function() {\n var routingKey1, routingKey2;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.loadUserstories();\n return _this.loadSprints();\n };\n })(this));\n routingKey2 = \"changes.project.\" + this.scope.projectId + \".milestones\";\n return this.events.subscribe(this.scope, routingKey2, (function(_this) {\n return function(message) {\n return _this.loadSprints();\n };\n })(this));\n };\n\n BacklogController.prototype.toggleShowTags = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n _this.showTags = !_this.showTags;\n return _this.rs.userstories.storeShowTags(_this.scope.projectId, _this.showTags);\n };\n })(this));\n };\n\n BacklogController.prototype.toggleActiveFilters = function() {\n return this.activeFilters = !this.activeFilters;\n };\n\n BacklogController.prototype.loadProjectStats = function() {\n return this.rs.projects.stats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n _this.scope.stats = stats;\n if (stats.total_points) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.closed_points / stats.total_points);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n return stats;\n };\n })(this));\n };\n\n BacklogController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors;\n };\n })(this));\n };\n\n BacklogController.prototype.loadSprints = function() {\n var params;\n params = {};\n if (this.excludeClosedSprints) {\n params[\"closed\"] = false;\n }\n return this.rs.sprints.list(this.scope.projectId, params).then((function(_this) {\n return function(sprints) {\n var sprint, _i, _len;\n for (_i = 0, _len = sprints.length; _i < _len; _i++) {\n sprint = sprints[_i];\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\");\n }\n _this.scope.sprints = sprints;\n _this.scope.openSprints = _.filter(sprints, function(sprint) {\n return !sprint.closed;\n });\n _this.scope.closedSprints = _.filter(sprints, function(sprint) {\n return sprint.closed;\n });\n _this.scope.sprintsCounter = sprints.length;\n _this.scope.sprintsById = groupBy(sprints, function(x) {\n return x.id;\n });\n _this.rootscope.$broadcast(\"sprints:loaded\", sprints);\n return sprints;\n };\n })(this));\n };\n\n BacklogController.prototype.resetFilters = function() {\n var selectedStatuses, selectedTags;\n selectedTags = _.filter(this.scope.filters.tags, \"selected\");\n selectedStatuses = _.filter(this.scope.filters.statuses, \"selected\");\n this.scope.filtersQ = \"\";\n _.each([selectedTags, selectedStatuses], (function(_this) {\n return function(filterGrp) {\n return _.each(filterGrp, function(item) {\n var filter, filters;\n filters = _this.scope.filters[item.type];\n filter = _.find(filters, {\n id: taiga.toString(item.id)\n });\n filter.selected = false;\n return _this.unselectFilter(item.type, item.id);\n });\n };\n })(this));\n return this.loadUserstories();\n };\n\n BacklogController.prototype.loadUserstories = function() {\n var promise;\n this.scope.httpParams = this.getUrlFilters();\n this.rs.userstories.storeQueryParams(this.scope.projectId, this.scope.httpParams);\n promise = this.q.all([this.refreshTagsColors(), this.rs.userstories.listUnassigned(this.scope.projectId, this.scope.httpParams)]);\n return promise.then((function(_this) {\n return function(data) {\n var userstories;\n userstories = data[1];\n _this.scope.userstories = _.sortBy(userstories, \"backlog_order\");\n _this.generateFilters();\n _this.filterVisibleUserstories();\n _this.rootscope.$broadcast(\"filters:loaded\", _this.scope.filters);\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\");\n });\n return userstories;\n };\n })(this));\n };\n\n BacklogController.prototype.loadBacklog = function() {\n return this.q.all([this.loadProjectStats(), this.loadSprints(), this.loadUserstories()]);\n };\n\n BacklogController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.points = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n _this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"id\");\n return project;\n };\n })(this));\n };\n\n BacklogController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.initializeSubscription();\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadBacklog();\n };\n })(this));\n };\n\n BacklogController.prototype.toggleClosedSprintsVisualization = function() {\n this.excludeClosedSprints = !this.excludeClosedSprints;\n return this.loadSprints();\n };\n\n BacklogController.prototype.filterVisibleUserstories = function() {\n var selectedStatuses, selectedTags;\n this.scope.visibleUserstories = [];\n selectedTags = _.filter(this.scope.filters.tags, \"selected\");\n selectedTags = _.map(selectedTags, \"name\");\n if (selectedTags.length === 0) {\n this.scope.visibleUserstories = _.clone(this.scope.userstories, false);\n } else {\n this.scope.visibleUserstories = _.reject(this.scope.userstories, (function(_this) {\n return function(us) {\n if (_.intersection(selectedTags, us.tags).length === 0) {\n return true;\n }\n return false;\n };\n })(this));\n }\n selectedStatuses = _.filter(this.scope.filters.statuses, \"selected\");\n selectedStatuses = _.map(selectedStatuses, \"id\");\n if (selectedStatuses.length > 0) {\n this.scope.visibleUserstories = _.reject(this.scope.visibleUserstories, (function(_this) {\n return function(us) {\n var res;\n res = _.find(selectedStatuses, function(x) {\n return x === taiga.toString(us.status);\n });\n return !res;\n };\n })(this));\n }\n return this.rs.userstories.storeQueryParams(this.scope.projectId, {\n \"status\": selectedStatuses,\n \"tags\": selectedTags,\n \"project\": this.scope.projectId,\n \"milestone\": null\n });\n };\n\n BacklogController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"backlog_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n BacklogController.prototype.resortUserStories = function(uses, field) {\n var index, item, items, _i, _len;\n if (field == null) {\n field = \"backlog_order\";\n }\n items = [];\n for (index = _i = 0, _len = uses.length; _i < _len; index = ++_i) {\n item = uses[index];\n item[field] = index;\n if (item.isModified()) {\n items.push(item);\n }\n }\n return items;\n };\n\n BacklogController.prototype.moveUs = function(ctx, usList, newUsIndex, newSprintId) {\n var data, items, newSprint, oldSprintId, project, promise, promises, us, userstories, _i, _j, _k, _len, _len1, _len2;\n oldSprintId = usList[0].milestone;\n project = usList[0].project;\n if (newSprintId === oldSprintId) {\n items = null;\n userstories = null;\n if (newSprintId === null) {\n userstories = this.scope.userstories;\n } else {\n userstories = this.scope.sprintsById[newSprintId].user_stories;\n }\n this.scope.$apply(function() {\n var args, key, r, us, _i, _len;\n for (key = _i = 0, _len = usList.length; _i < _len; key = ++_i) {\n us = usList[key];\n r = userstories.indexOf(us);\n userstories.splice(r, 1);\n }\n args = [newUsIndex, 0].concat(usList);\n return Array.prototype.splice.apply(userstories, args);\n });\n if (newSprintId === null) {\n items = this.resortUserStories(userstories, \"backlog_order\");\n data = this.prepareBulkUpdateData(items, \"backlog_order\");\n this.rs.userstories.bulkUpdateBacklogOrder(project, data).then((function(_this) {\n return function() {\n var us, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = usList.length; _i < _len; _i++) {\n us = usList[_i];\n _results.push(_this.rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId));\n }\n return _results;\n };\n })(this));\n } else {\n items = this.resortUserStories(userstories, \"sprint_order\");\n data = this.prepareBulkUpdateData(items, \"sprint_order\");\n this.rs.userstories.bulkUpdateSprintOrder(project, data).then((function(_this) {\n return function() {\n var us, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = usList.length; _i < _len; _i++) {\n us = usList[_i];\n _results.push(_this.rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId));\n }\n return _results;\n };\n })(this));\n }\n return promise;\n }\n if (newSprintId === null) {\n for (_i = 0, _len = usList.length; _i < _len; _i++) {\n us = usList[_i];\n us.milestone = null;\n }\n this.scope.$apply((function(_this) {\n return function() {\n var args, key, r, sprint, _j, _len1, _results;\n args = [newUsIndex, 0].concat(usList);\n Array.prototype.splice.apply(_this.scope.userstories, args);\n Array.prototype.splice.apply(_this.scope.visibleUserstories, args);\n _this.filterVisibleUserstories();\n sprint = _this.scope.sprintsById[oldSprintId];\n _results = [];\n for (key = _j = 0, _len1 = usList.length; _j < _len1; key = ++_j) {\n us = usList[key];\n r = sprint.user_stories.indexOf(us);\n _results.push(sprint.user_stories.splice(r, 1));\n }\n return _results;\n };\n })(this));\n promise = this.repo.save(us);\n promise = promise.then((function(_this) {\n return function() {\n items = _this.resortUserStories(_this.scope.userstories, \"backlog_order\");\n data = _this.prepareBulkUpdateData(items, \"backlog_order\");\n return _this.rs.userstories.bulkUpdateBacklogOrder(us.project, data).then(function() {\n return _this.rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId);\n });\n };\n })(this));\n promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n return promise;\n }\n newSprint = this.scope.sprintsById[newSprintId];\n if (oldSprintId === null) {\n for (_j = 0, _len1 = usList.length; _j < _len1; _j++) {\n us = usList[_j];\n us.milestone = newSprintId;\n }\n this.scope.$apply((function(_this) {\n return function() {\n var args, key, r, _k, _len2, _results;\n args = [newUsIndex, 0].concat(usList);\n Array.prototype.splice.apply(newSprint.user_stories, args);\n _results = [];\n for (key = _k = 0, _len2 = usList.length; _k < _len2; key = ++_k) {\n us = usList[key];\n r = _this.scope.visibleUserstories.indexOf(us);\n _this.scope.visibleUserstories.splice(r, 1);\n r = _this.scope.userstories.indexOf(us);\n _results.push(_this.scope.userstories.splice(r, 1));\n }\n return _results;\n };\n })(this));\n } else {\n for (_k = 0, _len2 = usList.length; _k < _len2; _k++) {\n us = usList[_k];\n us.milestone = newSprintId;\n }\n this.scope.$apply((function(_this) {\n return function() {\n var args, oldSprint, r, _l, _len3, _results;\n args = [newUsIndex, 0].concat(usList);\n Array.prototype.splice.apply(newSprint.user_stories, args);\n _results = [];\n for (_l = 0, _len3 = usList.length; _l < _len3; _l++) {\n us = usList[_l];\n oldSprint = _this.scope.sprintsById[oldSprintId];\n r = oldSprint.user_stories.indexOf(us);\n _results.push(oldSprint.user_stories.splice(r, 1));\n }\n return _results;\n };\n })(this));\n }\n promises = _.map(usList, (function(_this) {\n return function(us) {\n return _this.repo.save(us);\n };\n })(this));\n promise = this.q.all(promises).then((function(_this) {\n return function() {\n items = _this.resortUserStories(newSprint.user_stories, \"sprint_order\");\n data = _this.prepareBulkUpdateData(items, \"sprint_order\");\n _this.rs.userstories.bulkUpdateSprintOrder(project, data).then(function() {\n return _this.rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId);\n });\n return _this.rs.userstories.bulkUpdateBacklogOrder(project, data).then(function() {\n var _l, _len3, _results;\n _results = [];\n for (_l = 0, _len3 = usList.length; _l < _len3; _l++) {\n us = usList[_l];\n _results.push(_this.rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId));\n }\n return _results;\n });\n };\n })(this));\n promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n return promise;\n };\n\n BacklogController.prototype.getUrlFilters = function() {\n return _.pick(this.location.search(), \"statuses\", \"tags\", \"q\");\n };\n\n BacklogController.prototype.generateFilters = function() {\n var isSelected, name, plainStatuses, plainTags, searchdata, urlfilters, val, value, _i, _len, _ref;\n urlfilters = this.getUrlFilters();\n if (urlfilters.q) {\n this.scope.filtersQ = urlfilters.q;\n }\n searchdata = {};\n for (name in urlfilters) {\n value = urlfilters[name];\n if (searchdata[name] == null) {\n searchdata[name] = {};\n }\n _ref = taiga.toString(value).split(\",\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n val = _ref[_i];\n searchdata[name][val] = true;\n }\n }\n isSelected = function(type, id) {\n if ((searchdata[type] != null) && searchdata[type][id]) {\n return true;\n }\n return false;\n };\n this.scope.filters = {};\n plainTags = _.flatten(_.filter(_.map(this.scope.userstories, \"tags\")));\n plainTags.sort();\n this.scope.filters.tags = _.map(_.countBy(plainTags), (function(_this) {\n return function(v, k) {\n var obj;\n obj = {\n id: k,\n type: \"tags\",\n name: k,\n color: _this.scope.project.tags_colors[k],\n count: v\n };\n if (isSelected(\"tags\", obj.id)) {\n obj.selected = true;\n }\n return obj;\n };\n })(this));\n plainStatuses = _.map(this.scope.userstories, \"status\");\n plainStatuses = _.filter(plainStatuses, (function(_this) {\n return function(status) {\n if (status) {\n return status;\n }\n };\n })(this));\n this.scope.filters.statuses = _.map(_.countBy(plainStatuses), (function(_this) {\n return function(v, k) {\n var obj;\n obj = {\n id: k,\n type: \"statuses\",\n name: _this.scope.usStatusById[k].name,\n color: _this.scope.usStatusById[k].color,\n count: v\n };\n if (isSelected(\"statuses\", obj.id)) {\n obj.selected = true;\n }\n return obj;\n };\n })(this));\n return this.scope.filters;\n };\n\n BacklogController.prototype.editUserStory = function(us) {\n return this.rootscope.$broadcast(\"usform:edit\", us);\n };\n\n BacklogController.prototype.deleteUserStory = function(us) {\n var message, title;\n title = \"Delete User Story\";\n message = us.subject;\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var promise;\n _this.scope.userstories = _.without(_this.scope.userstories, us);\n _this.filterVisibleUserstories();\n promise = _this.repo.remove(us);\n promise.then(function() {\n finish();\n return _this.loadBacklog();\n });\n return promise.then(null, function() {\n finish(false);\n return _this.confirm.notify(\"error\");\n });\n };\n })(this));\n };\n\n BacklogController.prototype.addNewUs = function(type) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"usform:new\", this.scope.projectId, this.scope.project.default_us_status, this.scope.usStatusList);\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, this.scope.project.default_us_status);\n }\n };\n\n BacklogController.prototype.addNewSprint = function() {\n return this.rootscope.$broadcast(\"sprintform:create\", this.scope.projectId);\n };\n\n return BacklogController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"BacklogController\", BacklogController);\n\n BacklogDirective = function($repo, $rootscope) {\n var doomLineTemplate, link, linkDoomLine, linkFilters, linkToolbar, showHideFilter, showHideTags;\n doomLineTemplate = _.template(\"
    Project Scope [Doomline]
    \");\n linkDoomLine = function($scope, $el, $attrs, $ctrl) {\n var addDoomLineDom, getUsItems, reloadDoomLine, removeDoomlineDom;\n reloadDoomLine = function() {\n var current_sum, element, elements, scope, stats, total_points, _i, _len, _results;\n if ($scope.stats != null) {\n removeDoomlineDom();\n elements = getUsItems();\n stats = $scope.stats;\n total_points = stats.total_points;\n current_sum = stats.assigned_points;\n _results = [];\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n element = elements[_i];\n scope = element.scope();\n if (scope.us == null) {\n continue;\n }\n current_sum += scope.us.total_points;\n if (current_sum > total_points) {\n addDoomLineDom(element);\n break;\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n }\n };\n removeDoomlineDom = function() {\n return $el.find(\".doom-line\").remove();\n };\n addDoomLineDom = function(element) {\n return element != null ? element.before(doomLineTemplate({})) : void 0;\n };\n getUsItems = function() {\n var rowElements;\n rowElements = $el.find('.backlog-table-body .us-item-row');\n return _.map(rowElements, function(x) {\n return angular.element(x);\n });\n };\n $scope.$on(\"userstories:loaded\", reloadDoomLine);\n return $scope.$watch(\"stats\", reloadDoomLine);\n };\n linkToolbar = function($scope, $el, $attrs, $ctrl) {\n var moveToCurrentSprint;\n moveToCurrentSprint = function(selectedUss) {\n var extraPoints, totalExtraPoints, ussCurrent;\n ussCurrent = _($scope.userstories);\n $scope.userstories = ussCurrent.without.apply(ussCurrent, selectedUss).value();\n extraPoints = _.map(selectedUss, function(v, k) {\n return v.total_points;\n });\n totalExtraPoints = _.reduce(extraPoints, function(acc, num) {\n return acc + num;\n });\n $scope.sprints[0].user_stories = _.union($scope.sprints[0].user_stories, selectedUss);\n $scope.sprints[0].total_points += totalExtraPoints;\n $ctrl.filterVisibleUserstories();\n return $repo.saveAll(selectedUss).then(function() {\n $ctrl.loadSprints();\n return $ctrl.loadProjectStats();\n });\n };\n $el.on(\"change\", \".backlog-table-body .user-stories input:checkbox\", function(event) {\n var moveToCurrentSprintDom, selectedUsDom, target;\n target = angular.element(event.currentTarget);\n moveToCurrentSprintDom = $el.find(\"#move-to-current-sprint\");\n selectedUsDom = $el.find(\".backlog-table-body .user-stories input:checkbox:checked\");\n if (selectedUsDom.length > 0 && $scope.sprints.length > 0) {\n moveToCurrentSprintDom.show();\n } else {\n moveToCurrentSprintDom.hide();\n }\n return target.closest('.us-item-row').toggleClass('ui-multisortable-multiple');\n });\n $el.on(\"click\", \"#move-to-current-sprint\", (function(_this) {\n return function(event) {\n var ussDom, ussToMove;\n ussDom = $el.find(\".backlog-table-body .user-stories input:checkbox:checked\");\n ussToMove = _.map(ussDom, function(item) {\n var itemScope;\n itemScope = angular.element(item).scope();\n itemScope.us.milestone = $scope.sprints[0].id;\n return itemScope.us;\n });\n return $scope.$apply(_.partial(moveToCurrentSprint, ussToMove));\n };\n })(this));\n return $el.on(\"click\", \"#show-tags\", function(event) {\n event.preventDefault();\n $ctrl.toggleShowTags();\n return showHideTags($ctrl);\n });\n };\n showHideTags = function($ctrl) {\n var elm;\n elm = angular.element(\"#show-tags\");\n if ($ctrl.showTags) {\n elm.addClass(\"active\");\n return elm.find(\".text\").text(\"Hide Tags\");\n } else {\n elm.removeClass(\"active\");\n return elm.find(\".text\").text(\"Show Tags\");\n }\n };\n showHideFilter = function($scope, $el, $ctrl) {\n var sidebar, target;\n sidebar = $el.find(\"sidebar.filters-bar\");\n sidebar.one(\"transitionend\", function() {\n return timeout(150, function() {\n $rootscope.$broadcast(\"resize\");\n return $('.burndown').css(\"visibility\", \"visible\");\n });\n });\n target = angular.element(\"#show-filters-button\");\n $('.burndown').css(\"visibility\", \"hidden\");\n sidebar.toggleClass(\"active\");\n target.toggleClass(\"active\");\n toggleText(target.find(\".text\"), [\"Remove Filters\", \"Show Filters\"]);\n if (!sidebar.hasClass(\"active\")) {\n $ctrl.resetFilters();\n }\n return $ctrl.toggleActiveFilters();\n };\n linkFilters = function($scope, $el, $attrs, $ctrl) {\n $scope.filtersSearch = {};\n return $el.on(\"click\", \"#show-filters-button\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n return showHideFilter($scope, $el, $ctrl);\n });\n });\n };\n link = function($scope, $el, $attrs, $rootscope) {\n var $ctrl, filters;\n $ctrl = $el.controller();\n linkToolbar($scope, $el, $attrs, $ctrl);\n linkFilters($scope, $el, $attrs, $ctrl);\n linkDoomLine($scope, $el, $attrs, $ctrl);\n $el.find(\".backlog-table-body\").disableSelection();\n filters = $ctrl.getUrlFilters();\n if (filters.statuses || filters.tags || filters.q) {\n showHideFilter($scope, $el, $ctrl);\n }\n $scope.$on(\"showTags\", function() {\n return showHideTags($ctrl);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklog\", [\"$tgRepo\", \"$rootScope\", BacklogDirective]);\n\n UsRolePointsSelectorDirective = function($rootscope) {\n var link, selectionTemplate;\n selectionTemplate = _.template(\"\");\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n var numberOfRoles, roles;\n roles = _.filter(project.roles, \"computable\");\n numberOfRoles = _.size(roles);\n if (numberOfRoles > 1) {\n return $el.append(selectionTemplate({\n \"roles\": roles\n }));\n } else {\n $el.find(\".icon-arrow-bottom\").remove();\n return $el.find(\".header-points\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n $el.find(\".popover\").popover().close();\n return $el.find(\".header-points\").html(\"\" + roleName + \"/Total\");\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx, roleId) {\n $el.find(\".popover\").popover().close();\n return $el.find(\".header-points\").text(\"Points\");\n });\n $el.on(\"click\", function(event) {\n var target;\n target = angular.element(event.target);\n if (target.is(\"span\") || target.is(\"div\")) {\n event.stopPropagation();\n }\n return $el.find(\".popover\").popover().open();\n });\n $el.on(\"click\", \".clear-selection\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $rootscope.$broadcast(\"uspoints:clear-selection\");\n });\n $el.on(\"click\", \".role\", function(event) {\n var rolScope, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n rolScope = target.scope();\n return $rootscope.$broadcast(\"uspoints:select\", target.data(\"role-id\"), target.text());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsRolePointsSelector\", [\"$rootScope\", UsRolePointsSelectorDirective]);\n\n UsPointsDirective = function($repo) {\n var link, pointsTemplate, rolesTemplate;\n rolesTemplate = _.template(\"\");\n pointsTemplate = _.template(\"\");\n link = function($scope, $el, $attrs) {\n var $ctrl, calculateTotalPoints, computableRoles, numberOfRoles, renderPoints, renderPointsSelector, renderRolesSelector, roles, selectedRoleId, updatePointsRoles, updatingSelectedRoleId, us;\n $ctrl = $el.controller();\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = null;\n selectedRoleId = null;\n numberOfRoles = _.size(us.points);\n if (numberOfRoles === 1) {\n selectedRoleId = _.keys(us.points)[0];\n }\n roles = [];\n updatePointsRoles = function() {\n return roles = _.map(computableRoles, function(role) {\n var pointId, pointObj;\n pointId = us.points[role.id];\n pointObj = $scope.pointsById[pointId];\n role = _.clone(role, true);\n role.points = pointObj.value != null ? pointObj.value : \"?\";\n return role;\n });\n };\n computableRoles = _.filter($scope.project.roles, \"computable\");\n updatePointsRoles();\n if (roles.length === 0) {\n $el.find(\".icon-arrow-bottom\").remove();\n $el.find(\"a.us-points\").addClass(\"not-clickable\");\n }\n renderPointsSelector = function(us, roleId) {\n var html, points;\n points = _.map($scope.project.points, function(point) {\n point = _.clone(point, true);\n point.selected = us.points[roleId] === point.id ? false : true;\n return point;\n });\n html = pointsTemplate({\n \"points\": points\n });\n $el.find(\".popover\").popover().close();\n $el.find(\".pop-points-open\").remove();\n $el.append(html);\n if ($el.find(\".pop-role:visible\").css(\"left\") == null) {\n $el.find(\".pop-points-open\").css(\"left\", \"110px\");\n }\n return $el.find(\".pop-points-open\").popover().open();\n };\n renderRolesSelector = function(us) {\n var html;\n updatePointsRoles();\n html = rolesTemplate({\n \"roles\": roles\n });\n $el.append(html);\n return $el.find(\".pop-role\").popover().open(function() {\n return $(this).remove();\n });\n };\n renderPoints = function(us, roleId) {\n var dom, pointId, pointObj, totalPoints;\n dom = $el.find(\"a > span.points-value\");\n if (roleId === null || numberOfRoles === 1) {\n totalPoints = us.total_points != null ? us.total_points : \"?\";\n dom.text(totalPoints);\n return dom.parent().prop(\"title\", totalPoints);\n } else {\n pointId = us.points[roleId];\n pointObj = $scope.pointsById[pointId];\n dom.html(\"\" + pointObj.name + \" / \" + us.total_points + \"\");\n return dom.parent().prop(\"title\", \"\" + pointObj.name + \" / \" + us.total_points);\n }\n };\n calculateTotalPoints = function() {\n var values;\n values = _.map(us.points, function(v, k) {\n return $scope.pointsById[v].value;\n });\n values = _.filter(values, function(num) {\n return num != null;\n });\n if (values.length === 0) {\n return \"?\";\n }\n return _.reduce(values, function(acc, num) {\n return acc + num;\n });\n };\n $scope.$watch($attrs.tgBacklogUsPoints, function(us) {\n if (us) {\n return renderPoints(us, selectedRoleId);\n }\n });\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n renderPoints(us, roleId);\n return selectedRoleId = roleId;\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx) {\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n renderPoints(us, null);\n return selectedRoleId = null;\n });\n if (roles.length > 0) {\n $el.on(\"click\", \"a.us-points span\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = selectedRoleId;\n if (selectedRoleId != null) {\n return renderPointsSelector(us, selectedRoleId);\n } else {\n return renderRolesSelector(us);\n }\n });\n $el.on(\"click\", \".role\", function(event) {\n var popRolesDom, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = target.data(\"role-id\");\n popRolesDom = $el.find(\".pop-role\");\n popRolesDom.find(\"a\").removeClass(\"active\");\n popRolesDom.find(\"a[data-role-id='\" + updatingSelectedRoleId + \"']\").addClass(\"active\");\n return renderPointsSelector(us, updatingSelectedRoleId);\n });\n $el.on(\"click\", \".point\", function(event) {\n var points, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n $el.find(\".pop-points-open\").hide();\n $el.find(\".pop-role\").hide();\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n points = _.clone(us.points, true);\n points[updatingSelectedRoleId] = target.data(\"point-id\");\n return $scope.$apply(function() {\n us.points = points;\n us.total_points = calculateTotalPoints(us);\n renderPoints(us, selectedRoleId);\n return $repo.save(us).then(function() {\n return $repo.refresh(us).then(function() {\n return $ctrl.loadProjectStats();\n });\n });\n });\n });\n }\n bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_us\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogUsPoints\", [\"$tgRepo\", UsPointsDirective]);\n\n tgBacklogGraphDirective = function() {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var client_increment_line, colors, data, evolution_line, milestonesRange, optimal_line, options, team_increment_line, width, zero_line, _i, _ref, _results;\n width = element.width();\n element.height(width / 6);\n milestonesRange = (function() {\n _results = [];\n for (var _i = 0, _ref = dataToDraw.milestones.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n return _results;\n }).apply(this);\n data = [];\n zero_line = _.map(dataToDraw.milestones, function(ml) {\n return 0;\n });\n data.push({\n data: _.zip(milestonesRange, zero_line),\n lines: {\n fillColor: \"rgba(0,0,0,0)\"\n },\n points: {\n show: false\n }\n });\n optimal_line = _.map(dataToDraw.milestones, function(ml) {\n return ml.optimal;\n });\n data.push({\n data: _.zip(milestonesRange, optimal_line),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n evolution_line = _.filter(_.map(dataToDraw.milestones, function(ml) {\n return ml.evolution;\n }), function(evolution) {\n return evolution != null;\n });\n data.push({\n data: _.zip(milestonesRange, evolution_line),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n team_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, team_increment_line),\n lines: {\n fillColor: \"rgba(153,51,51,0.3)\"\n }\n });\n client_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"] - ml[\"client-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, client_increment_line),\n lines: {\n fillColor: \"rgba(255,51,51,0.3)\"\n }\n });\n colors = [\"rgba(0,0,0,1)\", \"rgba(120,120,120,0.2)\", \"rgba(102,153,51,1)\", \"rgba(153,51,51,1)\", \"rgba(255,51,51,1)\"];\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: \"#ccc\"\n },\n xaxis: {\n ticks: dataToDraw.milestones.length,\n axisLabel: \"Sprints\",\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 14,\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\",\n axisLabelPadding: 15,\n tickFormatter: function(val, axis) {\n return \"\";\n }\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: colors\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch(\"stats\", function(value) {\n if ($scope.stats != null) {\n redrawChart(element, $scope.stats);\n return $scope.$on(\"resize\", function() {\n return redrawChart(element, $scope.stats);\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGmBacklogGraph\", tgBacklogGraphDirective);\n\n TgBacklogProgressBarDirective = function() {\n var adjustPercentaje, link, render, template;\n template = _.template(\"
    \\n
    %\\\">
    \\n
    %\\\">
    \");\n render = function(el, projectPointsPercentaje, closedPointsPercentaje) {\n return el.html(template({\n projectPointsPercentaje: projectPointsPercentaje,\n closedPointsPercentaje: closedPointsPercentaje\n }));\n };\n adjustPercentaje = function(percentage) {\n var adjusted;\n adjusted = _.max([0, percentage]);\n adjusted = _.min([100, adjusted]);\n return Math.round(adjusted);\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgBacklogProgressBar, function(stats) {\n var closedPoints, closedPointsPercentaje, definedPoints, projectPointsPercentaje, totalPoints;\n if (stats != null) {\n totalPoints = stats.total_points;\n definedPoints = stats.defined_points;\n closedPoints = stats.closed_points;\n if (definedPoints > totalPoints) {\n projectPointsPercentaje = totalPoints * 100 / definedPoints;\n closedPointsPercentaje = closedPoints * 100 / definedPoints;\n } else {\n projectPointsPercentaje = 100;\n closedPointsPercentaje = closedPoints * 100 / totalPoints;\n }\n projectPointsPercentaje = adjustPercentaje(projectPointsPercentaje - 3);\n closedPointsPercentaje = adjustPercentaje(closedPointsPercentaje - 3);\n return render($el, projectPointsPercentaje, closedPointsPercentaje);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogProgressBar\", TgBacklogProgressBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sortable.coffee\n */\n\n(function() {\n var BacklogEmptySortableDirective, BacklogSortableDirective, SprintSortableDirective, bindOnce, deleteElement, groupBy, mixOf, module, scopeDefer, taiga, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaBacklog\");\n\n deleteElement = function(el) {\n el.scope().$destroy();\n el.off();\n return el.remove();\n };\n\n BacklogSortableDirective = function($repo, $rs, $rootscope, $tgConfirm) {\n var link;\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n var filterError;\n if (!(project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n filterError = function() {\n return $tgConfirm.notify(\"error\", \"You can't drop on backlog when filters are open\");\n };\n $el.sortable({\n connectWith: \".sprint-table\",\n containment: \".wrapper\",\n dropOnEmpty: true,\n placeholder: \"row us-item-row us-item-drag sortable-placeholder\",\n scroll: true,\n tolerance: \"pointer\",\n revert: false,\n cursorAt: {\n right: 15\n },\n stop: function() {\n if ($el.hasClass(\"active-filters\")) {\n $el.sortable(\"cancel\");\n return filterError();\n }\n }\n });\n $el.on(\"multiplesortreceive\", function(event, ui) {\n var itemIndex, itemUs;\n if ($el.hasClass(\"active-filters\")) {\n ui.source.sortable(\"cancel\");\n filterError();\n return;\n }\n itemUs = ui.item.scope().us;\n itemIndex = ui.item.index();\n deleteElement(ui.item);\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null);\n return ui.item.find('a').removeClass('noclick');\n });\n $el.on(\"multiplesortstop\", function(event, ui) {\n var index, items, us;\n if ($(ui.items[0]).parent().length === 0) {\n return;\n }\n items = _.sortBy(ui.items, function(item) {\n return $(item).index();\n });\n index = _.min(_.map(items, function(item) {\n return $(item).index();\n }));\n us = _.map(items, function(item) {\n var itemUs;\n item = $(item);\n itemUs = item.scope().us;\n setTimeout(((function(_this) {\n return function() {\n return item.find('a').removeClass('noclick');\n };\n })(this)), 300);\n return itemUs;\n });\n return $scope.$emit(\"sprint:us:move\", us, index, null);\n });\n return $el.on(\"sortstart\", function(event, ui) {\n return ui.item.find('a').addClass('noclick');\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n BacklogEmptySortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_us\") > -1) {\n $el.sortable({\n dropOnEmpty: true\n });\n return $el.on(\"sortreceive\", function(event, ui) {\n var itemIndex, itemUs;\n itemUs = ui.item.scope().us;\n itemIndex = ui.item.index();\n deleteElement(ui.item);\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null);\n return ui.item.find('a').removeClass('noclick');\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n SprintSortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_us\") > -1) {\n $el.sortable({\n scroll: true,\n dropOnEmpty: true,\n connectWith: \".sprint-table,.backlog-table-body,.empty-backlog\"\n });\n $el.on(\"multiplesortreceive\", function(event, ui) {\n var index, items, us;\n items = _.sortBy(ui.items, function(item) {\n return $(item).index();\n });\n index = _.min(_.map(items, function(item) {\n return $(item).index();\n }));\n us = _.map(items, function(item) {\n var itemUs;\n item = $(item);\n itemUs = item.scope().us;\n deleteElement(item);\n return itemUs;\n });\n return $scope.$emit(\"sprint:us:move\", us, index, $scope.sprint.id);\n });\n $el.on(\"multiplesortstop\", function(event, ui) {\n var itemIndex, itemUs;\n if (ui.item.parent().length === 0) {\n return;\n }\n itemUs = ui.item.scope().us;\n itemIndex = ui.item.index();\n setTimeout(((function(_this) {\n return function() {\n return ui.item.find('a').removeClass('noclick');\n };\n })(this)), 300);\n return $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, $scope.sprint.id);\n });\n return $el.on(\"sortstart\", function(event, ui) {\n return ui.item.find('a').addClass('noclick');\n });\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$tgConfirm\", BacklogSortableDirective]);\n\n module.directive(\"tgBacklogEmptySortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", BacklogEmptySortableDirective]);\n\n module.directive(\"tgSprintSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", SprintSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sprints.coffee\n */\n\n(function() {\n var BacklogSprintDirective, BacklogSprintHeaderDirective, ToggleExcludeClosedSprintsVisualization, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogSprintDirective = function($repo, $rootscope) {\n var link, refreshSprintTableHeight, slideOptions, sprintTableMinHeight, toggleSprint;\n sprintTableMinHeight = 50;\n slideOptions = {\n duration: 500,\n easing: 'linear'\n };\n refreshSprintTableHeight = (function(_this) {\n return function(sprintTable) {\n if (!sprintTable.find(\".row\").length) {\n return sprintTable.css(\"height\", sprintTableMinHeight);\n } else {\n return sprintTable.css(\"height\", \"auto\");\n }\n };\n })(this);\n toggleSprint = (function(_this) {\n return function($el) {\n var sprintArrow, sprintTable;\n sprintTable = $el.find(\".sprint-table\");\n sprintArrow = $el.find(\".icon-arrow-up\");\n sprintArrow.toggleClass('active');\n sprintTable.toggleClass('open');\n return refreshSprintTableHeight(sprintTable);\n };\n })(this);\n link = function($scope, $el, $attrs) {\n $scope.$watch($attrs.tgBacklogSprint, function(sprint) {\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n if ($scope.$first) {\n return toggleSprint($el);\n } else if (sprint.closed) {\n return $el.addClass(\"sprint-closed\");\n } else if (!$scope.$first && !sprint.closed) {\n toggleSprint($el);\n return $el.addClass(\"sprint-old-open\");\n }\n });\n $el.on(\"click\", \".sprint-name > .icon-arrow-up\", function(event) {\n toggleSprint($el);\n return $el.find(\".sprint-table\").slideToggle(slideOptions);\n });\n $el.on(\"click\", \".sprint-name > .icon-edit\", function(event) {\n var sprint;\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n return $rootscope.$broadcast(\"sprintform:edit\", sprint);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSprint\", [\"$tgRepo\", \"$rootScope\", BacklogSprintDirective]);\n\n BacklogSprintHeaderDirective = function($navUrls) {\n var link, template;\n template = _.template(\"
    \\n \\n\\n <% if(isVisible){ %>\\n \\\" title=\\\"'Go to the taskboard of '<%- name %>'\\\">\\n <%- name %>\\n \\n <% } %>\\n\\n <% if(isEditable){ %>\\n \\n <% } %>\\n
    \\n\\n
    \\n
    <%- estimatedDateRange %>
    \\n
      \\n
    • \\n <%- closedPoints %>\\n closed\\n
    • \\n
    • \\n <%- totalPoints %>\\n total\\n
    • \\n
    \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, isVisible, render;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_milestone\") !== -1;\n };\n isVisible = function() {\n return $scope.project.my_permissions.indexOf(\"view_milestones\") !== -1;\n };\n render = function(sprint) {\n var ctx, estimatedDateRange, finish, start, taskboardUrl;\n taskboardUrl = $navUrls.resolve(\"project-taskboard\", {\n project: $scope.project.slug,\n sprint: sprint.slug\n });\n start = moment(sprint.estimated_start).format(\"DD MMM YYYY\");\n finish = moment(sprint.estimated_finish).format(\"DD MMM YYYY\");\n estimatedDateRange = \"\" + start + \"-\" + finish;\n ctx = {\n name: sprint.name,\n taskboardUrl: taskboardUrl,\n estimatedDateRange: estimatedDateRange,\n closedPoints: sprint.closed_points || 0,\n totalPoints: sprint.total_points || 0,\n isVisible: isVisible(),\n isEditable: isEditable()\n };\n return $el.html(template(ctx));\n };\n $scope.$watch($attrs.ngModel, function(sprint) {\n return render(sprint);\n });\n $scope.$on(\"sprintform:edit:success\", function() {\n return render($model.$modelValue);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgBacklogSprintHeader\", [\"$tgNavUrls\", \"$tgRepo\", \"$rootScope\", BacklogSprintHeaderDirective]);\n\n ToggleExcludeClosedSprintsVisualization = function($rootscope, $loading) {\n var excludeClosedSprints, link;\n excludeClosedSprints = false;\n link = function($scope, $el, $attrs) {\n $el.on(\"click\", \"\", function(event) {\n $loading.start($el.siblings('.load'));\n return $rootscope.$broadcast(\"backlog:toggle-closed-sprints-visualization\");\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $scope.$on(\"sprints:loaded\", (function(_this) {\n return function(ctx, sprints) {\n var closedSprints;\n closedSprints = _.filter(sprints, function(sprint) {\n return sprint.closed;\n });\n $loading.finish($el.siblings('.load'));\n if (closedSprints.length > 0) {\n return $el.text(\"Hide closed sprints\");\n } else {\n return $el.text(\"Show closed sprints\");\n }\n };\n })(this));\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogToggleClosedSprintsVisualization\", [\"$rootScope\", \"$tgLoading\", ToggleExcludeClosedSprintsVisualization]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/charts.coffee\n */\n\n(function() {\n var SprintGraphDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaTaskboard\");\n\n SprintGraphDirective = function() {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var data, days, options, width;\n width = element.width();\n element.height(240);\n days = _.map(dataToDraw, function(x) {\n return moment(x.day);\n });\n data = [];\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.optimal_points;\n })),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.open_points;\n })),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: '#ccc'\n },\n xaxis: {\n tickSize: [1, \"day\"],\n min: days[0],\n max: _.last(days),\n mode: \"time\",\n daysNames: days,\n axisLabel: 'Day',\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif',\n axisLabelPadding: 5\n },\n yaxis: {\n min: 0\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: [\"rgba(102,153,51,1)\", \"rgba(120,120,120,0.2)\"]\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$on(\"resize\", function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n $scope.$on(\"taskboard:graph:toggle-visibility\", function() {\n $el.parent().toggleClass('open');\n return timeout(100, function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n });\n $scope.$watch('stats', function(value) {\n if ($scope.stats == null) {\n return;\n }\n return redrawChart(element, $scope.stats.days);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintGraph\", SprintGraphDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkTasksDirective, CreateEditTaskDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n CreateEditTaskDirective = function($repo, $model, $rs, $rootscope, $loading, lightboxService) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.isNew = true;\n $scope.$on(\"taskform:new\", function(ctx, sprintId, usId) {\n $scope.task = {\n project: $scope.projectId,\n milestone: sprintId,\n user_story: usId,\n is_archived: false,\n status: $scope.project.default_task_status,\n assigned_to: null,\n tags: []\n };\n $scope.isNew = true;\n $el.find(\".button-green span\").html(\"Create\");\n $el.find(\".title\").html(\"New task \");\n $el.find(\".tag-input\").val(\"\");\n return lightboxService.open($el);\n });\n $scope.$on(\"taskform:edit\", function(ctx, task) {\n $scope.task = task;\n $scope.isNew = false;\n $el.find(\".button-green span\").html(\"Save\");\n $el.find(\".title\").html(\"Edit task \");\n $el.find(\".tag-input\").val(\"\");\n return lightboxService.open($el);\n });\n submitButton = $el.find(\".submit-button\");\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var broadcastEvent, form, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n if ($scope.isNew) {\n promise = $repo.create(\"tasks\", $scope.task);\n broadcastEvent = \"taskform:new:success\";\n } else {\n promise = $repo.save($scope.task);\n broadcastEvent = \"taskform:edit:success\";\n }\n $loading.start(submitButton);\n return promise.then(function(data) {\n $loading.finish(submitButton);\n lightboxService.close($el);\n return $rootscope.$broadcast(broadcastEvent, data);\n });\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n CreateBulkTasksDirective = function($repo, $rs, $rootscope, $loading, lightboxService) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.form = {\n data: \"\",\n usId: null\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var data, form, projectId, promise, sprintId, usId;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n data = $scope.form.data;\n projectId = $scope.projectId;\n sprintId = $scope.form.sprintId;\n usId = $scope.form.usId;\n promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data);\n promise.then(function(result) {\n $loading.finish(submitButton);\n $rootscope.$broadcast(\"taskform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function() {\n $loading.finish(submitButton);\n return console.log(\"FAIL\");\n });\n };\n })(this));\n $scope.$on(\"taskform:bulk\", function(ctx, sprintId, usId) {\n lightboxService.open($el);\n return $scope.form = {\n data: \"\",\n sprintId: sprintId,\n usId: usId\n };\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaTaskboard\");\n\n module.directive(\"tgLbCreateEditTask\", [\"$tgRepo\", \"$tgModel\", \"$tgResources\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", CreateEditTaskDirective]);\n\n module.directive(\"tgLbCreateBulkTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", CreateBulkTasksDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard.coffee\n */\n\n(function() {\n var TaskboardController, TaskboardDirective, TaskboardSquishColumnDirective, TaskboardTableHeightFixerDirective, TaskboardTaskDirective, TaskboardUserDirective, bindMethods, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n toggleText = this.taiga.toggleText;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n scopeDefer = this.taiga.scopeDefer;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaTaskboard\");\n\n TaskboardController = (function(_super) {\n __extends(TaskboardController, _super);\n\n TaskboardController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$appTitle\", \"$tgLocation\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"tgLoader\"];\n\n function TaskboardController(scope, rootscope, repo, confirm, rs, params, q, appTitle, location, navUrls, events, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.appTitle = appTitle;\n this.location = location;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n bindMethods(this);\n this.scope.sectionName = \"Taskboard\";\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Taskboard - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n TaskboardController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"taskform:bulk:success\", (function(_this) {\n return function() {\n _this.loadTaskboard();\n return _this.analytics.trackEvent(\"task\", \"create\", \"bulk create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:new:success\", (function(_this) {\n return function() {\n _this.loadTaskboard();\n return _this.analytics.trackEvent(\"task\", \"create\", \"create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:edit:success\", (function(_this) {\n return function() {\n return _this.loadTaskboard();\n };\n })(this));\n this.scope.$on(\"taskboard:task:move\", this.taskMove);\n return this.scope.$on(\"assigned-to:added\", (function(_this) {\n return function(ctx, userId, task) {\n var promise;\n task.assigned_to = userId;\n promise = _this.repo.save(task);\n return promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.initializeSubscription = function() {\n var routingKey, routingKey1;\n routingKey = \"changes.project.\" + this.scope.projectId + \".tasks\";\n this.events.subscribe(this.scope, routingKey, (function(_this) {\n return function(message) {\n return _this.loadTaskboard();\n };\n })(this));\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n return this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.refreshTagsColors();\n _this.loadSprintStats();\n return _this.loadSprint();\n };\n })(this));\n };\n\n TaskboardController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.pointsList = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(project.points, function(e) {\n return e.id;\n });\n _this.scope.roleById = groupBy(project.roles, function(e) {\n return e.id;\n });\n _this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n _this.scope.usStatusById = groupBy(project.us_statuses, function(e) {\n return e.id;\n });\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprintStats = function() {\n return this.rs.sprints.stats(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(stats) {\n var completedPointsSum, remainingPointsSum, remainingTasks, totalPointsSum;\n totalPointsSum = _.reduce(_.values(stats.total_points), (function(res, n) {\n return res + n;\n }), 0);\n completedPointsSum = _.reduce(_.values(stats.completed_points), (function(res, n) {\n return res + n;\n }), 0);\n remainingPointsSum = totalPointsSum - completedPointsSum;\n remainingTasks = stats.total_tasks - stats.completed_tasks;\n _this.scope.stats = stats;\n _this.scope.stats.totalPointsSum = totalPointsSum;\n _this.scope.stats.completedPointsSum = completedPointsSum;\n _this.scope.stats.remainingPointsSum = remainingPointsSum;\n _this.scope.stats.remainingTasks = remainingTasks;\n if (stats.totalPointsSum) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.completedPointsSum / stats.totalPointsSum);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n _this.scope.stats.openTasks = stats.total_tasks - stats.completed_tasks;\n return stats;\n };\n })(this));\n };\n\n TaskboardController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprint = function() {\n return this.rs.sprints.get(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n _this.scope.userstories = _.sortBy(sprint.user_stories, \"sprint_order\");\n return sprint;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTasks = function() {\n return this.rs.tasks.list(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(tasks) {\n var status, task, us, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;\n _this.scope.tasks = _.sortBy(tasks, 'taskboard_order');\n _this.scope.usTasks = {};\n _ref = _.union(_this.scope.userstories, [\n {\n id: null\n }\n ]);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n us = _ref[_i];\n _this.scope.usTasks[us.id] = {};\n _ref1 = _this.scope.taskStatusList;\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n status = _ref1[_j];\n _this.scope.usTasks[us.id][status.id] = [];\n }\n }\n _ref2 = _this.scope.tasks;\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n task = _ref2[_k];\n if ((_this.scope.usTasks[task.user_story] != null) && (_this.scope.usTasks[task.user_story][task.status] != null)) {\n _this.scope.usTasks[task.user_story][task.status].push(task);\n }\n }\n return tasks;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTaskboard = function() {\n return this.q.all([\n this.refreshTagsColors(), this.loadSprintStats(), this.loadSprint().then((function(_this) {\n return function() {\n return _this.loadTasks();\n };\n })(this))\n ]);\n };\n\n TaskboardController.prototype.loadInitialData = function() {\n var params, promise;\n params = {\n pslug: this.params.pslug,\n sslug: this.params.sslug\n };\n promise = this.repo.resolve(params).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n _this.scope.sprintId = data.milestone;\n _this.initializeSubscription();\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadUsersAndRoles();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadTaskboard();\n };\n })(this));\n };\n\n TaskboardController.prototype.refreshTasksOrder = function(tasks) {\n var data, items;\n items = this.resortTasks(tasks);\n data = this.prepareBulkUpdateData(items);\n return this.rs.tasks.bulkUpdateTaskTaskboardOrder(this.scope.project.id, data);\n };\n\n TaskboardController.prototype.resortTasks = function(tasks) {\n var index, item, items, _i, _len;\n items = [];\n for (index = _i = 0, _len = tasks.length; _i < _len; index = ++_i) {\n item = tasks[index];\n item[\"taskboard_order\"] = index;\n if (item.isModified()) {\n items.push(item);\n }\n }\n return items;\n };\n\n TaskboardController.prototype.prepareBulkUpdateData = function(uses) {\n return _.map(uses, function(x) {\n return {\n \"task_id\": x.id,\n \"order\": x[\"taskboard_order\"]\n };\n });\n };\n\n TaskboardController.prototype.taskMove = function(ctx, task, usId, statusId, order) {\n var promise, r, tasks;\n r = this.scope.usTasks[task.user_story][task.status].indexOf(task);\n this.scope.usTasks[task.user_story][task.status].splice(r, 1);\n tasks = this.scope.usTasks[usId][statusId];\n tasks.splice(order, 0, task);\n task.user_story = usId;\n task.status = statusId;\n task.taskboard_order = order;\n promise = this.repo.save(task);\n this.rootscope.$broadcast(\"sprint:task:moved\", task);\n promise.then((function(_this) {\n return function() {\n _this.refreshTasksOrder(tasks);\n return _this.loadSprintStats();\n };\n })(this));\n return promise.then(null, (function(_this) {\n return function() {\n return console.log(\"FAIL TASK SAVE\");\n };\n })(this));\n };\n\n TaskboardController.prototype.addNewTask = function(type, us) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"taskform:new\", this.scope.sprintId, us != null ? us.id : void 0);\n case \"bulk\":\n return this.rootscope.$broadcast(\"taskform:bulk\", this.scope.sprintId, us != null ? us.id : void 0);\n }\n };\n\n TaskboardController.prototype.editTaskAssignedTo = function(task) {\n return this.rootscope.$broadcast(\"assigned-to:add\", task);\n };\n\n return TaskboardController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TaskboardController\", TaskboardController);\n\n TaskboardDirective = function($rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, tableBodyDom;\n $ctrl = $el.controller();\n $el.on(\"click\", \".toggle-analytics-visibility\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass('active');\n return $rootscope.$broadcast(\"taskboard:graph:toggle-visibility\");\n });\n tableBodyDom = $el.find(\".taskboard-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".taskboard-table-header .taskboard-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboard\", [\"$rootScope\", TaskboardDirective]);\n\n TaskboardTaskDirective = function($rootscope) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n $el.disableSelection();\n $scope.$watch(\"task\", function(task) {\n if (task.is_blocked && !$el.hasClass(\"blocked\")) {\n return $el.addClass(\"blocked\");\n } else if (!task.is_blocked && $el.hasClass(\"blocked\")) {\n return $el.removeClass(\"blocked\");\n }\n });\n return $el.find(\".icon-edit\").on(\"click\", function(event) {\n if ($el.find('.icon-edit').hasClass('noclick')) {\n return;\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"taskform:edit\", $scope.task);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardTask\", [\"$rootScope\", TaskboardTaskDirective]);\n\n TaskboardTableHeightFixerDirective = function() {\n var link, mainPadding, renderSize;\n mainPadding = 32;\n renderSize = function($el) {\n var columnHeight, elementOffset, windowHeight;\n elementOffset = $el.offset().top;\n windowHeight = angular.element(window).height();\n columnHeight = windowHeight - elementOffset - mainPadding;\n return $el.css(\"height\", \"\" + columnHeight + \"px\");\n };\n link = function($scope, $el, $attrs) {\n timeout(500, function() {\n return renderSize($el);\n });\n return $scope.$on(\"resize\", function() {\n return renderSize($el);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardTableHeightFixer\", TaskboardTableHeightFixerDirective);\n\n TaskboardSquishColumnDirective = function(rs) {\n var avatarWidth, link;\n avatarWidth = 40;\n link = function($scope, $el, $attrs) {\n var getCeilWidth, recalculateStatusColumnWidth, recalculateTaskboardWidth, refreshTaskboardTableWidth, setStatusColumnWidth;\n $scope.$on(\"sprint:task:moved\", (function(_this) {\n return function() {\n return recalculateTaskboardWidth();\n };\n })(this));\n bindOnce($scope, \"usTasks\", function(project) {\n $scope.statusesFolded = rs.tasks.getStatusColumnModes($scope.project.id);\n $scope.usFolded = rs.tasks.getUsRowModes($scope.project.id, $scope.sprintId);\n return recalculateTaskboardWidth();\n });\n $scope.foldStatus = function(status) {\n $scope.statusesFolded[status.id] = !!!$scope.statusesFolded[status.id];\n rs.tasks.storeStatusColumnModes($scope.projectId, $scope.statusesFolded);\n return recalculateTaskboardWidth();\n };\n $scope.foldUs = function(us) {\n if (!us) {\n $scope.usFolded[null] = !!!$scope.usFolded[null];\n } else {\n $scope.usFolded[us.id] = !!!$scope.usFolded[us.id];\n }\n rs.tasks.storeUsRowModes($scope.projectId, $scope.sprintId, $scope.usFolded);\n return recalculateTaskboardWidth();\n };\n getCeilWidth = (function(_this) {\n return function(usId, statusId) {\n var tasks, tasksMatrixSize, width;\n tasks = $scope.usTasks[usId][statusId].length;\n if ($scope.statusesFolded[statusId]) {\n if (tasks && $scope.usFolded[usId]) {\n tasksMatrixSize = Math.round(Math.sqrt(tasks));\n width = avatarWidth * tasksMatrixSize;\n } else {\n width = avatarWidth;\n }\n return width;\n }\n return 0;\n };\n })(this);\n setStatusColumnWidth = (function(_this) {\n return function(statusId, width) {\n var column;\n column = $el.find(\".squish-status-\" + statusId);\n if (width) {\n return column.css('max-width', width);\n } else {\n return column.css(\"max-width\", 'none');\n }\n };\n })(this);\n refreshTaskboardTableWidth = (function(_this) {\n return function() {\n var columnWidths, columns, totalWidth;\n columnWidths = [];\n columns = $el.find(\".task-colum-name\");\n columnWidths = _.map(columns, function(column) {\n return $(column).outerWidth(true);\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n return $el.find('.taskboard-table-inner').css(\"width\", totalWidth);\n };\n })(this);\n recalculateStatusColumnWidth = (function(_this) {\n return function(statusId) {\n var statusFoldedWidth;\n statusFoldedWidth = getCeilWidth(null, statusId);\n _.forEach($scope.userstories, function(us) {\n var width;\n width = getCeilWidth(us.id, statusId);\n if (width > statusFoldedWidth) {\n return statusFoldedWidth = width;\n }\n });\n return setStatusColumnWidth(statusId, statusFoldedWidth);\n };\n })(this);\n return recalculateTaskboardWidth = (function(_this) {\n return function() {\n _.forEach($scope.taskStatusList, function(status) {\n return recalculateStatusColumnWidth(status.id);\n });\n refreshTaskboardTableWidth();\n };\n })(this);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSquishColumn\", [\"$tgResources\", TaskboardSquishColumnDirective]);\n\n TaskboardUserDirective = function($log) {\n var clickable, link, template;\n template = \"
    \\n \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n
    \";\n clickable = false;\n link = function($scope, $el, $attrs) {\n var username_label;\n username_label = $el.parent().find(\"a.task-assigned\");\n username_label.on(\"click\", function(event) {\n var $ctrl;\n if ($el.find('a').hasClass('noclick')) {\n return;\n }\n $ctrl = $el.controller();\n return $ctrl.editTaskAssignedTo($scope.task);\n });\n $scope.$watch('task.assigned_to', function(assigned_to) {\n var user;\n user = $scope.usersById[assigned_to];\n if (user === void 0) {\n _.assign($scope, {\n name: \"Unassigned\",\n imgurl: \"/images/unnamed.png\",\n clickable: clickable\n });\n } else {\n _.assign($scope, {\n name: user.full_name_display,\n imgurl: user.photo,\n clickable: clickable\n });\n }\n return username_label.text($scope.name);\n });\n return bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_task\") > -1) {\n clickable = true;\n return $el.find(\".avatar-assigned-to\").on(\"click\", (function(_this) {\n return function(event) {\n var $ctrl;\n if ($el.find('a').hasClass('noclick')) {\n return;\n }\n $ctrl = $el.controller();\n return $ctrl.editTaskAssignedTo($scope.task);\n };\n })(this));\n }\n });\n };\n return {\n link: link,\n template: template,\n scope: {\n \"usersById\": \"=users\",\n \"project\": \"=\",\n \"task\": \"=\"\n }\n };\n };\n\n module.directive(\"tgTaskboardUserAvatar\", [\"$log\", TaskboardUserDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/sortable.coffee\n */\n\n(function() {\n var TaskboardSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaBacklog\");\n\n TaskboardSortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var deleteElement, itemEl, newParentScope, oldParentScope, tdom;\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n tdom.sortable({\n handle: \".taskboard-task-inner\",\n dropOnEmpty: true,\n connectWith: \".taskboard-tasks-box\",\n revert: 400\n });\n tdom.on(\"sortstop\", function(event, ui) {\n var itemIndex, itemTask, newStatusId, newUsId, oldStatusId, oldUsId, parentEl;\n parentEl = ui.item.parent();\n itemEl = ui.item;\n itemTask = itemEl.scope().task;\n itemIndex = itemEl.index();\n newParentScope = parentEl.scope();\n oldUsId = oldParentScope.us ? oldParentScope.us.id : null;\n oldStatusId = oldParentScope.st.id;\n newUsId = newParentScope.us ? newParentScope.us.id : null;\n newStatusId = newParentScope.st.id;\n if (newStatusId !== oldStatusId || newUsId !== oldUsId) {\n deleteElement(itemEl);\n }\n $scope.$apply(function() {\n return $rootscope.$broadcast(\"taskboard:task:move\", itemTask, newUsId, newStatusId, itemIndex);\n });\n return ui.item.find('a').removeClass('noclick');\n });\n tdom.on(\"sortstart\", function(event, ui) {\n oldParentScope = ui.item.parent().scope();\n return ui.item.find('a').addClass('noclick');\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", TaskboardSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/main.coffee\n */\n\n(function() {\n var KanbanArchivedStatusHeaderDirective, KanbanArchivedStatusIntroDirective, KanbanColumnHeightFixerDirective, KanbanController, KanbanDirective, KanbanSquishColumnDirective, KanbanUserDirective, KanbanUserstoryDirective, KanbanWipLimitDirective, bindMethods, bindOnce, defaultViewMode, defaultViewModes, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaKanban\");\n\n defaultViewMode = \"maximized\";\n\n defaultViewModes = {\n maximized: {\n cardClass: \"kanban-task-maximized\"\n },\n minimized: {\n cardClass: \"kanban-task-minimized\"\n }\n };\n\n KanbanController = (function(_super) {\n __extends(KanbanController, _super);\n\n KanbanController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$appTitle\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"tgLoader\"];\n\n function KanbanController(scope, rootscope, repo, confirm, rs, params, q, location, appTitle, navUrls, events, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n bindMethods(this);\n this.scope.sectionName = \"Kanban\";\n this.scope.statusViewModes = {};\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Kanban - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n KanbanController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function() {\n _this.loadUserstories();\n _this.refreshTagsColors();\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function() {\n _this.loadUserstories();\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function() {\n _this.loadUserstories();\n return _this.refreshTagsColors();\n };\n })(this));\n this.scope.$on(\"assigned-to:added\", this.onAssignedToChanged);\n this.scope.$on(\"kanban:us:move\", this.moveUs);\n this.scope.$on(\"kanban:show-userstories-for-status\", this.loadUserStoriesForStatus);\n return this.scope.$on(\"kanban:hide-userstories-for-status\", this.hideUserStoriesForStatus);\n };\n\n KanbanController.prototype.addNewUs = function(type, statusId) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"usform:new\", this.scope.projectId, statusId, this.scope.usStatusList);\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, statusId);\n }\n };\n\n KanbanController.prototype.changeUsAssignedTo = function(us) {\n return this.rootscope.$broadcast(\"assigned-to:add\", us);\n };\n\n KanbanController.prototype.onAssignedToChanged = function(ctx, userid, us) {\n var promise;\n us.assigned_to = userid;\n promise = this.repo.save(us);\n return promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n };\n\n KanbanController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors;\n };\n })(this));\n };\n\n KanbanController.prototype.loadUserstories = function() {\n var params;\n params = {\n status__is_archived: false\n };\n return this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n var status, usByStatus, _i, _len, _ref;\n _this.scope.userstories = userstories;\n usByStatus = _.groupBy(userstories, \"status\");\n _ref = _this.scope.usStatusList;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n status = _ref[_i];\n if (usByStatus[status.id] == null) {\n usByStatus[status.id] = [];\n }\n if (status.is_archived && (_this.scope.usByStatus != null)) {\n usByStatus[status.id] = _this.scope.usByStatus[status.id];\n }\n usByStatus[status.id] = _.sortBy(usByStatus[status.id], \"kanban_order\");\n }\n _this.scope.usByStatus = usByStatus;\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\", userstories);\n });\n return userstories;\n };\n })(this));\n };\n\n KanbanController.prototype.loadUserStoriesForStatus = function(ctx, statusId) {\n var params;\n params = {\n status: statusId\n };\n return this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n _this.scope.usByStatus[statusId] = _.sortBy(userstories, \"kanban_order\");\n _this.scope.$broadcast(\"kanban:shown-userstories-for-status\", statusId, userstories);\n return userstories;\n };\n })(this));\n };\n\n KanbanController.prototype.hideUserStoriesForStatus = function(ctx, statusId) {\n this.scope.usByStatus[statusId] = [];\n return this.scope.$broadcast(\"kanban:hidden-userstories-for-status\", statusId);\n };\n\n KanbanController.prototype.loadKanban = function() {\n return this.q.all([this.refreshTagsColors(), this.loadUserstories()]);\n };\n\n KanbanController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.projectId = project.id;\n _this.scope.points = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n _this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n _this.generateStatusViewModes();\n _this.scope.$emit(\"project:loaded\", project);\n return project;\n };\n })(this));\n };\n\n KanbanController.prototype.initializeSubscription = function() {\n var routingKey1;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n return this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n return _this.loadUserstories();\n };\n })(this));\n };\n\n KanbanController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n _this.initializeSubscription();\n return _this.loadKanban().then(function() {\n return _this.scope.$broadcast(\"redraw:wip\");\n });\n };\n })(this));\n };\n\n KanbanController.prototype.generateStatusViewModes = function() {\n var mode, status, storedStatusViewModes, _i, _len, _ref;\n storedStatusViewModes = this.rs.kanban.getStatusViewModes(this.scope.projectId);\n this.scope.statusViewModes = {};\n _ref = this.scope.usStatusList;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n status = _ref[_i];\n mode = storedStatusViewModes[status.id];\n this.scope.statusViewModes[status.id] = _.has(defaultViewModes, mode) ? mode : defaultViewMode;\n }\n return this.storeStatusViewModes();\n };\n\n KanbanController.prototype.storeStatusViewModes = function() {\n return this.rs.kanban.storeStatusViewModes(this.scope.projectId, this.scope.statusViewModes);\n };\n\n KanbanController.prototype.updateStatusViewMode = function(statusId, newViewMode) {\n this.scope.statusViewModes[statusId] = newViewMode;\n return this.storeStatusViewModes();\n };\n\n KanbanController.prototype.getCardClass = function(statusId) {\n var mode;\n mode = this.scope.statusViewModes[statusId] || defaultViewMode;\n return defaultViewModes[mode].cardClass || defaultViewModes[defaultViewMode].cardClass;\n };\n\n KanbanController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"kanban_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n KanbanController.prototype.resortUserStories = function(uses) {\n var index, item, items, _i, _len;\n items = [];\n for (index = _i = 0, _len = uses.length; _i < _len; index = ++_i) {\n item = uses[index];\n item.kanban_order = index;\n if (item.isModified()) {\n items.push(item);\n }\n }\n return items;\n };\n\n KanbanController.prototype.moveUs = function(ctx, us, oldStatusId, newStatusId, index) {\n var itemsToSave, promise, r;\n if (oldStatusId !== newStatusId) {\n r = this.scope.usByStatus[oldStatusId].indexOf(us);\n this.scope.usByStatus[oldStatusId].splice(r, 1);\n this.scope.usByStatus[newStatusId].splice(index, 0, us);\n us.status = newStatusId;\n } else {\n r = this.scope.usByStatus[newStatusId].indexOf(us);\n this.scope.usByStatus[newStatusId].splice(r, 1);\n this.scope.usByStatus[newStatusId].splice(index, 0, us);\n }\n itemsToSave = this.resortUserStories(this.scope.usByStatus[newStatusId]);\n this.scope.usByStatus[newStatusId] = _.sortBy(this.scope.usByStatus[newStatusId], \"kanban_order\");\n promise = this.repo.save(us);\n promise = promise.then((function(_this) {\n return function() {\n var data;\n itemsToSave = _.reject(itemsToSave, {\n \"id\": us.id\n });\n data = _this.prepareBulkUpdateData(itemsToSave);\n return _this.rs.userstories.bulkUpdateKanbanOrder(us.project, data).then(function() {\n return itemsToSave;\n });\n };\n })(this));\n return promise;\n };\n\n return KanbanController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"KanbanController\", KanbanController);\n\n KanbanDirective = function($repo, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var tableBodyDom;\n tableBodyDom = $el.find(\".kanban-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".kanban-table-header .kanban-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanban\", [\"$tgRepo\", \"$rootScope\", KanbanDirective]);\n\n KanbanColumnHeightFixerDirective = function() {\n var link, mainPadding, renderSize, scrollPadding;\n mainPadding = 32;\n scrollPadding = 0;\n renderSize = function($el) {\n var columnHeight, elementOffset, windowHeight;\n elementOffset = $el.parent().parent().offset().top;\n windowHeight = angular.element(window).height();\n columnHeight = windowHeight - elementOffset - mainPadding - scrollPadding;\n return $el.css(\"height\", \"\" + columnHeight + \"px\");\n };\n link = function($scope, $el, $attrs) {\n timeout(500, function() {\n return renderSize($el);\n });\n $scope.$on(\"resize\", function() {\n return renderSize($el);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanColumnHeightFixer\", KanbanColumnHeightFixerDirective);\n\n KanbanArchivedStatusHeaderDirective = function($rootscope) {\n var hideArchivedText, link, showArchivedText;\n showArchivedText = \"Show archived\";\n hideArchivedText = \"Hide archived\";\n link = function($scope, $el, $attrs) {\n var hidden, status;\n status = $scope.$eval($attrs.tgKanbanArchivedStatusHeader);\n hidden = true;\n $scope[\"class\"] = \"icon icon-open-eye\";\n $scope.title = showArchivedText;\n $el.on(\"click\", function(event) {\n hidden = !hidden;\n return $scope.$apply(function() {\n if (hidden) {\n $scope[\"class\"] = \"icon icon-open-eye\";\n $scope.title = showArchivedText;\n return $rootscope.$broadcast(\"kanban:hide-userstories-for-status\", status.id);\n } else {\n $scope[\"class\"] = \"icon icon-closed-eye\";\n $scope.title = hideArchivedText;\n return $rootscope.$broadcast(\"kanban:show-userstories-for-status\", status.id);\n }\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusHeader\", [\"$rootScope\", KanbanArchivedStatusHeaderDirective]);\n\n KanbanArchivedStatusIntroDirective = function() {\n var hiddenUserStoriexText, link, userStories;\n hiddenUserStoriexText = \"The user stories in this status are hidden by default\";\n userStories = [];\n link = function($scope, $el, $attrs) {\n var status, updateIntroText;\n status = $scope.$eval($attrs.tgKanbanArchivedStatusIntro);\n $el.text(hiddenUserStoriexText);\n updateIntroText = function() {\n if (userStories.length > 0) {\n return $el.text(\"\");\n } else {\n return $el.text(hiddenUserStoriexText);\n }\n };\n $scope.$on(\"kanban:us:move\", function(ctx, itemUs, oldStatusId, newStatusId, itemIndex) {\n var r;\n if (status.id === newStatusId) {\n if (status.id === oldStatusId) {\n r = userStories.indexOf(itemUs);\n userStories.splice(r, 1);\n userStories.splice(itemIndex, 0, itemUs);\n } else {\n itemUs.isArchived = true;\n userStories.splice(itemIndex, 0, itemUs);\n }\n } else if (status.id === oldStatusId) {\n itemUs.isArchived = false;\n r = userStories.indexOf(itemUs);\n userStories.splice(r, 1);\n }\n return updateIntroText();\n });\n $scope.$on(\"kanban:shown-userstories-for-status\", function(ctx, statusId, userStoriesLoaded) {\n if (statusId === status.id) {\n userStories = _.filter(userStoriesLoaded, function(us) {\n return us.status === status.id;\n });\n return updateIntroText();\n }\n });\n $scope.$on(\"kanban:hidden-userstories-for-status\", function(ctx, statusId) {\n if (statusId === status.id) {\n userStories = [];\n return updateIntroText();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusIntro\", KanbanArchivedStatusIntroDirective);\n\n KanbanUserstoryDirective = function($rootscope) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n $el.disableSelection();\n $scope.$watch(\"us\", function(us) {\n if (us.is_blocked && !$el.hasClass(\"blocked\")) {\n return $el.addClass(\"blocked\");\n } else if (!us.is_blocked && $el.hasClass(\"blocked\")) {\n return $el.removeClass(\"blocked\");\n }\n });\n $el.find(\".icon-edit\").on(\"click\", function(event) {\n if ($el.find(\".icon-edit\").hasClass(\"noclick\")) {\n return;\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"usform:edit\", $model.$modelValue);\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"/partials/views/components/kanban-task.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgKanbanUserstory\", [\"$rootScope\", KanbanUserstoryDirective]);\n\n KanbanSquishColumnDirective = function(rs) {\n var link;\n link = function($scope, $el, $attrs) {\n var updateTableWidth;\n $scope.$on(\"project:loaded\", function(event, project) {\n $scope.folds = rs.kanban.getStatusColumnModes(project.id);\n return updateTableWidth();\n });\n $scope.foldStatus = function(status) {\n $scope.folds[status.id] = !!!$scope.folds[status.id];\n rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds);\n updateTableWidth();\n };\n return updateTableWidth = function() {\n var columnWidths, totalWidth;\n columnWidths = _.map($scope.usStatusList, function(status) {\n if ($scope.folds[status.id]) {\n return 40;\n } else {\n return 310;\n }\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n return $el.find('.kanban-table-inner').css(\"width\", totalWidth);\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSquishColumn\", [\"$tgResources\", KanbanSquishColumnDirective]);\n\n KanbanWipLimitDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var redrawWipLimit;\n $el.disableSelection();\n redrawWipLimit = function() {\n $el.find(\".kanban-wip-limit\").remove();\n return timeout(200, function() {\n var element;\n element = $el.find(\".kanban-task\")[$scope.$eval($attrs.tgKanbanWipLimit)];\n if (element) {\n return angular.element(element).before(\"
    \");\n }\n });\n };\n $scope.$on(\"redraw:wip\", redrawWipLimit);\n $scope.$on(\"kanban:us:move\", redrawWipLimit);\n $scope.$on(\"usform:new:success\", redrawWipLimit);\n $scope.$on(\"usform:bulk:success\", redrawWipLimit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanWipLimit\", KanbanWipLimitDirective);\n\n KanbanUserDirective = function($log) {\n var clickable, link, template;\n template = _.template(\"
    \\n class=\\\"not-clickable\\\"<% } %>>\\n \\\" alt=\\\"<%- name %>\\\" class=\\\"avatar\\\">\\n \\n
    \");\n clickable = false;\n link = function($scope, $el, $attrs, $model) {\n var render, wtid;\n if (!$attrs.tgKanbanUserAvatar) {\n return $log.error(\"KanbanUserDirective: no attr is defined\");\n }\n wtid = $scope.$watch($attrs.tgKanbanUserAvatar, function(v) {\n var user;\n if ($scope.usersById == null) {\n $log.error(\"KanbanUserDirective requires userById set in scope.\");\n return wtid();\n } else {\n user = $scope.usersById[v];\n return render(user);\n }\n });\n render = function(user) {\n var ctx, html, username_label;\n if (user === void 0) {\n ctx = {\n name: \"Unassigned\",\n imgurl: \"/images/unnamed.png\",\n clickable: clickable\n };\n } else {\n ctx = {\n name: user.full_name_display,\n imgurl: user.photo,\n clickable: clickable\n };\n }\n html = template(ctx);\n $el.html(html);\n username_label = $el.parent().find(\"a.task-assigned\");\n username_label.html(ctx.name);\n return username_label.on(\"click\", function(event) {\n var $ctrl, us;\n if ($el.find(\"a\").hasClass(\"noclick\")) {\n return;\n }\n us = $model.$modelValue;\n $ctrl = $el.controller();\n return $ctrl.changeUsAssignedTo(us);\n });\n };\n bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_us\") > -1) {\n clickable = true;\n return $el.on(\"click\", (function(_this) {\n return function(event) {\n var $ctrl, us;\n if ($el.find(\"a\").hasClass(\"noclick\")) {\n return;\n }\n us = $model.$modelValue;\n $ctrl = $el.controller();\n return $ctrl.changeUsAssignedTo(us);\n };\n })(this));\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgKanbanUserAvatar\", [\"$log\", KanbanUserDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/sortable.coffee\n */\n\n(function() {\n var KanbanSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaKanban\");\n\n KanbanSortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n var deleteElement, itemEl, newParentScope, oldParentScope, tdom;\n if (!(project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n tdom.sortable({\n handle: \".kanban-task-inner\",\n dropOnEmpty: true,\n connectWith: \".kanban-uses-box\",\n revert: 400\n });\n tdom.on(\"sortstop\", function(event, ui) {\n var itemIndex, itemUs, newStatusId, oldStatusId, parentEl;\n parentEl = ui.item.parent();\n itemEl = ui.item;\n itemUs = itemEl.scope().us;\n itemIndex = itemEl.index();\n newParentScope = parentEl.scope();\n newStatusId = newParentScope.s.id;\n oldStatusId = oldParentScope.s.id;\n if (newStatusId !== oldStatusId) {\n deleteElement(itemEl);\n }\n $scope.$apply(function() {\n return $rootscope.$broadcast(\"kanban:us:move\", itemUs, itemUs.status, newStatusId, itemIndex);\n });\n return ui.item.find('a').removeClass('noclick');\n });\n return tdom.on(\"sortstart\", function(event, ui) {\n oldParentScope = ui.item.parent().scope();\n return ui.item.find('a').addClass('noclick');\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", KanbanSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/detail.coffee\n */\n\n(function() {\n var IssueDetailController, IssuePriorityButtonDirective, IssueSeverityButtonDirective, IssueStatusButtonDirective, IssueStatusDisplayDirective, IssueTypeButtonDirective, PromoteIssueToUsButtonDirective, bindOnce, groupBy, joinStr, mixOf, module, taiga, toString,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaIssues\");\n\n IssueDetailController = (function(_super) {\n __extends(IssueDetailController, _super);\n\n IssueDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"$appTitle\", \"$tgAnalytics\", \"$tgNavUrls\", \"tgLoader\"];\n\n function IssueDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appTitle, analytics, navUrls, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appTitle = appTitle;\n this.analytics = analytics;\n this.navUrls = navUrls;\n this.scope.issueRef = this.params.issueref;\n this.scope.sectionName = \"Issue Details\";\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this.appTitle.set(_this.scope.issue.subject + \" - \" + _this.scope.project.name);\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n IssueDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"history:reload\");\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on issue\", 1);\n };\n })(this));\n this.scope.$on(\"attachment:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n this.scope.$on(\"attachment:delete\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n return this.scope.$on(\"promote-issue-to-us:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"promoteToUserstory\", \"promote issue to userstory\", 1);\n _this.rootscope.$broadcast(\"history:reload\");\n return _this.loadIssue();\n };\n })(this));\n };\n\n IssueDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n if (this.scope.project.is_issues_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-issues\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n }\n };\n\n IssueDetailController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.statusList = project.issue_statuses;\n _this.scope.statusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n _this.scope.typeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n _this.scope.typeList = _.sortBy(project.issue_types, \"order\");\n _this.scope.severityList = project.severities;\n _this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n _this.scope.priorityList = project.priorities;\n _this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n return project;\n };\n })(this));\n };\n\n IssueDetailController.prototype.loadIssue = function() {\n return this.rs.issues.getByRef(this.scope.projectId, this.params.issueref).then((function(_this) {\n return function(issue) {\n var ctx;\n _this.scope.issue = issue;\n _this.scope.issueId = issue.id;\n _this.scope.commentModel = issue;\n if (_this.scope.issue.neighbors.previous.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n if (_this.scope.issue.neighbors.next.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.next.ref\n };\n return _this.scope.nextUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n };\n })(this));\n };\n\n IssueDetailController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.loadIssue();\n };\n })(this));\n };\n\n return IssueDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"IssueDetailController\", IssueDetailController);\n\n IssueStatusDisplayDirective = function() {\n var link, template;\n template = _.template(\"\\n <% if (status.is_closed) { %>\\n Closed\\n <% } else { %>\\n Open\\n <% } %>\\n\\n\\\">\\n <%- status.name %>\\n\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issue) {\n var html;\n html = template({\n status: $scope.statusById[issue.status]\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue != null) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusDisplay\", IssueStatusDisplayDirective);\n\n IssueStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- status.name %>\\n <% if(editable){ %><% }%>\\n status\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, status;\n status = $scope.statusById[issue.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(value, issue) {\n var onError, onSuccess;\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n issue.revert();\n $model.$setViewValue(issue);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save(value).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".status-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var issue, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n issue = $model.$modelValue.clone();\n issue.status = target.data(\"status-id\");\n $model.$setViewValue(issue);\n return save($model.$modelValue, issue);\n });\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", IssueStatusButtonDirective]);\n\n IssueTypeButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- type.name %>\\n <% if(editable){ %><% }%>\\n type\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, type;\n type = $scope.typeById[issue.type];\n html = template({\n type: type,\n typees: $scope.typeList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(type) {\n var issue, onError, onSuccess;\n $.fn.popover().closeAll();\n issue = $model.$modelValue.clone();\n issue.type = type;\n $model.$setViewValue(issue);\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n issue.revert();\n $model.$setViewValue(issue);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".type-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-type\").popover().open();\n });\n $el.on(\"click\", \".type\", function(event) {\n var target, type;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n type = target.data(\"type-id\");\n return save(type);\n });\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueTypeButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", IssueTypeButtonDirective]);\n\n IssueSeverityButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- severity.name %>\\n <% if(editable){ %><% }%>\\n severity\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, severity;\n severity = $scope.severityById[issue.severity];\n html = template({\n severity: severity,\n severityes: $scope.severityList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(severity) {\n var issue, onError, onSuccess;\n $.fn.popover().closeAll();\n issue = $model.$modelValue.clone();\n issue.severity = severity;\n $model.$setViewValue(issue);\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n issue.revert();\n $model.$setViewValue(issue);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".severity-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-severity\").popover().open();\n });\n $el.on(\"click\", \".severity\", function(event) {\n var severity, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n severity = target.data(\"severity-id\");\n return save(severity);\n });\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueSeverityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", IssueSeverityButtonDirective]);\n\n IssuePriorityButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- priority.name %>\\n <% if(editable){ %><% }%>\\n priority\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, priority;\n priority = $scope.priorityById[issue.priority];\n html = template({\n priority: priority,\n priorityes: $scope.priorityList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(priority) {\n var issue, onError, onSuccess;\n $.fn.popover().closeAll();\n issue = $model.$modelValue.clone();\n issue.priority = priority;\n $model.$setViewValue(issue);\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n issue.revert();\n $model.$setViewValue(issue);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".priority-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-priority\").popover().open();\n });\n $el.on(\"click\", \".priority\", function(event) {\n var priority, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n priority = target.data(\"priority-id\");\n return save(priority);\n });\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssuePriorityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", IssuePriorityButtonDirective]);\n\n PromoteIssueToUsButtonDirective = function($rootScope, $repo, $confirm, $qqueue) {\n var link, template;\n template = _.template(\"\\n Promote to User Story\\n\");\n link = function($scope, $el, $attrs, $model) {\n var save;\n save = $qqueue.bindAdd((function(_this) {\n return function(issue, finish) {\n var data, onError, onSuccess;\n data = {\n generated_from_issue: issue.id,\n project: issue.project,\n subject: issue.subject,\n description: issue.description,\n tags: issue.tags,\n is_blocked: issue.is_blocked,\n blocked_note: issue.blocked_note\n };\n onSuccess = function() {\n finish();\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"promote-issue-to-us:success\");\n };\n onError = function() {\n finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.create(\"userstories\", data).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \"a\", function(event) {\n var issue, message, subtitle, title;\n event.preventDefault();\n issue = $model.$modelValue;\n title = \"Promote this issue to a new user story\";\n message = \"Are you sure you want to create a new US from this Issue?\";\n subtitle = issue.subject;\n return $confirm.ask(title, subtitle, message).then((function(_this) {\n return function(finish) {\n return save(issue, finish);\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n restrict: \"AE\",\n require: \"ngModel\",\n template: template,\n link: link\n };\n };\n\n module.directive(\"tgPromoteIssueToUsButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", PromoteIssueToUsButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkIssuesDirective, CreateIssueDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaIssues\");\n\n CreateIssueDirective = function($repo, $confirm, $rootscope, lightboxService, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley();\n $scope.issue = {};\n $scope.$on(\"issueform:new\", function(ctx, project) {\n $el.find(\".tag-input\").val(\"\");\n lightboxService.open($el);\n return $scope.issue = {\n project: project.id,\n subject: \"\",\n status: project.default_issue_status,\n type: project.default_issue_type,\n priority: project.default_priority,\n severity: project.default_severity,\n tags: []\n };\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.create(\"issues\", $scope.issue);\n promise.then(function(data) {\n $loading.finish(submitButton);\n $rootscope.$broadcast(\"issueform:new:success\", data);\n lightboxService.close($el);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function() {\n $loading.finish(submitButton);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateIssue\", [\"$tgRepo\", \"$tgConfirm\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", CreateIssueDirective]);\n\n CreateBulkIssuesDirective = function($repo, $rs, $confirm, $rootscope, $loading, lightboxService) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.$on(\"issueform:bulk\", function(ctx, projectId, status) {\n lightboxService.open($el);\n return $scope[\"new\"] = {\n projectId: projectId,\n bulk: \"\"\n };\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var data, form, projectId, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n data = $scope[\"new\"].bulk;\n projectId = $scope[\"new\"].projectId;\n promise = $rs.issues.bulkCreate(projectId, data);\n promise.then(function(result) {\n $loading.finish(submitButton);\n $rootscope.$broadcast(\"issueform:new:success\", result);\n lightboxService.close($el);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function() {\n $loading.finish(submitButton);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkIssues\", [\"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", CreateBulkIssuesDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/list.coffee\n */\n\n(function() {\n var IssueAssignedToInlineEditionDirective, IssueStatusInlineEditionDirective, IssuesController, IssuesDirective, IssuesFiltersDirective, bindOnce, debounceLeading, groupBy, joinStr, mixOf, module, paginatorTemplate, startswith, taiga, toString, trim,\n __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounceLeading = this.taiga.debounceLeading;\n\n startswith = this.taiga.startswith;\n\n module = angular.module(\"taigaIssues\");\n\n IssuesController = (function(_super) {\n __extends(IssuesController, _super);\n\n IssuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$tgUrls\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$appTitle\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"tgLoader\"];\n\n function IssuesController(scope, rootscope, repo, confirm, rs, urls, params, q, location, appTitle, navUrls, events, analytics, tgLoader) {\n var filters, promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.urls = urls;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.loadIssues = __bind(this.loadIssues, this);\n this.scope.sectionName = \"Issues\";\n this.scope.filters = {};\n if (_.isEmpty(this.location.search())) {\n filters = this.rs.issues.getFilters(this.params.pslug);\n filters.page = 1;\n this.location.search(filters);\n this.location.replace();\n return;\n }\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Issues - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n this.scope.$on(\"issueform:new:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"create\", \"create issue on issues list\", 1);\n _this.loadIssues();\n return _this.loadFilters();\n };\n })(this));\n }\n\n IssuesController.prototype.initializeSubscription = function() {\n var routingKey;\n routingKey = \"changes.project.\" + this.scope.projectId + \".issues\";\n return this.events.subscribe(this.scope, routingKey, (function(_this) {\n return function(message) {\n return _this.loadIssues();\n };\n })(this));\n };\n\n IssuesController.prototype.storeFilters = function() {\n return this.rs.issues.storeFilters(this.params.pslug, this.location.search());\n };\n\n IssuesController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n _this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n _this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n _this.scope.severityList = _.sortBy(project.severities, \"order\");\n _this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n _this.scope.priorityList = _.sortBy(project.priorities, \"order\");\n _this.scope.issueTypes = _.sortBy(project.issue_types, \"order\");\n _this.scope.issueTypeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n return project;\n };\n })(this));\n };\n\n IssuesController.prototype.getUrlFilters = function() {\n var filters;\n filters = _.pick(this.location.search(), \"page\", \"tags\", \"statuses\", \"types\", \"q\", \"severities\", \"priorities\", \"assignedTo\", \"createdBy\", \"orderBy\");\n if (!filters.page) {\n filters.page = 1;\n }\n return filters;\n };\n\n IssuesController.prototype.getUrlFilter = function(name) {\n var filters;\n filters = _.pick(this.location.search(), name);\n return filters[name];\n };\n\n IssuesController.prototype.loadMyFilters = function() {\n return this.rs.issues.getMyFilters(this.scope.projectId).then((function(_this) {\n return function(filters) {\n return _.map(filters, function(value, key) {\n return {\n id: key,\n name: key,\n type: \"myFilters\",\n selected: false\n };\n });\n };\n })(this));\n };\n\n IssuesController.prototype.removeNotExistingFiltersFromUrl = function() {\n var currentSearch, existingValues, filterName, filterValue, splittedValues, urlfilters;\n currentSearch = this.location.search();\n urlfilters = this.getUrlFilters();\n for (filterName in urlfilters) {\n filterValue = urlfilters[filterName];\n if (filterName === \"page\" || filterName === \"orderBy\" || filterName === \"q\") {\n continue;\n }\n if (filterName === \"tags\") {\n splittedValues = _.map((\"\" + filterValue).split(\",\"));\n } else {\n splittedValues = _.map((\"\" + filterValue).split(\",\"), function(x) {\n if (x === \"null\") {\n return null;\n } else {\n return parseInt(x);\n }\n });\n }\n existingValues = _.intersection(splittedValues, _.map(this.scope.filters[filterName], \"id\"));\n if (splittedValues.length !== existingValues.length) {\n this.location.search(filterName, existingValues.join());\n }\n }\n if (currentSearch !== this.location.search()) {\n return this.location.replace();\n }\n };\n\n IssuesController.prototype.markSelectedFilters = function(filters, urlfilters) {\n var isSelected, key, name, obj, searchdata, val, value, _i, _len, _ref, _ref1, _results;\n searchdata = {};\n _ref = _.omit(urlfilters, \"page\", \"orderBy\");\n for (name in _ref) {\n value = _ref[name];\n if (searchdata[name] == null) {\n searchdata[name] = {};\n }\n _ref1 = (\"\" + value).split(\",\");\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n val = _ref1[_i];\n searchdata[name][val] = true;\n }\n }\n isSelected = function(type, id) {\n if ((searchdata[type] != null) && searchdata[type][id]) {\n return true;\n }\n return false;\n };\n _results = [];\n for (key in filters) {\n value = filters[key];\n _results.push((function() {\n var _j, _len1, _results1;\n _results1 = [];\n for (_j = 0, _len1 = value.length; _j < _len1; _j++) {\n obj = value[_j];\n _results1.push(obj.selected = isSelected(obj.type, obj.id) ? true : void 0);\n }\n return _results1;\n })());\n }\n return _results;\n };\n\n IssuesController.prototype.loadFilters = function() {\n var promise, urlfilters;\n urlfilters = this.getUrlFilters();\n if (urlfilters.q) {\n this.scope.filtersQ = urlfilters.q;\n }\n promise = this.loadMyFilters().then((function(_this) {\n return function(myFilters) {\n _this.scope.filters.myFilters = myFilters;\n return myFilters;\n };\n })(this));\n promise = promise.then((function(_this) {\n return function() {\n return _this.rs.issues.filtersData(_this.scope.projectId);\n };\n })(this));\n return promise.then((function(_this) {\n return function(data) {\n var choicesFiltersFormat, tagsFilterFormat, usersFiltersFormat;\n usersFiltersFormat = function(users, type, unknownOption) {\n var reformatedUsers, unknownItem;\n reformatedUsers = _.map(users, function(t) {\n return {\n id: t[0],\n count: t[1],\n type: type,\n name: t[0] ? _this.scope.usersById[t[0]].full_name_display : unknownOption\n };\n });\n unknownItem = _.remove(reformatedUsers, function(u) {\n return !u.id;\n });\n reformatedUsers = _.sortBy(reformatedUsers, function(u) {\n return u.name.toUpperCase();\n });\n if (unknownItem.length > 0) {\n reformatedUsers.unshift(unknownItem[0]);\n }\n return reformatedUsers;\n };\n choicesFiltersFormat = function(choices, type, byIdObject) {\n return _.map(choices, function(t) {\n return {\n id: t[0],\n name: byIdObject[t[0]].name,\n color: byIdObject[t[0]].color,\n count: t[1],\n type: type\n };\n });\n };\n tagsFilterFormat = function(tags) {\n return _.map(tags, function(t) {\n return {\n id: t[0],\n name: t[0],\n color: _this.scope.project.tags_colors[t[0]],\n count: t[1],\n type: \"tags\"\n };\n });\n };\n _this.scope.filters.statuses = choicesFiltersFormat(data.statuses, \"statuses\", _this.scope.issueStatusById);\n _this.scope.filters.severities = choicesFiltersFormat(data.severities, \"severities\", _this.scope.severityById);\n _this.scope.filters.priorities = choicesFiltersFormat(data.priorities, \"priorities\", _this.scope.priorityById);\n _this.scope.filters.assignedTo = usersFiltersFormat(data.assigned_to, \"assignedTo\", \"Unassigned\");\n _this.scope.filters.createdBy = usersFiltersFormat(data.created_by, \"createdBy\", \"Unknown\");\n _this.scope.filters.types = choicesFiltersFormat(data.types, \"types\", _this.scope.issueTypeById);\n _this.scope.filters.tags = tagsFilterFormat(data.tags);\n _this.removeNotExistingFiltersFromUrl();\n _this.markSelectedFilters(_this.scope.filters, urlfilters);\n return _this.rootscope.$broadcast(\"filters:loaded\", _this.scope.filters);\n };\n })(this));\n };\n\n IssuesController.prototype.loadIssuesRequests = 0;\n\n IssuesController.prototype.loadIssues = function() {\n var name, promise, values, _ref;\n this.scope.urlFilters = this.getUrlFilters();\n this.scope.httpParams = {};\n _ref = this.scope.urlFilters;\n for (name in _ref) {\n values = _ref[name];\n if (name === \"severities\") {\n name = \"severity\";\n } else if (name === \"orderBy\") {\n name = \"order_by\";\n } else if (name === \"priorities\") {\n name = \"priority\";\n } else if (name === \"assignedTo\") {\n name = \"assigned_to\";\n } else if (name === \"createdBy\") {\n name = \"owner\";\n } else if (name === \"statuses\") {\n name = \"status\";\n } else if (name === \"types\") {\n name = \"type\";\n }\n this.scope.httpParams[name] = values;\n }\n promise = this.rs.issues.list(this.scope.projectId, this.scope.httpParams);\n this.loadIssuesRequests += 1;\n promise.index = this.loadIssuesRequests;\n return promise.then((function(_this) {\n return function(data) {\n if (promise.index === _this.loadIssuesRequests) {\n _this.scope.issues = data.models;\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n }\n return data;\n };\n })(this));\n };\n\n IssuesController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n _this.initializeSubscription();\n return _this.q.all([_this.loadFilters(), _this.loadIssues()]);\n };\n })(this));\n };\n\n IssuesController.prototype.saveCurrentFiltersTo = function(newFilter) {\n var deferred;\n deferred = this.q.defer();\n this.rs.issues.getMyFilters(this.scope.projectId).then((function(_this) {\n return function(filters) {\n filters[newFilter] = _this.location.search();\n return _this.rs.issues.storeMyFilters(_this.scope.projectId, filters).then(function() {\n return deferred.resolve();\n });\n };\n })(this));\n return deferred.promise;\n };\n\n IssuesController.prototype.deleteMyFilter = function(filter) {\n var deferred;\n deferred = this.q.defer();\n this.rs.issues.getMyFilters(this.scope.projectId).then((function(_this) {\n return function(filters) {\n delete filters[filter];\n return _this.rs.issues.storeMyFilters(_this.scope.projectId, filters).then(function() {\n return deferred.resolve();\n });\n };\n })(this));\n return deferred.promise;\n };\n\n IssuesController.prototype.addNewIssue = function() {\n return this.rootscope.$broadcast(\"issueform:new\", this.scope.project);\n };\n\n IssuesController.prototype.addIssuesInBulk = function() {\n return this.rootscope.$broadcast(\"issueform:bulk\", this.scope.projectId);\n };\n\n return IssuesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"IssuesController\", IssuesController);\n\n paginatorTemplate = \"
      \\n <% if (showPrevious) { %>\\n
    • \\n \\n Prev\\n \\n
    • \\n <% } %>\\n\\n <% _.each(pages, function(item) { %>\\n
    • \\\">\\n <% if (item.type === \\\"page\\\") { %>\\n \\\"><%- item.num %>\\n <% } else if (item.type === \\\"page-active\\\") { %>\\n <%- item.num %>\\n <% } else { %>\\n ...\\n <% } %>\\n
    • \\n <% }); %>\\n\\n <% if (showNext) { %>\\n
    • \\n \\n Next\\n \\n
    • \\n <% } %>\\n
    \";\n\n IssuesDirective = function($log, $location) {\n var link, linkOrdering, linkPagination, template;\n template = _.template(paginatorTemplate);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".issues-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, i, numPages, options, pages, _i;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n $pagEl.show();\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = _i = 1; 1 <= numPages ? _i <= numPages : _i >= numPages; i = 1 <= numPages ? ++_i : --_i) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n return $pagEl.html(template(options));\n };\n $scope.$watch(\"issues\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".issues-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadIssues();\n });\n });\n $el.on(\"click\", \".issues-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadIssues();\n });\n });\n return $el.on(\"click\", \".issues-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadIssues();\n });\n });\n };\n linkOrdering = function($scope, $el, $attrs, $ctrl) {\n var colHeadElement, currentOrder, icon;\n currentOrder = $ctrl.getUrlFilter(\"orderBy\") || \"created_date\";\n if (currentOrder) {\n icon = startswith(currentOrder, \"-\") ? \"icon-caret-up\" : \"icon-caret-down\";\n colHeadElement = $el.find(\".row.title > div[data-fieldname='\" + (trim(currentOrder, \"-\")) + \"']\");\n colHeadElement.html(\"\" + (colHeadElement.html()) + \"\");\n }\n return $el.on(\"click\", \".row.title > div\", function(event) {\n var finalOrder, newOrder, target;\n target = angular.element(event.currentTarget);\n currentOrder = $ctrl.getUrlFilter(\"orderBy\");\n newOrder = target.data(\"fieldname\");\n finalOrder = currentOrder === newOrder ? \"-\" + newOrder : newOrder;\n return $scope.$apply(function() {\n $ctrl.replaceFilter(\"orderBy\", finalOrder);\n $ctrl.storeFilters();\n return $ctrl.loadIssues().then(function() {\n $el.find(\".row.title > div > span.icon\").remove();\n icon = startswith(finalOrder, \"-\") ? \"icon-caret-up\" : \"icon-caret-down\";\n return target.html(\"\" + (target.html()) + \"\");\n });\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkOrdering($scope, $el, $attrs, $ctrl);\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssues\", [\"$log\", \"$tgLocation\", IssuesDirective]);\n\n IssuesFiltersDirective = function($log, $location, $rs, $confirm, $loading) {\n var link, template, templateSelected;\n template = _.template(\"<% _.each(filters, function(f) { %>\\n <% if (!f.selected) { %>\\n \\\"\\n data-id=\\\"<%- f.id %>\\\">\\n style=\\\"border-left: 3px solid <%- f.color %>;\\\"<% } %>>\\n <%- f.name %>\\n \\n <% if (f.count){ %>\\n <%- f.count %>\\n <% } %>\\n <% if (f.type == \\\"myFilters\\\"){ %>\\n \\n <% } %>\\n \\n <% } %>\\n<% }) %>\\n\\n \\n\");\n templateSelected = _.template(\"<% _.each(filters, function(f) { %>\\n\\\"\\n data-id=\\\"<%- f.id %>\\\">\\n style=\\\"border-left: 3px solid <%- f.color %>;\\\"<% } %>>\\n <%- f.name %>\\n \\n \\n\\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var $ctrl, initializeSelectedFilters, renderFilters, renderSelectedFilters, selectQFilter, selectedFilters, showCategories, showFilters, toggleFilterSelection;\n $ctrl = $el.closest(\".wrapper\").controller();\n selectedFilters = [];\n showFilters = function(title, type) {\n $el.find(\".filters-cats\").hide();\n $el.find(\".filter-list\").removeClass(\"hidden\");\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\");\n $el.find(\"h2 a.subfilter span.title\").html(title);\n return $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type);\n };\n showCategories = function() {\n $el.find(\".filters-cats\").show();\n $el.find(\".filter-list\").addClass(\"hidden\");\n return $el.find(\"h2.breadcrumb\").addClass(\"hidden\");\n };\n initializeSelectedFilters = function(filters) {\n var name, val, values, _i, _len;\n selectedFilters = [];\n for (name in filters) {\n values = filters[name];\n for (_i = 0, _len = values.length; _i < _len; _i++) {\n val = values[_i];\n if (val.selected) {\n selectedFilters.push(val);\n }\n }\n }\n return renderSelectedFilters(selectedFilters);\n };\n renderSelectedFilters = function(selectedFilters) {\n var html;\n html = templateSelected({\n filters: selectedFilters\n });\n $el.find(\".filters-applied\").html(html);\n if (selectedFilters.length > 0) {\n return $el.find(\".save-filters\").show();\n } else {\n return $el.find(\".save-filters\").hide();\n }\n };\n renderFilters = function(filters) {\n var html;\n html = template({\n filters: filters\n });\n return $el.find(\".filter-list\").html(html);\n };\n toggleFilterSelection = function(type, id) {\n var currentFiltersType, filter, filterId, filters;\n if (type === \"myFilters\") {\n $rs.issues.getMyFilters($scope.projectId).then(function(data) {\n var filters, myFilters;\n myFilters = data;\n filters = myFilters[id];\n filters.page = 1;\n $ctrl.replaceAllFilters(filters);\n $ctrl.storeFilters();\n $ctrl.loadIssues();\n $ctrl.markSelectedFilters($scope.filters, filters);\n return initializeSelectedFilters($scope.filters);\n });\n return null;\n }\n filters = $scope.filters[type];\n filterId = type === 'tags' ? taiga.toString(id) : id;\n filter = _.find(filters, {\n id: filterId\n });\n filter.selected = !filter.selected;\n if (id === null) {\n id = \"null\";\n }\n if (filter.selected) {\n selectedFilters.push(filter);\n $scope.$apply(function() {\n $ctrl.selectFilter(type, id);\n $ctrl.selectFilter(\"page\", 1);\n $ctrl.storeFilters();\n return $ctrl.loadIssues();\n });\n } else {\n selectedFilters = _.reject(selectedFilters, filter);\n $scope.$apply(function() {\n $ctrl.unselectFilter(type, id);\n $ctrl.selectFilter(\"page\", 1);\n $ctrl.storeFilters();\n return $ctrl.loadIssues();\n });\n }\n renderSelectedFilters(selectedFilters);\n currentFiltersType = $el.find(\"h2 a.subfilter span.title\").prop('data-type');\n if (type === currentFiltersType) {\n return renderFilters(_.reject(filters, \"selected\"));\n }\n };\n $scope.$on(\"filters:loaded\", function(ctx, filters) {\n return initializeSelectedFilters(filters);\n });\n selectQFilter = debounceLeading(100, function(value) {\n if (value === void 0) {\n return;\n }\n if (value.length === 0) {\n $ctrl.replaceFilter(\"q\", null);\n $ctrl.storeFilters();\n } else {\n $ctrl.replaceFilter(\"q\", value);\n $ctrl.storeFilters();\n }\n return $ctrl.loadIssues();\n });\n $scope.$watch(\"filtersQ\", selectQFilter);\n $el.on(\"click\", \".filters-cats > ul > li > a\", function(event) {\n var tags, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n tags = $scope.filters[target.data(\"type\")];\n renderFilters(_.reject(tags, \"selected\"));\n return showFilters(target.attr(\"title\"), target.data(\"type\"));\n });\n $el.on(\"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", function(event) {\n event.preventDefault();\n return showCategories($el);\n });\n $el.on(\"click\", \".filters-applied a\", function(event) {\n var id, target, type;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n id = target.data(\"id\") || null;\n type = target.data(\"type\");\n return toggleFilterSelection(type, id);\n });\n $el.on(\"click\", \".filter-list .single-filter\", function(event) {\n var id, target, type;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass(\"active\");\n id = target.data(\"id\") || null;\n type = target.data(\"type\");\n if (type === \"myFilters\") {\n target.removeClass(\"active\");\n }\n return toggleFilterSelection(type, id);\n });\n $el.on(\"click\", \".filter-list .single-filter .icon-delete\", function(event) {\n var customFilterName, message, target, title;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n customFilterName = target.parent().data('id');\n title = \"Delete custom filter\";\n message = \"the custom filter '\" + customFilterName + \"'\";\n return $confirm.askOnDelete(title, message).then(function(finish) {\n var promise;\n promise = $ctrl.deleteMyFilter(customFilterName);\n promise.then(function() {\n promise = $ctrl.loadMyFilters();\n promise.then(function(filters) {\n finish();\n $scope.filters.myFilters = filters;\n return renderFilters($scope.filters.myFilters);\n });\n return promise.then(null, function() {\n return finish();\n });\n });\n return promise.then(null, function() {\n finish(false);\n return $confirm.notify(\"error\");\n });\n });\n });\n $el.on(\"click\", \".save-filters\", function(event) {\n event.preventDefault();\n renderFilters($scope.filters[\"myFilters\"]);\n showFilters(\"My filters\", \"myFilters\");\n $el.find('.save-filters').hide();\n $el.find('.my-filter-name').removeClass(\"hidden\");\n return $el.find('.my-filter-name').focus();\n });\n return $el.on(\"keyup\", \".new .my-filter-name\", function(event) {\n var newFilter, promise, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newFilter = target.val();\n $loading.start($el.find(\".new\"));\n promise = $ctrl.saveCurrentFiltersTo(newFilter);\n promise.then(function() {\n var loadPromise;\n loadPromise = $ctrl.loadMyFilters();\n loadPromise.then(function(filters) {\n var currentfilterstype;\n $loading.finish($el.find(\".new\"));\n $scope.filters.myFilters = filters;\n currentfilterstype = $el.find(\"h2 a.subfilter span.title\").prop('data-type');\n if (currentfilterstype === \"myFilters\") {\n renderFilters($scope.filters.myFilters);\n }\n $el.find('.my-filter-name').addClass(\"hidden\");\n return $el.find('.save-filters').show();\n });\n return loadPromise.then(null, function() {\n $loading.finish($el.find(\".new\"));\n return $confirm.notify(\"error\", \"Error loading custom filters\");\n });\n });\n return promise.then(null, function() {\n $loading.finish($el.find(\".new\"));\n $el.find(\".my-filter-name\").val(newFilter).focus().select();\n return $confirm.notify(\"error\", \"Filter not saved\");\n });\n } else if (event.keyCode === 27) {\n $el.find('.my-filter-name').val('');\n $el.find('.my-filter-name').addClass(\"hidden\");\n return $el.find('.save-filters').show();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssuesFilters\", [\"$log\", \"$tgLocation\", \"$tgResources\", \"$tgConfirm\", \"$tgLoading\", IssuesFiltersDirective]);\n\n IssueStatusInlineEditionDirective = function($repo, popoverService) {\n\n /*\n Print the status of an Issue and a popover to change it.\n - tg-issue-status-inline-edition: The issue\n \n Example:\n \n div.status(tg-issue-status-inline-edition=\"issue\")\n a.issue-status(href=\"\")\n \n NOTE: This directive need 'issueStatusById' and 'project'.\n */\n var link, selectionTemplate, updateIssueStatus;\n selectionTemplate = _.template(\"\");\n updateIssueStatus = function($el, issue, issueStatusById) {\n var issueStatusDom, issueStatusDomParent, status;\n issueStatusDomParent = $el.find(\".issue-status\");\n issueStatusDom = $el.find(\".issue-status .issue-status-bind\");\n status = issueStatusById[issue.status];\n if (status) {\n issueStatusDom.text(status.name);\n issueStatusDom.prop(\"title\", status.name);\n return issueStatusDomParent.css('color', status.color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, issue;\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueStatusInlineEdition);\n $el.on(\"click\", \".issue-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n issue.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateIssueStatus($el, issue, $scope.issueStatusById);\n return $scope.$apply(function() {\n return $repo.save(issue).then;\n });\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.issue_statuses\n }));\n updateIssueStatus($el, issue, $scope.issueStatusById);\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$watch($attrs.tgIssueStatusInlineEdition, (function(_this) {\n return function(val) {\n return updateIssueStatus($el, val, $scope.issueStatusById);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueStatusInlineEdition\", [\"$tgRepo\", IssueStatusInlineEditionDirective]);\n\n IssueAssignedToInlineEditionDirective = function($repo, $rootscope, popoverService) {\n var link, template;\n template = _.template(\"\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, issue, updateIssue;\n updateIssue = function(issue) {\n var ctx, member;\n ctx = {\n name: \"Unassigned\",\n imgurl: \"/images/unnamed.png\"\n };\n member = $scope.usersById[issue.assigned_to];\n if (member) {\n ctx.imgurl = member.photo;\n ctx.name = member.full_name_display;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".issue-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueAssignedToInlineEdition);\n updateIssue(issue);\n $el.on(\"click\", \".issue-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", issue);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", (function(_this) {\n return function(ctx, userId, updatedIssue) {\n if (updatedIssue.id === issue.id) {\n updatedIssue.assigned_to = userId;\n $repo.save(updatedIssue);\n return updateIssue(updatedIssue);\n }\n };\n })(this));\n $scope.$watch($attrs.tgIssueAssignedToInlineEdition, (function(_this) {\n return function(val) {\n return updateIssue(val);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", IssueAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories/detail.coffee\n */\n\n(function() {\n var UsClientRequirementButtonDirective, UsStatusButtonDirective, UsStatusDisplayDirective, UsTasksProgressDisplayDirective, UsTeamRequirementButtonDirective, UserStoryDetailController, bindOnce, groupBy, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserStories\");\n\n UserStoryDetailController = (function(_super) {\n __extends(UserStoryDetailController, _super);\n\n UserStoryDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"$appTitle\", \"$tgNavUrls\", \"$tgAnalytics\", \"tgLoader\"];\n\n function UserStoryDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appTitle, navUrls, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.scope.usRef = this.params.usref;\n this.scope.sectionName = \"User Story Details\";\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this.appTitle.set(_this.scope.us.subject + \" - \" + _this.scope.project.name);\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n UserStoryDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"related-tasks:update\", (function(_this) {\n return function() {\n _this.loadUs();\n return _this.scope.tasks = _.clone(_this.scope.tasks, false);\n };\n })(this));\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on userstory\", 1);\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n this.scope.$on(\"attachment:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n return this.scope.$on(\"attachment:delete\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.us.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-backlog\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-kanban\", ctx);\n }\n };\n\n UserStoryDetailController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.statusList = project.us_statuses;\n _this.scope.statusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n _this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n _this.scope.pointsList = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(_this.scope.pointsList, function(e) {\n return e.id;\n });\n return project;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadUs = function() {\n return this.rs.userstories.getByRef(this.scope.projectId, this.params.usref).then((function(_this) {\n return function(us) {\n var ctx;\n _this.scope.us = us;\n _this.scope.usId = us.id;\n _this.scope.commentModel = us;\n if (_this.scope.us.neighbors.previous.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.us.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n if (_this.scope.us.neighbors.next.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.us.neighbors.next.ref\n };\n _this.scope.nextUrl = _this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n return us;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadSprint = function() {\n if (this.scope.us.milestone) {\n return this.rs.sprints.get(this.scope.us.project, this.scope.us.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n UserStoryDetailController.prototype.loadTasks = function() {\n return this.rs.tasks.list(this.scope.projectId, null, this.scope.usId).then((function(_this) {\n return function(tasks) {\n _this.scope.tasks = tasks;\n return tasks;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.loadUs().then(function() {\n return _this.q.all([_this.loadSprint(), _this.loadTasks()]);\n });\n };\n })(this));\n };\n\n return UserStoryDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserStoryDetailController\", UserStoryDetailController);\n\n UsStatusDisplayDirective = function() {\n var link, template;\n template = _.template(\"\\n <% if (is_closed) { %>\\n Closed\\n <% } else { %>\\n Open\\n <% } %>\\n\\n\\\">\\n <%- status.name %>\\n\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function(us) {\n var html;\n html = template({\n is_closed: us.is_closed,\n status: $scope.statusById[us.status]\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(us) {\n if (us != null) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusDisplay\", UsStatusDisplayDirective);\n\n UsTasksProgressDisplayDirective = function() {\n var link, template;\n template = _.template(\"
    %\\\" />\\n\\n <%- totalClosedTasks %>/<%- totalTasks %> tasks completed\\n\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function(tasks) {\n var html, progress, totalClosedTasks, totalTasks;\n totalTasks = tasks.length;\n totalClosedTasks = _.filter(tasks, (function(_this) {\n return function(task) {\n return $scope.taskStatusById[task.status].is_closed;\n };\n })(this)).length;\n progress = totalTasks > 0 ? 100 * totalClosedTasks / totalTasks : 0;\n html = template({\n totalTasks: totalTasks,\n totalClosedTasks: totalClosedTasks,\n progress: progress\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(tasks) {\n if (tasks != null) {\n return render(tasks);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsTasksProgressDisplay\", UsTasksProgressDisplayDirective);\n\n UsStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- status.name %>\\n <% if(editable){ %><% }%>\\n status\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = (function(_this) {\n return function(us) {\n var html, status;\n status = $scope.statusById[us.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(status) {\n var onError, onSuccess, us;\n us = $model.$modelValue.clone();\n us.status = status;\n $.fn.popover().closeAll();\n $model.$setViewValue(us);\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n us.revert();\n $model.$setViewValue(us);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".status-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var status, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n status = target.data(\"status-id\");\n return save(status);\n });\n $scope.$watch($attrs.ngModel, function(us) {\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", UsStatusButtonDirective]);\n\n UsTeamRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"\\n\");\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n if (!canEdit() && !us.team_requirement) {\n $el.html(\"\");\n return;\n }\n ctx = {\n canEdit: canEdit(),\n isRequired: us.team_requirement\n };\n html = template(ctx);\n return $el.html(html);\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(team_requirement) {\n var promise, us;\n us = $model.$modelValue.clone();\n us.team_requirement = team_requirement;\n $model.$setViewValue(us);\n $loading.start($el.find(\"label\"));\n promise = $tgrepo.save($model.$modelValue);\n promise.then(function() {\n $loading.finish($el.find(\"label\"));\n return $rootscope.$broadcast(\"history:reload\");\n });\n return promise.then(null, function() {\n $loading.finish($el.find(\"label\"));\n $confirm.notify(\"error\");\n us.revert();\n return $model.$setViewValue(us);\n });\n };\n })(this));\n $el.on(\"click\", \".team-requirement\", function(event) {\n var team_requirement;\n if (!canEdit()) {\n return;\n }\n team_requirement = !$model.$modelValue.team_requirement;\n return save(team_requirement);\n });\n $scope.$watch($attrs.ngModel, function(us) {\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsTeamRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", UsTeamRequirementButtonDirective]);\n\n UsClientRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"\\n\");\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n if (!canEdit() && !us.client_requirement) {\n $el.html(\"\");\n return;\n }\n ctx = {\n canEdit: canEdit(),\n isRequired: us.client_requirement\n };\n html = template(ctx);\n return $el.html(html);\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(client_requirement) {\n var promise, us;\n us = $model.$modelValue.clone();\n us.client_requirement = client_requirement;\n $model.$setViewValue(us);\n $loading.start($el.find(\"label\"));\n promise = $tgrepo.save($model.$modelValue);\n promise.then(function() {\n $loading.finish($el.find(\"label\"));\n return $rootscope.$broadcast(\"history:reload\");\n });\n return promise.then(null, function() {\n $loading.finish($el.find(\"label\"));\n $confirm.notify(\"error\");\n us.revert();\n return $model.$setViewValue(us);\n });\n };\n })(this));\n $el.on(\"click\", \".client-requirement\", function(event) {\n var client_requirement;\n if (!canEdit()) {\n return;\n }\n client_requirement = !$model.$modelValue.client_requirement;\n return save(client_requirement);\n });\n $scope.$watch($attrs.ngModel, function(us) {\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsClientRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", UsClientRequirementButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks/detail.coffee\n */\n\n(function() {\n var TaskDetailController, TaskIsIocaineButtonDirective, TaskStatusButtonDirective, TaskStatusDisplayDirective, groupBy, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaTasks\");\n\n TaskDetailController = (function(_super) {\n __extends(TaskDetailController, _super);\n\n TaskDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"$appTitle\", \"$tgNavUrls\", \"$tgAnalytics\", \"tgLoader\"];\n\n function TaskDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appTitle, navUrls, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.scope.taskRef = this.params.taskref;\n this.scope.sectionName = \"Task Details\";\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this.appTitle.set(_this.scope.task.subject + \" - \" + _this.scope.project.name);\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n TaskDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on task\", 1);\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n this.scope.$on(\"attachment:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n return this.scope.$on(\"attachment:delete\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"history:reload\");\n };\n })(this));\n };\n\n TaskDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.task.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else if (this.scope.task.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n if (this.scope.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n }\n };\n\n TaskDetailController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.statusList = project.task_statuses;\n _this.scope.statusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n return project;\n };\n })(this));\n };\n\n TaskDetailController.prototype.loadTask = function() {\n return this.rs.tasks.getByRef(this.scope.projectId, this.params.taskref).then((function(_this) {\n return function(task) {\n var ctx;\n _this.scope.task = task;\n _this.scope.taskId = task.id;\n _this.scope.commentModel = task;\n if (_this.scope.task.neighbors.previous.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n if (_this.scope.task.neighbors.next.ref != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.next.ref\n };\n _this.scope.nextUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n return task;\n };\n })(this));\n };\n\n TaskDetailController.prototype.loadSprint = function() {\n if (this.scope.task.milestone) {\n return this.rs.sprints.get(this.scope.task.project, this.scope.task.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadUserStory = function() {\n if (this.scope.task.user_story) {\n return this.rs.userstories.get(this.scope.task.project, this.scope.task.user_story).then((function(_this) {\n return function(us) {\n _this.scope.us = us;\n return us;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.loadTask().then(function() {\n return _this.q.all([_this.loadSprint(), _this.loadUserStory()]);\n });\n };\n })(this));\n };\n\n return TaskDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TaskDetailController\", TaskDetailController);\n\n TaskStatusDisplayDirective = function() {\n var link, template;\n template = _.template(\"\\n <% if (status.is_closed) { %>\\n Closed\\n <% } else { %>\\n Open\\n <% } %>\\n\\n\\\">\\n <%- status.name %>\\n\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function(task) {\n var html;\n html = template({\n status: $scope.statusById[task.status]\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(task) {\n if (task != null) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusDisplay\", TaskStatusDisplayDirective);\n\n TaskStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    clickable<% }%>\\\">\\n \\\">\\n <%- status.name %>\\n <% if(editable){ %><% }%>\\n status\\n\\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = (function(_this) {\n return function(task) {\n var html, status;\n status = $scope.statusById[task.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n return $el.html(html);\n };\n })(this);\n save = $qqueue.bindAdd((function(_this) {\n return function(status) {\n var onError, onSuccess, task;\n task = $model.$modelValue.clone();\n task.status = status;\n $model.$setViewValue(task);\n onSuccess = function() {\n $confirm.notify(\"success\");\n $rootScope.$broadcast(\"history:reload\");\n return $loading.finish($el.find(\".level-name\"));\n };\n onError = function() {\n $confirm.notify(\"error\");\n task.revert();\n $model.$setViewValue(task);\n return $loading.finish($el.find(\".level-name\"));\n };\n $loading.start($el.find(\".level-name\"));\n return $repo.save($model.$modelValue).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"click\", \".status-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n return save(target.data(\"status-id\"));\n });\n $scope.$watch($attrs.ngModel, function(task) {\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", TaskStatusButtonDirective]);\n\n TaskIsIocaineButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $qqueue) {\n var link, template;\n template = _.template(\"
    \\n \\n \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = function(task) {\n var ctx, html;\n if (!isEditable() && !task.is_iocaine) {\n $el.html(\"\");\n return;\n }\n ctx = {\n isIocaine: task.is_iocaine,\n isEditable: isEditable()\n };\n html = template(ctx);\n return $el.html(html);\n };\n save = $qqueue.bindAdd((function(_this) {\n return function(is_iocaine) {\n var promise, task;\n task = $model.$modelValue.clone();\n task.is_iocaine = is_iocaine;\n $model.$setViewValue(task);\n $loading.start($el.find('label'));\n promise = $tgrepo.save(task);\n promise.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"history:reload\");\n });\n promise.then(null, function() {\n task.revert();\n $model.$setViewValue(task);\n return $confirm.notify(\"error\");\n });\n return promise[\"finally\"](function() {\n return $loading.finish($el.find('label'));\n });\n };\n })(this));\n $el.on(\"click\", \".is-iocaine\", function(event) {\n var is_iocaine;\n if (!isEditable()) {\n return;\n }\n is_iocaine = !$model.$modelValue.is_iocaine;\n return save(is_iocaine);\n });\n $scope.$watch($attrs.ngModel, function(task) {\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskIsIocaineButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", TaskIsIocaineButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team/main.coffee\n */\n\n(function() {\n var LeaveProjectDirective, TeamController, TeamFiltersDirective, TeamMemberCurrentUserDirective, TeamMemberStatsDirective, TeamMembersDirective, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n module = angular.module(\"taigaTeam\");\n\n TeamController = (function(_super) {\n __extends(TeamController, _super);\n\n TeamController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$location\", \"$tgNavUrls\", \"$appTitle\", \"$tgAuth\", \"tgLoader\"];\n\n function TeamController(scope, rootscope, repo, rs, params, q, location, navUrls, appTitle, auth, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appTitle = appTitle;\n this.auth = auth;\n this.scope.sectionName = \"Team\";\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Team - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n TeamController.prototype.setRole = function(role) {\n if (role) {\n return this.scope.filtersRole = role;\n } else {\n return this.scope.filtersRole = \"\";\n }\n };\n\n TeamController.prototype.loadMembers = function() {\n return this.rs.memberships.list(this.scope.projectId, {}, false).then((function(_this) {\n return function(data) {\n var currentUser, membership, _i, _len, _ref;\n currentUser = _this.auth.getUser();\n if (currentUser.photo == null) {\n currentUser.photo = \"/images/unnamed.png\";\n }\n _this.scope.currentUser = _.find(data, function(membership) {\n return membership.user === currentUser.id;\n });\n _this.scope.totals = {};\n _.forEach(data, function(membership) {\n return _this.scope.totals[membership.user] = 0;\n });\n _this.scope.memberships = _.filter(data, function(membership) {\n if (membership.user && membership.user !== currentUser.id && membership.is_user_active) {\n return membership;\n }\n });\n _ref = _this.scope.memberships;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n membership = _ref[_i];\n if (membership.photo == null) {\n membership.photo = \"/images/unnamed.png\";\n }\n }\n return data;\n };\n })(this));\n };\n\n TeamController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.issuesEnabled = project.is_issues_activated;\n _this.scope.tasksEnabled = project.is_kanban_activated || project.is_backlog_activated;\n _this.scope.wikiEnabled = project.is_wiki_activated;\n return project;\n };\n })(this));\n };\n\n TeamController.prototype.loadMemberStats = function() {\n return this.rs.projects.memberStats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n var totals;\n totals = {};\n _.forEach(_this.scope.totals, function(total, userId) {\n var vals;\n vals = _.map(stats, function(memberStats, statsKey) {\n return memberStats[userId];\n });\n total = _.reduce(vals, function(sum, el) {\n return sum + el;\n });\n return _this.scope.totals[userId] = total;\n });\n _this.scope.stats = _this.processStats(stats);\n return _this.scope.stats.totals = _this.scope.totals;\n };\n })(this));\n };\n\n TeamController.prototype.processStat = function(stat) {\n var max, min, singleStat;\n max = _.max(stat);\n min = _.min(stat);\n singleStat = _.map(stat, function(value, key) {\n if (value === min) {\n return [key, 0.1];\n }\n if (value === max) {\n return [key, 1];\n }\n return [key, (value * 0.5) / max];\n });\n singleStat = _.object(singleStat);\n return singleStat;\n };\n\n TeamController.prototype.processStats = function(stats) {\n var key, value;\n for (key in stats) {\n value = stats[key];\n stats[key] = this.processStat(value);\n }\n return stats;\n };\n\n TeamController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.loadMembers().then(function() {\n return _this.loadMemberStats();\n });\n };\n })(this));\n };\n\n return TeamController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TeamController\", TeamController);\n\n TeamFiltersDirective = function() {\n var template;\n template = \"\";\n return {\n template: template\n };\n };\n\n module.directive(\"tgTeamFilters\", [TeamFiltersDirective]);\n\n TeamMemberStatsDirective = function() {\n var template;\n template = \"
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \";\n return {\n template: template,\n scope: {\n stats: \"=\",\n userId: \"=user\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\"\n }\n };\n };\n\n module.directive(\"tgTeamMemberStats\", TeamMemberStatsDirective);\n\n TeamMemberCurrentUserDirective = function() {\n var template;\n template = \"
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \";\n return {\n template: template,\n scope: {\n projectId: \"=projectid\",\n currentUser: \"=currentuser\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\"\n }\n };\n };\n\n module.directive(\"tgTeamCurrentUser\", TeamMemberCurrentUserDirective);\n\n TeamMembersDirective = function() {\n var template;\n template = \"
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \";\n return {\n template: template,\n scope: {\n memberships: \"=\",\n filtersQ: \"=filtersq\",\n filtersRole: \"=filtersrole\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\"\n }\n };\n };\n\n module.directive(\"tgTeamMembers\", TeamMembersDirective);\n\n LeaveProjectDirective = function($repo, $confirm, $location, $rs, $navurls) {\n var link, template;\n template = \"\\n Leave this project\\n\";\n link = function($scope, $el, $attrs) {\n return $scope.leave = function() {\n return $confirm.ask(\"Leave this project\", \"Are you sure you want to leave the project?\").then((function(_this) {\n return function(finish) {\n var promise;\n promise = $rs.projects.leave($attrs.projectid);\n promise.then(function() {\n finish();\n $confirm.notify(\"success\");\n return $location.path($navurls.resolve(\"home\"));\n });\n return promise.then(null, function(response) {\n finish();\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n };\n };\n return {\n scope: {},\n template: template,\n link: link\n };\n };\n\n module.directive(\"tgLeaveProject\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgResources\", \"$tgNavUrls\", LeaveProjectDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/detail.coffee\n */\n\n(function() {\n var EditableWikiContentDirective, WikiDetailController, WikiSummaryDirective, bindOnce, debounce, groupBy, mixOf, module, taiga, unslugify,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n unslugify = this.taiga.unslugify;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaWiki\");\n\n WikiDetailController = (function(_super) {\n __extends(WikiDetailController, _super);\n\n WikiDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgModel\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$filter\", \"$log\", \"$appTitle\", \"$tgNavUrls\", \"$tgAnalytics\", \"tgLoader\"];\n\n function WikiDetailController(scope, rootscope, repo, model, confirm, rs, params, q, location, filter, log, appTitle, navUrls, analytics, tgLoader) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.model = model;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.filter = filter;\n this.log = log;\n this.appTitle = appTitle;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.scope.projectSlug = this.params.pslug;\n this.scope.wikiSlug = this.params.slug;\n this.scope.sectionName = \"Wiki\";\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Wiki - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n WikiDetailController.prototype.loadProject = function() {\n return this.rs.projects.getBySlug(this.params.pslug).then((function(_this) {\n return function(project) {\n _this.scope.projectId = project.id;\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.membersById = groupBy(project.memberships, function(x) {\n return x.user;\n });\n return project;\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadWiki = function() {\n var promise;\n promise = this.rs.wiki.getBySlug(this.scope.projectId, this.params.slug);\n promise.then((function(_this) {\n return function(wiki) {\n _this.scope.wiki = wiki;\n _this.scope.wikiId = wiki.id;\n return _this.scope.wiki;\n };\n })(this));\n return promise.then(null, (function(_this) {\n return function(xhr) {\n var data;\n _this.scope.wikiId = null;\n if (_this.scope.project.my_permissions.indexOf(\"add_wiki_page\") === -1) {\n return null;\n }\n data = {\n project: _this.scope.projectId,\n slug: _this.scope.wikiSlug,\n content: \"\"\n };\n _this.scope.wiki = _this.model.make_model(\"wiki\", data);\n return _this.scope.wiki;\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadWikiLinks = function() {\n return this.rs.wiki.listLinks(this.scope.projectId).then((function(_this) {\n return function(wikiLinks) {\n return _this.scope.wikiLinks = wikiLinks;\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise.then((function(_this) {\n return function(project) {\n _this.fillUsersAndRoles(project.users, project.roles);\n return _this.q.all([_this.loadWikiLinks(), _this.loadWiki()]);\n };\n })(this));\n };\n\n WikiDetailController.prototype[\"delete\"] = function() {\n var message, title;\n title = \"Delete Wiki Page\";\n message = unslugify(this.scope.wiki.slug);\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var onError, onSuccess;\n onSuccess = function() {\n var ctx;\n finish();\n ctx = {\n project: _this.scope.projectSlug\n };\n _this.location.path(_this.navUrls.resolve(\"project-wiki\", ctx));\n return _this.confirm.notify(\"success\");\n };\n onError = function() {\n finish(false);\n return _this.confirm.notify(\"error\");\n };\n return _this.repo.remove(_this.scope.wiki).then(onSuccess, onError);\n };\n })(this));\n };\n\n return WikiDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"WikiDetailController\", WikiDetailController);\n\n WikiSummaryDirective = function($log) {\n var link, template;\n template = _.template(\"
      \\n
    • \\n <%- totalEditions %>\\n times
      edited
      \\n
    • \\n
    • \\n <%- lastModifiedDate %>\\n last
      edit
      \\n
    • \\n
    • \\n
      \\n \\\" alt=\\\"<%- user.name %>\\\">\\n
      \\n last modification\\n <%- user.name %>\\n
    • \\n
    \");\n link = function($scope, $el, $attrs, $model) {\n var render;\n render = function(wiki) {\n var ctx, html, user;\n if ($scope.usersById == null) {\n $log.error(\"WikiSummaryDirective requires userById set in scope.\");\n } else {\n user = $scope.usersById[wiki.last_modifier];\n }\n if (user === void 0) {\n user = {\n name: \"unknown\",\n imgUrl: \"/images/unnamed.png\"\n };\n } else {\n user = {\n name: user.full_name_display,\n imgUrl: user.photo\n };\n }\n ctx = {\n totalEditions: wiki.editions,\n lastModifiedDate: moment(wiki.modified_date).format(\"DD MMM YYYY HH:mm\"),\n user: user\n };\n html = template(ctx);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(wikiPage) {\n if (!wikiPage) {\n return;\n }\n return render(wikiPage);\n });\n $scope.$on(\"wiki:edit\", function(event, wikiPage) {\n return render(wikiPage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWikiSummary\", [\"$log\", WikiSummaryDirective]);\n\n EditableWikiContentDirective = function($window, $document, $repo, $confirm, $loading, $location, $navUrls, $analytics, $qqueue) {\n var link, template;\n template = \"
    \\n
    \\n \\n
    \\n\";\n link = function($scope, $el, $attrs, $model) {\n var cancelEdition, disableEdition, getSelectedText, isEditable, save, switchToEditMode, switchToReadMode;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_wiki_page\") !== -1;\n };\n switchToEditMode = function() {\n $el.find('.edit-wiki-content').show();\n $el.find('.view-wiki-content').hide();\n return $el.find('textarea').focus();\n };\n switchToReadMode = function() {\n $el.find('.edit-wiki-content').hide();\n return $el.find('.view-wiki-content').show();\n };\n disableEdition = function() {\n $el.find(\".view-wiki-content .edit\").remove();\n return $el.find(\".edit-wiki-content\").remove();\n };\n cancelEdition = function() {\n var ctx;\n if (!$scope.wiki.html) {\n return;\n }\n if ($scope.wiki.id) {\n $scope.$apply((function(_this) {\n return function() {\n return $scope.wiki.revert();\n };\n })(this));\n return switchToReadMode();\n } else {\n ctx = {\n project: $scope.projectSlug\n };\n return $location.path($navUrls.resolve(\"project-wiki\", ctx));\n }\n };\n getSelectedText = function() {\n if ($window.getSelection) {\n return $window.getSelection().toString();\n } else if ($document.selection) {\n return $document.selection.createRange().text;\n }\n return null;\n };\n save = $qqueue.bindAdd(function(wiki) {\n var onError, onSuccess, promise;\n onSuccess = function(wikiPage) {\n if (wiki.id == null) {\n $analytics.trackEvent(\"wikipage\", \"create\", \"create wiki page\", 1);\n }\n $scope.wiki = wikiPage;\n $model.setModelValue = wiki;\n $confirm.notify(\"success\");\n switchToReadMode();\n return $scope.$broadcast(\"wiki:edit\", wikiPage);\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n $loading.start($el.find('.save-container'));\n if (wiki.id != null) {\n promise = $repo.save(wiki).then(onSuccess, onError);\n } else {\n promise = $repo.create(\"wiki\", wiki).then(onSuccess, onError);\n }\n return promise[\"finally\"](function() {\n return $loading.finish($el.find('.save-container'));\n });\n });\n $el.on(\"mousedown\", \".view-wiki-content\", function(event) {\n var target;\n target = angular.element(event.target);\n if (target.is('pre')) {\n return target.data(\"scroll-pos\", target[0].scrollLeft);\n }\n });\n $el.on(\"mouseup\", \".view-wiki-content\", function(event) {\n var prevPos, target;\n target = angular.element(event.target);\n if (!isEditable()) {\n return;\n }\n if (target.is('a')) {\n return;\n }\n if (getSelectedText()) {\n return;\n }\n if (target.is('pre')) {\n prevPos = target.data(\"scroll-pos\");\n target.data(\"scroll-pos\", null);\n if (prevPos !== target[0].scrollLeft) {\n return;\n }\n }\n return switchToEditMode();\n });\n $el.on(\"click\", \".save\", debounce(2000, function() {\n return save($scope.wiki);\n }));\n $el.on(\"click\", \".cancel\", function() {\n return cancelEdition();\n });\n $el.on(\"keydown\", \"textarea\", function(event) {\n if (event.keyCode === 27) {\n return cancelEdition();\n }\n });\n $scope.$watch($attrs.ngModel, function(wikiPage) {\n if (!wikiPage) {\n return;\n }\n $scope.wiki = wikiPage;\n if (isEditable()) {\n $el.addClass('editable');\n if (wikiPage.id == null) {\n return switchToEditMode();\n }\n } else {\n return disableEdition();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgEditableWikiContent\", [\"$window\", \"$document\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAnalytics\", \"$tgQqueue\", EditableWikiContentDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/detail.coffee\n */\n\n(function() {\n var WikiNavDirective, bindOnce, groupBy, mixOf, module, slugify, taiga, unslugify;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n slugify = this.taiga.slugify;\n\n unslugify = this.taiga.slugify;\n\n module = angular.module(\"taigaWiki\");\n\n WikiNavDirective = function($tgrepo, $log, $location, $confirm, $navUrls, $analytics, $loading) {\n var link, template;\n template = _.template(\"
    \\n

    Links

    \\n
    \\n
    \\n<% if (addWikiLinkPermission) { %>\\nAdd link\\n<% } %>\");\n link = function($scope, $el, $attrs) {\n var $ctrl, render;\n $ctrl = $el.controller();\n if ($attrs.ngModel == null) {\n return $log.error(\"WikiNavDirective: no ng-model attr is defined\");\n }\n render = function(wikiLinks) {\n var addWikiLinkPermission, deleteWikiLinkPermission, html;\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1;\n deleteWikiLinkPermission = $scope.project.my_permissions.indexOf(\"delete_wiki_link\") > -1;\n html = template({\n wikiLinks: wikiLinks,\n projectSlug: $scope.projectSlug,\n addWikiLinkPermission: addWikiLinkPermission,\n deleteWikiLinkPermission: deleteWikiLinkPermission\n });\n $el.off();\n $el.html(html);\n $el.on(\"click\", \".wiki-link .link-title\", function(event) {\n var linkId, linkSlug, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n linkId = target.parents('.wiki-link').data('id');\n linkSlug = $scope.wikiLinks[linkId].href;\n return $scope.$apply(function() {\n var ctx;\n ctx = {\n project: $scope.projectSlug,\n slug: linkSlug\n };\n return $location.path($navUrls.resolve(\"project-wiki-page\", ctx));\n });\n });\n $el.on(\"click\", \".add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new input\").focus();\n return $el.find(\".add-button\").hide();\n });\n $el.on(\"click\", \".wiki-link .icon-delete\", function(event) {\n var linkId, message, target, title;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n linkId = target.parents('.wiki-link').data('id');\n title = \"Delete Wiki Link\";\n message = $scope.wikiLinks[linkId].title;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(finish) {\n var promise;\n promise = $tgrepo.remove($scope.wikiLinks[linkId]);\n promise.then(function() {\n promise = $ctrl.loadWikiLinks();\n promise.then(function() {\n finish();\n return render($scope.wikiLinks);\n });\n return promise.then(null, function() {\n return finish();\n });\n });\n return promise.then(null, function() {\n finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $el.on(\"keyup\", \".new input\", function(event) {\n var newLink, promise, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newLink = target.val();\n $loading.start($el.find(\".new\"));\n promise = $tgrepo.create(\"wiki-links\", {\n project: $scope.projectId,\n title: newLink,\n href: slugify(newLink)\n });\n promise.then(function() {\n var loadPromise;\n $analytics.trackEvent(\"wikilink\", \"create\", \"create wiki link\", 1);\n loadPromise = $ctrl.loadWikiLinks();\n loadPromise.then(function() {\n $loading.finish($el.find(\".new\"));\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return render($scope.wikiLinks);\n });\n return loadPromise.then(null, function() {\n $loading.finish($el.find(\".new\"));\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return $confirm.notify(\"error\", \"Error loading wiki links\");\n });\n });\n return promise.then(null, function(error) {\n var _ref;\n $loading.finish($el.find(\".new\"));\n $el.find(\".new input\").val(newLink);\n $el.find(\".new input\").focus().select();\n if ((error != null ? (_ref = error.__all__) != null ? _ref[0] : void 0 : void 0) != null) {\n return $confirm.notify(\"error\", \"The link already exists\");\n } else {\n return $confirm.notify(\"error\");\n }\n });\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgWikiNav\", [\"$tgRepo\", \"$log\", \"$tgLocation\", \"$tgConfirm\", \"$tgNavUrls\", \"$tgAnalytics\", \"$tgLoading\", WikiNavDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/lightboxes.coffee\n */\n\n(function() {\n var CreateMembersDirective, MAX_MEMBERSHIP_FIELDSETS, debounce, module, taiga;\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaKanban\");\n\n MAX_MEMBERSHIP_FIELDSETS = 4;\n\n CreateMembersDirective = function($rs, $rootScope, $confirm, $loading, lightboxService) {\n var extraTextTemplate, link, template;\n extraTextTemplate = \"
    \\n \\n
    \";\n template = _.template(\"
    \\n
    \\n data-required=\\\"true\\\" <% } %> data-type=\\\"email\\\" />\\n
    \\n
    \\n \\n \\n
    \\n
    \");\n link = function($scope, $el, $attrs) {\n var createFieldSet, resetForm, submit, submitButton;\n createFieldSet = function(required) {\n var ctx;\n if (required == null) {\n required = true;\n }\n ctx = {\n roleList: $scope.roles,\n required: required\n };\n return template(ctx);\n };\n resetForm = function() {\n var fieldSet, invitations;\n $el.find(\"form textarea\").remove(\"\");\n $el.find(\"form .add-member-wrapper\").remove();\n invitations = $el.find(\".add-member-forms\");\n invitations.html(extraTextTemplate);\n fieldSet = createFieldSet();\n return invitations.prepend(fieldSet);\n };\n $scope.$on(\"membersform:new\", function() {\n resetForm();\n return lightboxService.open($el);\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $el.on(\"click\", \".delete-fieldset\", function(event) {\n var fieldSet, lastActionButton, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n fieldSet = target.closest('.add-member-wrapper');\n fieldSet.remove();\n lastActionButton = $el.find(\"fieldset:last > a\");\n if (lastActionButton.hasClass(\"icon-delete delete-fieldset\")) {\n return lastActionButton.removeClass(\"icon-delete delete-fieldset\").addClass(\"icon-plus add-fieldset\");\n }\n });\n $el.on(\"click\", \".add-fieldset\", function(event) {\n var fieldSet, newFieldSet, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n fieldSet = target.closest('.add-member-wrapper');\n target.removeClass(\"icon-plus add-fieldset\").addClass(\"icon-delete delete-fieldset\");\n newFieldSet = createFieldSet(false);\n fieldSet.after(newFieldSet);\n if ($el.find(\".add-member-wrapper\").length === MAX_MEMBERSHIP_FIELDSETS) {\n return $el.find(\".add-member-wrapper fieldset:last > a\").removeClass(\"icon-plus add-fieldset\").addClass(\"icon-delete delete-fieldset\");\n }\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, invitation_extra_text, invitations, memberWrappers, onError, onSuccess;\n event.preventDefault();\n $loading.start(submitButton);\n onSuccess = function(data) {\n $loading.finish(submitButton);\n lightboxService.close($el);\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"membersform:new:success\");\n };\n onError = function(data) {\n $loading.finish(submitButton);\n lightboxService.close($el);\n $confirm.notify(\"error\");\n return $rootScope.$broadcast(\"membersform:new:error\");\n };\n form = $el.find(\"form\").checksley();\n form.destroy();\n form.initialize();\n if (!form.validate()) {\n return;\n }\n memberWrappers = $el.find(\"form .add-member-wrapper\");\n memberWrappers = _.filter(memberWrappers, function(mw) {\n return angular.element(mw).find(\"input\").hasClass('checksley-ok');\n });\n invitations = _.map(memberWrappers, function(mw) {\n var email, memberWrapper, role;\n memberWrapper = angular.element(mw);\n email = memberWrapper.find(\"input\");\n role = memberWrapper.find(\"select\");\n return {\n email: email.val(),\n role_id: role.val()\n };\n });\n if (invitations.length) {\n invitation_extra_text = $el.find(\"form textarea\").val();\n return $rs.memberships.bulkCreateMemberships($scope.project.id, invitations, invitation_extra_text).then(onSuccess, onError);\n }\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateMembers\", [\"$tgResources\", \"$rootScope\", \"$tgConfirm\", \"$tgLoading\", \"lightboxService\", CreateMembersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/memberships.coffee\n */\n\n(function() {\n var MembershipsController, MembershipsDirective, MembershipsRowActionsDirective, MembershipsRowAdminCheckboxDirective, MembershipsRowAvatarDirective, MembershipsRowRoleSelectorDirective, bindMethods, mixOf, module, paginatorTemplate, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n MembershipsController = (function(_super) {\n __extends(MembershipsController, _super);\n\n MembershipsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAnalytics\", \"$appTitle\"];\n\n function MembershipsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, analytics, appTitle) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.appTitle = appTitle;\n bindMethods(this);\n this.scope.sectionName = \"Manage Members\";\n this.scope.project = {};\n this.scope.filters = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Membership - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"membersform:new:success\", (function(_this) {\n return function() {\n _this.loadMembers();\n return _this.analytics.trackEvent(\"membership\", \"create\", \"create memberships on admin\", 1);\n };\n })(this));\n }\n\n MembershipsController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n MembershipsController.prototype.loadMembers = function() {\n var httpFilters;\n httpFilters = this.getUrlFilters();\n return this.rs.memberships.list(this.scope.projectId, httpFilters).then((function(_this) {\n return function(data) {\n _this.scope.memberships = _.filter(data.models, function(membership) {\n return membership.user === null || membership.is_user_active;\n });\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n return data;\n };\n })(this));\n };\n\n MembershipsController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadUsersAndRoles();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadMembers();\n };\n })(this));\n };\n\n MembershipsController.prototype.getUrlFilters = function() {\n var filters;\n filters = _.pick(this.location.search(), \"page\");\n if (!filters.page) {\n filters.page = 1;\n }\n return filters;\n };\n\n MembershipsController.prototype.addNewMembers = function() {\n return this.rootscope.$broadcast(\"membersform:new\");\n };\n\n return MembershipsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"MembershipsController\", MembershipsController);\n\n paginatorTemplate = \"
      \\n <% if (showPrevious) { %>\\n
    • \\n \\n Prev\\n \\n
    • \\n <% } %>\\n\\n <% _.each(pages, function(item) { %>\\n
    • \\\">\\n <% if (item.type === \\\"page\\\") { %>\\n \\\"><%- item.num %>\\n <% } else if (item.type === \\\"page-active\\\") { %>\\n <%- item.num %>\\n <% } else { %>\\n ...\\n <% } %>\\n
    • \\n <% }); %>\\n\\n <% if (showNext) { %>\\n
    • \\n \\n Next\\n \\n
    • \\n <% } %>\\n
    \";\n\n MembershipsDirective = function() {\n var link, linkPagination, template;\n template = _.template(paginatorTemplate);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".memberships-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, i, numPages, options, pages, _i;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = _i = 1; 1 <= numPages ? _i <= numPages : _i >= numPages; i = 1 <= numPages ? ++_i : --_i) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n return $pagEl.html(template(options));\n };\n $scope.$watch(\"memberships\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".memberships-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadMembers();\n });\n });\n $el.on(\"click\", \".memberships-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadMembers();\n });\n });\n return $el.on(\"click\", \".memberships-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadMembers();\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMemberships\", MembershipsDirective);\n\n MembershipsRowAvatarDirective = function($log) {\n var link, template;\n template = _.template(\"
    \\n \\\" alt=\\\"<%- full_name %>\\\">\\n
    \\n <%- full_name %>\\n <%- email %>\\n
    \\n
    \");\n link = function($scope, $el, $attrs) {\n var member, render;\n render = function(member) {\n var ctx, html;\n ctx = {\n full_name: member.full_name ? member.full_name : \"\",\n email: member.user_email ? member.user_email : member.email,\n imgurl: member.photo ? member.photo : \"/images/unnamed.png\"\n };\n html = template(ctx);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowAvatar == null) {\n return $log.error(\"MembershipsRowAvatarDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAvatar);\n render(member);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAvatar\", [\"$log\", MembershipsRowAvatarDirective]);\n\n MembershipsRowAdminCheckboxDirective = function($log, $repo, $confirm) {\n var link, template;\n template = _.template(\"
    \\n \\\" />\\n
    \\n Yes\\n No\\n
    \");\n link = function($scope, $el, $attrs) {\n var html, member, render;\n render = function(member) {\n var ctx, html;\n ctx = {\n inputId: \"is-admin-\" + member.id\n };\n html = template(ctx);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowAdminCheckbox == null) {\n return $log.error(\"MembershipsRowAdminCheckboxDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAdminCheckbox);\n html = render(member);\n if (member.is_owner) {\n $el.find(\":checkbox\").prop(\"checked\", true);\n }\n $el.on(\"click\", \":checkbox\", (function(_this) {\n return function(event) {\n var onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n member.revert();\n $el.find(\":checkbox\").prop(\"checked\", member.is_owner);\n return $confirm.notify(\"error\", data.is_owner[0]);\n };\n target = angular.element(event.currentTarget);\n member.is_owner = target.prop(\"checked\");\n return $repo.save(member).then(onSuccess, onError);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAdminCheckbox\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", MembershipsRowAdminCheckboxDirective]);\n\n MembershipsRowRoleSelectorDirective = function($log, $repo, $confirm) {\n var link, template;\n template = _.template(\"\");\n link = function($scope, $el, $attrs) {\n var $ctrl, html, member, render;\n render = function(member) {\n var ctx, html;\n ctx = {\n roleList: $scope.roles,\n selectedRole: member.role\n };\n html = template(ctx);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowRoleSelector == null) {\n return $log.error(\"MembershipsRowRoleSelectorDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowRoleSelector);\n html = render(member);\n $el.on(\"click\", \"select\", (function(_this) {\n return function(event) {\n var newRole, onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n target = angular.element(event.currentTarget);\n newRole = parseInt(target.val(), 10);\n if (member.role !== newRole) {\n member.role = newRole;\n return $repo.save(member).then(onSuccess, onError);\n }\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowRoleSelector\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", MembershipsRowRoleSelectorDirective]);\n\n MembershipsRowActionsDirective = function($log, $repo, $rs, $confirm) {\n var activedTemplate, link, pendingTemplate;\n activedTemplate = _.template(\"
    \\n Active\\n
    \\n\\n \\n\");\n pendingTemplate = _.template(\"\\n Pending\\n \\n\\n\\n \\n\");\n link = function($scope, $el, $attrs) {\n var $ctrl, member, render;\n render = function(member) {\n var html;\n if (member.user) {\n html = activedTemplate();\n } else {\n html = pendingTemplate();\n }\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowActions == null) {\n return $log.error(\"MembershipsRowActionsDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowActions);\n render(member);\n $el.on(\"click\", \".pending\", function(event) {\n var onError, onSuccess;\n event.preventDefault();\n onSuccess = function() {\n return $confirm.notify(\"success\", \"We've sent the invitationi again to '\" + $scope.member.email + \"'.\");\n };\n onError = function() {\n return $confirm.notify(\"error\", \"We haven't sent the invitation.\");\n };\n return $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError);\n });\n $el.on(\"click\", \".delete\", function(event) {\n var message, title;\n event.preventDefault();\n title = \"Delete member\";\n message = member.user ? member.full_name : \"the invitation to \" + member.email;\n return $confirm.askOnDelete(title, message).then(function(finish) {\n var onError, onSuccess;\n onSuccess = function() {\n finish();\n $ctrl.loadMembers();\n return $confirm.notify(\"success\", null, \"We've deleted \" + message + \".\");\n };\n onError = function() {\n finish(false);\n return $confirm.notify(\"error\", null, \"We have not been able to delete \" + message + \".\");\n };\n return $repo.remove(member).then(onSuccess, onError);\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowActions\", [\"$log\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", MembershipsRowActionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/nav.coffee\n */\n\n(function() {\n var AdminNavigationDirective, module;\n\n AdminNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgAdminNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#adminmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaAdmin\");\n\n module.directive(\"tgAdminNavigation\", AdminNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-profile.coffee\n */\n\n(function() {\n var ProjectDefaultValuesDirective, ProjectModulesDirective, ProjectProfileController, ProjectProfileDirective, bindOnce, debounce, groupBy, joinStr, mixOf, module, taiga, toString, trim,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectProfileController = (function(_super) {\n __extends(ProjectProfileController, _super);\n\n ProjectProfileController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$appTitle\"];\n\n function ProjectProfileController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, appTitle) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appTitle = appTitle;\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Project profile - \" + _this.scope.sectionName + \" - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:loaded\", (function(_this) {\n return function() {\n return _this.appTitle.set(\"Project profile - \" + _this.scope.sectionName + \" - \" + _this.scope.project.name);\n };\n })(this));\n }\n\n ProjectProfileController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.pointsList = _.sortBy(project.points, \"order\");\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n _this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n _this.scope.prioritiesList = _.sortBy(project.priorities, \"order\");\n _this.scope.severitiesList = _.sortBy(project.severities, \"order\");\n _this.scope.issueTypesList = _.sortBy(project.issue_types, \"order\");\n _this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n ProjectProfileController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this));\n };\n\n ProjectProfileController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.project);\n };\n\n return ProjectProfileController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectProfileController\", ProjectProfileController);\n\n ProjectProfileDirective = function($repo, $confirm, $loading, $navurls, $location) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.save($scope.project);\n promise.then(function() {\n var newUrl;\n $loading.finish(submitButton);\n $confirm.notify(\"success\");\n newUrl = $navurls.resolve(\"project-admin-project-profile-details\", {\n project: $scope.project.slug\n });\n $location.path(newUrl);\n return $scope.$emit(\"project:loaded\", $scope.project);\n });\n return promise.then(null, function(data) {\n $loading.finish(target);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectProfile\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgNavUrls\", \"$tgLocation\", ProjectProfileDirective]);\n\n ProjectDefaultValuesDirective = function($repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.save($scope.project);\n promise.then(function() {\n $loading.finish(submitButton);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n $loading.finish(target);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectDefaultValues\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectDefaultValuesDirective]);\n\n ProjectModulesDirective = function($repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit;\n form = $el.find(\"form\").checksley();\n submit = (function(_this) {\n return function() {\n var promise, target;\n if (!form.validate()) {\n return;\n }\n target = angular.element(\".admin-functionalities a.button-green\");\n $loading.start(target);\n promise = $repo.save($scope.project);\n promise.then(function() {\n $loading.finish(target);\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:loaded\", $scope.project);\n });\n return promise.then(null, function(data) {\n $loading.finish(target);\n return $confirm.notify(\"error\", data._error_message);\n });\n };\n })(this);\n $el.on(\"submit\", \"form\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \".admin-functionalities a.button-green\", function(event) {\n event.preventDefault();\n return submit();\n });\n $scope.$watch(\"isVideoconferenceActivated\", function(isVideoconferenceActivated) {\n if (isVideoconferenceActivated) {\n return $el.find(\".videoconference-attributes\").removeClass(\"hidden\");\n } else {\n $el.find(\".videoconference-attributes\").addClass(\"hidden\");\n $scope.project.videoconferences = null;\n return $scope.project.videoconferences_salt = \"\";\n }\n });\n return $scope.$watch(\"project\", function(project) {\n if (project.videoconferences != null) {\n return $scope.isVideoconferenceActivated = true;\n } else {\n return $scope.isVideoconferenceActivated = false;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectModules\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectModulesDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-profile.coffee\n */\n\n(function() {\n var ColorSelectionDirective, ProjectValuesController, ProjectValuesDirective, bindOnce, debounce, groupBy, joinStr, mixOf, module, taiga, toString, trim,\n __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectValuesController = (function(_super) {\n __extends(ProjectValuesController, _super);\n\n ProjectValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$appTitle\"];\n\n function ProjectValuesController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, appTitle) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appTitle = appTitle;\n this.moveValue = __bind(this.moveValue, this);\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Project values - \" + _this.scope.sectionName + \" - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"admin:project-values:move\", this.moveValue);\n }\n\n ProjectValuesController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n ProjectValuesController.prototype.loadValues = function() {\n return this.rs[this.scope.resource].listValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(values) {\n _this.scope.values = values;\n _this.scope.maxValueOrder = _.max(values, \"order\").order;\n return values;\n };\n })(this));\n };\n\n ProjectValuesController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.q.all([_this.loadProject(), _this.loadValues()]);\n };\n })(this));\n };\n\n ProjectValuesController.prototype.moveValue = function(ctx, itemValue, itemIndex) {\n var r, values;\n values = this.scope.values;\n r = values.indexOf(itemValue);\n values.splice(r, 1);\n values.splice(itemIndex, 0, itemValue);\n _.each(values, function(value, index) {\n return value.order = index;\n });\n return this.repo.saveAll(values);\n };\n\n return ProjectValuesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectValuesController\", ProjectValuesController);\n\n ProjectValuesDirective = function($log, $repo, $confirm, $location, animationFrame) {\n var link, linkDragAndDrop, linkValue;\n linkDragAndDrop = function($scope, $el, $attrs) {\n var itemEl, newParentScope, oldParentScope, tdom;\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el.find(\".sortable\");\n tdom.sortable({\n handle: \".row.table-main.visualization\",\n dropOnEmpty: true,\n connectWith: \".project-values-body\",\n revert: 400,\n axis: \"y\"\n });\n tdom.on(\"sortstop\", function(event, ui) {\n var itemIndex, itemValue;\n itemEl = ui.item;\n itemValue = itemEl.scope().value;\n itemIndex = itemEl.index();\n return $scope.$broadcast(\"admin:project-values:move\", itemValue, itemIndex);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n linkValue = function($scope, $el, $attrs) {\n var $ctrl, cancel, goToBottomList, initializeNewValue, saveValue, submit, valueType;\n $ctrl = $el.controller();\n valueType = $attrs.type;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"is_closed\": false,\n \"is_archived\": false\n };\n };\n initializeNewValue();\n goToBottomList = (function(_this) {\n return function(focus) {\n var table;\n if (focus == null) {\n focus = false;\n }\n table = $el.find(\".table-main\");\n $(document.body).scrollTop(table.offset().top + table.height());\n if (focus) {\n return $(\".new-value input\").focus();\n }\n };\n })(this);\n submit = debounce(2000, (function(_this) {\n return function() {\n var promise;\n promise = $repo.save($scope.project);\n promise.then(function() {\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n return $confirm.notify(\"error\", data._error_message);\n });\n };\n })(this));\n saveValue = debounce(2000, function(target) {\n var form, promise, value;\n form = target.parents(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n value = target.scope().value;\n promise = $repo.save(value);\n promise.then((function(_this) {\n return function() {\n var row;\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n return row.siblings(\".visualization\").removeClass('hidden');\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n });\n cancel = function(target) {\n var row, value;\n row = target.parents(\".row.table-main\");\n value = target.scope().value;\n return $scope.$apply(function() {\n row.addClass(\"hidden\");\n value.revert();\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n };\n $el.on(\"submit\", \"form\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \"form a.button-green\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \".show-add-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").removeClass('hidden');\n return goToBottomList(true);\n });\n $el.on(\"click\", \".add-new\", debounce(2000, function(event) {\n var form, promise;\n event.preventDefault();\n form = $el.find(\".new-value\").parents(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n $scope.newValue.order = $scope.maxValueOrder ? $scope.maxValueOrder + 1 : 1;\n promise = $repo.create(valueType, $scope.newValue);\n promise.then((function(_this) {\n return function() {\n $ctrl.loadValues().then(function() {\n return animationFrame.add(function() {\n return goToBottomList();\n });\n });\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n }));\n $el.on(\"click\", \".delete-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").hide();\n return initializeNewValue();\n });\n $el.on(\"click\", \".edit-value\", function(event) {\n var editionRow, row, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n editionRow = row.siblings(\".edition\");\n editionRow.removeClass('hidden');\n return editionRow.find('input:visible').first().focus().select();\n });\n $el.on(\"keyup\", \".edition input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n return saveValue(target);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n return cancel(target);\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return saveValue(target);\n });\n $el.on(\"click\", \".cancel\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return cancel(target);\n });\n return $el.on(\"click\", \".delete-value\", function(event) {\n var choices, replacement, subtitle, target, title, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n value = target.scope().value;\n choices = {};\n _.each($scope.values, function(option) {\n if (value.id !== option.id) {\n return choices[option.id] = option.name;\n }\n });\n title = \"Delete value\";\n subtitle = value.name;\n replacement = \"All items with this value will be changed to\";\n if (_.keys(choices).length === 0) {\n return $confirm.error(\"You can't delete all values.\");\n }\n return $confirm.askChoice(title, subtitle, choices, replacement).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadValues()[\"finally\"](function() {\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.remove(value, {\n \"moveTo\": response.selected\n }).then(onSucces, onError);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n linkDragAndDrop($scope, $el, $attrs);\n linkValue($scope, $el, $attrs);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", ProjectValuesDirective]);\n\n ColorSelectionDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var $ctrl;\n $ctrl = $el.controller();\n $scope.$watch($attrs.ngModel, function(element) {\n return $scope.color = element.color;\n });\n $el.on(\"click\", \".current-color\", function(event) {\n var body, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n $el.find(\".select-color\").hide();\n target.siblings(\".select-color\").show();\n body = angular.element(\"body\");\n return body.on(\"click\", (function(_this) {\n return function(event) {\n if (angular.element(event.target).parent(\".select-color\").length === 0) {\n $el.find(\".select-color\").hide();\n return body.unbind(\"click\");\n }\n };\n })(this));\n });\n $el.on(\"click\", \".select-color .color\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $scope.$apply(function() {\n return $model.$modelValue.color = target.data(\"color\");\n });\n return $el.find(\".select-color\").hide();\n });\n $el.on(\"click\", \".select-color .selected-color\", function(event) {\n event.preventDefault();\n $scope.$apply(function() {\n return $model.$modelValue.color = $scope.color;\n });\n return $el.find(\".select-color\").hide();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgColorSelection\", ColorSelectionDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/memberships.coffee\n */\n\n(function() {\n var EditRoleDirective, NewRoleDirective, RolePermissionsDirective, RolesController, RolesDirective, bindMethods, bindOnce, debounce, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n RolesController = (function(_super) {\n __extends(RolesController, _super);\n\n RolesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$appTitle\"];\n\n function RolesController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, appTitle) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appTitle = appTitle;\n bindMethods(this);\n this.scope.sectionName = \"Permissions\";\n this.scope.project = {};\n this.scope.anyComputableRole = true;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Roles - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n RolesController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n _this.scope.anyComputableRole = _.some(_.map(project.roles, function(point) {\n return point.computable;\n }));\n return project;\n };\n })(this));\n };\n\n RolesController.prototype.loadRoles = function() {\n return this.rs.roles.list(this.scope.projectId).then((function(_this) {\n return function(data) {\n _this.scope.roles = data;\n _this.scope.role = _this.scope.roles[0];\n return data;\n };\n })(this));\n };\n\n RolesController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadUsersAndRoles();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadRoles();\n };\n })(this));\n };\n\n RolesController.prototype.setRole = function(role) {\n this.scope.role = role;\n return this.scope.$broadcast(\"role:changed\", this.scope.role);\n };\n\n RolesController.prototype[\"delete\"] = function() {\n var choices, replacement, role, subtitle, title, warning, _i, _len, _ref;\n title = \"Delete Role\";\n subtitle = this.scope.role.name;\n replacement = \"All the users with this role will be moved to\";\n warning = \"Be careful, all role estimations will be removed\";\n choices = {};\n _ref = this.scope.roles;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n role = _ref[_i];\n if (role.id !== this.scope.role.id) {\n choices[role.id] = role.name;\n }\n }\n if (_.keys(choices).length === 0) {\n return this.confirm.error(\"You can't delete all values.\");\n }\n return this.confirm.askChoice(title, subtitle, choices, replacement, warning).then((function(_this) {\n return function(response) {\n var promise;\n promise = _this.repo.remove(_this.scope.role, {\n moveTo: response.selected\n });\n promise.then(function() {\n _this.loadProject();\n return _this.loadRoles()[\"finally\"](function() {\n return response.finish();\n });\n });\n return promise.then(null, function() {\n return _this.confirm.notify('error');\n });\n };\n })(this));\n };\n\n RolesController.prototype.setComputable = debounce(2000, function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.confirm.notify(\"success\");\n return _this.loadProject();\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.scope.role.revert();\n };\n })(this);\n return this.repo.save(this.scope.role).then(onSuccess, onError);\n });\n\n return RolesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"RolesController\", RolesController);\n\n EditRoleDirective = function($repo, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit, toggleView;\n toggleView = function() {\n $el.find('.total').toggle();\n return $el.find('.edit-role').toggle();\n };\n submit = function() {\n var promise;\n $scope.role.name = $el.find(\"input\").val();\n promise = $repo.save($scope.role);\n promise.then(function() {\n return $confirm.notify(\"success\");\n });\n promise.then(null, function(data) {\n return $confirm.notify(\"error\");\n });\n return toggleView();\n };\n $el.on(\"click\", \"a.icon-edit\", function() {\n toggleView();\n $el.find(\"input\").focus();\n return $el.find(\"input\").val($scope.role.name);\n });\n $el.on(\"click\", \"a.save\", submit);\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return submit();\n } else if (event.keyCode === 27) {\n return toggleView();\n }\n });\n $scope.$on(\"role:changed\", function() {\n if ($el.find('.edit-role').is(\":visible\")) {\n return toggleView();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgEditRole\", [\"$tgRepo\", \"$tgConfirm\", EditRoleDirective]);\n\n RolesDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRoles\", RolesDirective);\n\n NewRoleDirective = function($tgrepo, $confirm) {\n var DEFAULT_PERMISSIONS, link;\n DEFAULT_PERMISSIONS = [\"view_project\", \"view_milestones\", \"view_us\", \"view_tasks\", \"view_issues\"];\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $el.on(\"click\", \"a.add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new\").focus();\n return $el.find(\".add-button\").hide();\n });\n return $el.on(\"keyup\", \".new\", function(event) {\n var newRole, onError, onSuccess, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newRole = {\n project: $scope.projectId,\n name: target.val(),\n permissions: DEFAULT_PERMISSIONS,\n order: _.max($scope.roles, function(r) {\n return r.order;\n }).order + 1,\n computable: false\n };\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n onSuccess = function(role) {\n $scope.roles.push(role);\n $ctrl.setRole(role);\n $el.find(\".add-button\").show();\n return $ctrl.loadProject();\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $tgrepo.create(\"roles\", newRole).then(onSuccess, onError);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNewRole\", [\"$tgRepo\", \"$tgConfirm\", NewRoleDirective]);\n\n RolePermissionsDirective = function($rootscope, $repo, $confirm) {\n var baseTemplate, categoryTemplate, link, resumeTemplate;\n resumeTemplate = _.template(\"
    <%- category.name %>
    \\n
    \\n
    <%- category.activePermissions %>/<%- category.permissions.length %>
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    active<% } %>\\\"\\n title=\\\"<%- permission.description %>\\\">
    \\n <% }) %>\\n
    \\n
    \");\n categoryTemplate = _.template(\"
    \\\">\\n
    \\n
    \\n
    \\n
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    \\\">\\n <%- permission.description %>\\n
    \\n checked=\\\"checked\\\"<% } %>/>\\n
    \\n Yes\\n No\\n
    \\n
    \\n <% }) %>\\n
    \\n
    \\n
    \");\n baseTemplate = _.template(\"
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, generateCategoriesFromRole, renderCategory, renderPermissions, renderResume;\n $ctrl = $el.controller();\n generateCategoriesFromRole = function(role) {\n var categories, issuePermissions, milestonePermissions, setActivePermissions, setActivePermissionsPerCategory, taskPermissions, userStoryPermissions, wikiPermissions;\n setActivePermissions = function(permissions) {\n return _.map(permissions, function(x) {\n var _ref;\n return _.extend({}, x, {\n active: (_ref = x[\"key\"], __indexOf.call(role.permissions, _ref) >= 0)\n });\n });\n };\n setActivePermissionsPerCategory = function(category) {\n return _.map(category, function(x) {\n return _.extend({}, x, {\n activePermissions: _.filter(x[\"permissions\"], \"active\").length\n });\n });\n };\n categories = [];\n milestonePermissions = [\n {\n key: \"view_milestones\",\n description: \"View sprints\"\n }, {\n key: \"add_milestone\",\n description: \"Add sprint\"\n }, {\n key: \"modify_milestone\",\n description: \"Modify sprint\"\n }, {\n key: \"delete_milestone\",\n description: \"Delete sprint\"\n }\n ];\n categories.push({\n name: \"Sprints\",\n permissions: setActivePermissions(milestonePermissions)\n });\n userStoryPermissions = [\n {\n key: \"view_us\",\n description: \"View user story\"\n }, {\n key: \"add_us\",\n description: \"Add user story\"\n }, {\n key: \"modify_us\",\n description: \"Modify user story\"\n }, {\n key: \"delete_us\",\n description: \"Delete user story\"\n }\n ];\n categories.push({\n name: \"User Stories\",\n permissions: setActivePermissions(userStoryPermissions)\n });\n taskPermissions = [\n {\n key: \"view_tasks\",\n description: \"View tasks\"\n }, {\n key: \"add_task\",\n description: \"Add task\"\n }, {\n key: \"modify_task\",\n description: \"Modify task\"\n }, {\n key: \"delete_task\",\n description: \"Delete task\"\n }\n ];\n categories.push({\n name: \"Tasks\",\n permissions: setActivePermissions(taskPermissions)\n });\n issuePermissions = [\n {\n key: \"view_issues\",\n description: \"View issues\"\n }, {\n key: \"add_issue\",\n description: \"Add issue\"\n }, {\n key: \"modify_issue\",\n description: \"Modify issue\"\n }, {\n key: \"delete_issue\",\n description: \"Delete issue\"\n }\n ];\n categories.push({\n name: \"Issues\",\n permissions: setActivePermissions(issuePermissions)\n });\n wikiPermissions = [\n {\n key: \"view_wiki_pages\",\n description: \"View wiki pages\"\n }, {\n key: \"add_wiki_page\",\n description: \"Add wiki page\"\n }, {\n key: \"modify_wiki_page\",\n description: \"Modify wiki page\"\n }, {\n key: \"delete_wiki_page\",\n description: \"Delete wiki page\"\n }, {\n key: \"view_wiki_links\",\n description: \"View wiki links\"\n }, {\n key: \"add_wiki_link\",\n description: \"Add wiki link\"\n }, {\n key: \"delete_wiki_link\",\n description: \"Delete wiki link\"\n }\n ];\n categories.push({\n name: \"Wiki\",\n permissions: setActivePermissions(wikiPermissions)\n });\n return setActivePermissionsPerCategory(categories);\n };\n renderResume = function(element, category) {\n return element.find(\".resume\").html(resumeTemplate({\n category: category\n }));\n };\n renderCategory = function(category, index) {\n var html;\n html = categoryTemplate({\n category: category,\n index: index\n });\n html = angular.element(html);\n renderResume(html, category);\n return html;\n };\n renderPermissions = function() {\n var html;\n $el.off();\n html = baseTemplate();\n _.each(generateCategoriesFromRole($scope.role), function(category, index) {\n return html = angular.element(html).append(renderCategory(category, index));\n });\n $el.html(html);\n $el.on(\"click\", \".resume\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return target.next().toggleClass(\"open\");\n });\n return $el.on(\"change\", \".category-item input\", function(event) {\n var getActivePermissions, onError, onSuccess, target;\n getActivePermissions = function() {\n var activePermissions;\n activePermissions = _.filter($el.find(\".category-item input\"), function(t) {\n return angular.element(t).is(\":checked\");\n });\n activePermissions = _.sortBy(_.map(activePermissions, function(t) {\n var permission;\n return permission = angular.element(t).parents(\".category-item\").data(\"id\");\n }));\n activePermissions.push(\"view_project\");\n return activePermissions;\n };\n target = angular.element(event.currentTarget);\n $scope.role.permissions = getActivePermissions();\n onSuccess = function(role) {\n var categories, categoryId;\n categories = generateCategoriesFromRole(role);\n categoryId = target.parents(\".category-config\").data(\"id\");\n renderResume(target.parents(\".category-config\"), categories[categoryId]);\n $rootscope.$broadcast(\"projects:reload\");\n $confirm.notify(\"success\");\n return $ctrl.loadProject();\n };\n onError = function() {\n $confirm.notify(\"error\");\n target.prop(\"checked\", !target.prop(\"checked\"));\n return $scope.role.permissions = getActivePermissions();\n };\n return $repo.save($scope.role).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.$on(\"role:changed\", function() {\n return renderPermissions();\n });\n return bindOnce($scope, $attrs.ngModel, renderPermissions);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRolePermissions\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", RolePermissionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/third-parties.coffee\n */\n\n(function() {\n var BitbucketController, BitbucketWebhooksDirective, GithubController, GithubWebhooksDirective, GitlabController, GitlabWebhooksDirective, SelectInputText, ValidOriginIpsDirective, bindMethods, debounce, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAdmin\");\n\n GithubController = (function(_super) {\n __extends(GithubController, _super);\n\n GithubController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$appTitle\"];\n\n function GithubController(scope, repo, rs, params, appTitle) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appTitle = appTitle;\n bindMethods(this);\n this.scope.sectionName = \"Github\";\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Github - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n GithubController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"github\").then((function(_this) {\n return function(github) {\n return _this.scope.github = github;\n };\n })(this));\n };\n\n GithubController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n GithubController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n };\n\n return GithubController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GithubController\", GithubController);\n\n GitlabController = (function(_super) {\n __extends(GitlabController, _super);\n\n GitlabController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$appTitle\"];\n\n function GitlabController(scope, repo, rs, params, appTitle) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appTitle = appTitle;\n bindMethods(this);\n this.scope.sectionName = \"Gitlab\";\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Gitlab - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n GitlabController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"gitlab\").then((function(_this) {\n return function(gitlab) {\n return _this.scope.gitlab = gitlab;\n };\n })(this));\n };\n\n GitlabController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n GitlabController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n };\n\n return GitlabController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GitlabController\", GitlabController);\n\n BitbucketController = (function(_super) {\n __extends(BitbucketController, _super);\n\n BitbucketController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$appTitle\"];\n\n function BitbucketController(scope, repo, rs, params, appTitle) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appTitle = appTitle;\n bindMethods(this);\n this.scope.sectionName = \"Bitbucket\";\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.appTitle.set(\"Bitbucket - \" + _this.scope.project.name);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n BitbucketController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"bitbucket\").then((function(_this) {\n return function(bitbucket) {\n return _this.scope.bitbucket = bitbucket;\n };\n })(this));\n };\n\n BitbucketController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n BitbucketController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n };\n\n return BitbucketController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"BitbucketController\", BitbucketController);\n\n SelectInputText = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", \".select-input-content\", function() {\n $el.find(\"input\").select();\n return $el.find(\".help-copy\").addClass(\"visible\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSelectInputText\", SelectInputText);\n\n GithubWebhooksDirective = function($repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.saveAttribute($scope.github, \"github\");\n promise.then(function() {\n $loading.finish(submitButton);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGithubWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GithubWebhooksDirective]);\n\n GitlabWebhooksDirective = function($repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.saveAttribute($scope.gitlab, \"gitlab\");\n promise.then(function() {\n $loading.finish(submitButton);\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGitlabWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GitlabWebhooksDirective]);\n\n BitbucketWebhooksDirective = function($repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.saveAttribute($scope.bitbucket, \"bitbucket\");\n promise.then(function() {\n $loading.finish(submitButton);\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n $loading.finish(submitButton);\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBitbucketWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", BitbucketWebhooksDirective]);\n\n ValidOriginIpsDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $ngModel) {\n return $ngModel.$parsers.push(function(value) {\n value = $.trim(value);\n if (value === \"\") {\n return [];\n }\n return value.split(\",\");\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgValidOriginIps\", ValidOriginIpsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/attachments.coffee\n */\n\n(function() {\n var CreateProject, DeleteProjectDirective, bindOnce, debounce, module, taiga, timeout;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaProject\");\n\n CreateProject = function($rootscope, $repo, $confirm, $location, $navurls, $rs, $projectUrl, $loading, lightboxService, $cacheFactory) {\n var link;\n link = function($scope, $el, attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit, submitButton;\n $scope.data = {};\n $scope.templates = [];\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n onSuccessSubmit = function(response) {\n $cacheFactory.get('$http').removeAll();\n $loading.finish(submitButton);\n $rootscope.$broadcast(\"projects:reload\");\n $confirm.notify(\"success\", \"Success\");\n $location.url($projectUrl.get(response));\n return lightboxService.close($el);\n };\n onErrorSubmit = function(response) {\n var error_field, error_step, selectors, _i, _len, _ref;\n $loading.finish(submitButton);\n form.setErrors(response);\n selectors = [];\n _ref = _.keys(response);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n error_field = _ref[_i];\n selectors.push(\"[name=\" + error_field + \"]\");\n }\n $el.find(\".active\").removeClass(\"active\");\n error_step = $el.find(selectors.join(\",\")).first().parents(\".wizard-step\");\n error_step.addClass(\"active\");\n return $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(error_step.data(\"step\"));\n };\n submit = (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n $loading.start(submitButton);\n promise = $repo.create(\"projects\", $scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this);\n $scope.$on(\"projects:create\", function() {\n $scope.data = {\n total_story_points: 100,\n total_milestones: 5\n };\n if (!$scope.templates.length) {\n $rs.projects.templates().then((function(_this) {\n return function(result) {\n $scope.templates = result;\n return $scope.data.creation_template = _.head(_.filter($scope.templates, function(x) {\n return x.slug === \"scrum\";\n })).id;\n };\n })(this));\n } else {\n $scope.data.creation_template = _.head(_.filter($scope.templates, function(x) {\n return x.slug === \"scrum\";\n })).id;\n }\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\".create-step1\").addClass(\"active\");\n lightboxService.open($el);\n return timeout(600, function() {\n return $el.find(\".progress-bar\").addClass('step1');\n });\n });\n $el.on(\"click\", \".button-next\", function(event) {\n var current, field, next, step, valid, _i, _len, _ref;\n event.preventDefault();\n current = $el.find(\".active\");\n valid = true;\n _ref = form.fields;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n field = _ref[_i];\n if (current.find(\"[name=\" + (field.element.attr('name')) + \"]\").length) {\n valid = field.validate() !== false && valid;\n }\n }\n if (!valid) {\n return;\n }\n next = current.next();\n current.toggleClass('active');\n next.toggleClass('active');\n step = next.data('step');\n return $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step);\n });\n $el.on(\"click\", \".button-prev\", function(event) {\n var current, prev, step;\n event.preventDefault();\n current = $el.find(\".active\");\n prev = current.prev();\n current.toggleClass('active');\n prev.toggleClass('active');\n step = prev.data('step');\n return $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step);\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateProject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$location\", \"$tgNavUrls\", \"$tgResources\", \"$projectUrl\", \"$tgLoading\", \"lightboxService\", \"$cacheFactory\", CreateProject]);\n\n DeleteProjectDirective = function($repo, $rootscope, $auth, $location, $navUrls, $confirm, lightboxService, tgLoader) {\n var link;\n link = function($scope, $el, $attrs) {\n var projectToDelete, submit;\n projectToDelete = null;\n $scope.$on(\"deletelightbox:new\", function(ctx, project) {\n lightboxService.open($el);\n return projectToDelete = project;\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var promise;\n tgLoader.start();\n lightboxService.close($el);\n promise = $repo.remove(projectToDelete);\n promise.then(function(data) {\n tgLoader.pageLoaded();\n $rootscope.$broadcast(\"projects:reload\");\n $location.path($navUrls.resolve(\"home\"));\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function() {\n $confirm.notify(\"error\");\n return lightboxService.close($el);\n });\n };\n $el.on(\"click\", \".button-red\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return submit();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbDeleteProject\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfirm\", \"lightboxService\", \"tgLoader\", DeleteProjectDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/attachments.coffee\n */\n\n(function() {\n var ProjectController, ProjectsController, ProjectsListDirective, ProjectsPaginationDirective, bindOnce, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaProject\");\n\n bindOnce = this.taiga.bindOnce;\n\n ProjectsController = (function(_super) {\n __extends(ProjectsController, _super);\n\n ProjectsController.$inject = [\"$scope\", \"$q\", \"$tgResources\", \"$rootScope\", \"$tgNavUrls\", \"$tgAuth\", \"$tgLocation\", \"$appTitle\", \"$projectUrl\", \"tgLoader\"];\n\n function ProjectsController(scope, q, rs, rootscope, navUrls, auth, location, appTitle, projectUrl, tgLoader) {\n var promise;\n this.scope = scope;\n this.q = q;\n this.rs = rs;\n this.rootscope = rootscope;\n this.navUrls = navUrls;\n this.auth = auth;\n this.location = location;\n this.appTitle = appTitle;\n this.projectUrl = projectUrl;\n this.appTitle.set(\"Projects\");\n if (!this.auth.isAuthenticated()) {\n this.location.path(this.navUrls.resolve(\"login\"));\n }\n this.user = this.auth.getUser();\n this.projects = [];\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this.scope.$emit(\"projects:loaded\");\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n promise[\"finally\"](tgLoader.pageLoaded);\n }\n\n ProjectsController.prototype.loadInitialData = function() {\n return this.rs.projects.list().then((function(_this) {\n return function(projects) {\n var project, _i, _len;\n _this.projects = {\n 'recents': projects.slice(0, 8),\n 'all': projects\n };\n for (_i = 0, _len = projects.length; _i < _len; _i++) {\n project = projects[_i];\n project.url = _this.projectUrl.get(project);\n }\n return projects;\n };\n })(this));\n };\n\n ProjectsController.prototype.newProject = function() {\n return this.rootscope.$broadcast(\"projects:create\");\n };\n\n ProjectsController.prototype.logout = function() {\n this.auth.logout();\n return this.location.path(this.navUrls.resolve(\"login\"));\n };\n\n return ProjectsController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectsController\", ProjectsController);\n\n ProjectController = (function(_super) {\n __extends(ProjectController, _super);\n\n ProjectController.$inject = [\"$scope\", \"$tgResources\", \"$tgRepo\", \"$routeParams\", \"$q\", \"$rootScope\", \"$appTitle\", \"$tgLocation\", \"$tgNavUrls\"];\n\n function ProjectController(scope, rs, repo, params, q, rootscope, appTitle, location, navUrls) {\n var promise;\n this.scope = scope;\n this.rs = rs;\n this.repo = repo;\n this.params = params;\n this.q = q;\n this.rootscope = rootscope;\n this.appTitle = appTitle;\n this.location = location;\n this.navUrls = navUrls;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this.appTitle.set(_this.scope.project.name);\n return _this.scope.$emit(\"regenerate:project-pagination\");\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n ProjectController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadPageData();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.scope.$emit(\"project:loaded\", _this.scope.project);\n };\n })(this));\n };\n\n ProjectController.prototype.loadPageData = function() {\n return this.q.all([this.loadProjectStats(), this.loadProject()]);\n };\n\n ProjectController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n return project;\n };\n })(this));\n };\n\n ProjectController.prototype.loadProjectStats = function() {\n return this.rs.projects.stats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n _this.scope.stats = stats;\n return stats;\n };\n })(this));\n };\n\n return ProjectController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectController\", ProjectController);\n\n ProjectsPaginationDirective = function($timeout) {\n var link;\n link = function($scope, $el, $attrs) {\n var checkButtonVisibility, container, containerSize, hasNextPage, hasPagination, hasPrevPage, hide, nextBtn, nextPage, pageSize, prevBtn, prevPage, remove, render, visible;\n prevBtn = $el.find(\".v-pagination-previous\");\n nextBtn = $el.find(\".v-pagination-next\");\n container = $el.find(\"ul\");\n pageSize = 0;\n containerSize = 0;\n render = function() {\n pageSize = $el.find(\".v-pagination-list\").height();\n if (container.find(\"li\").length) {\n if (hasPagination()) {\n if (hasNextPage()) {\n visible(nextBtn);\n } else {\n hide(nextBtn);\n }\n if (hasPrevPage()) {\n return visible(prevBtn);\n } else {\n return hide(prevBtn);\n }\n } else {\n return remove();\n }\n } else {\n return remove();\n }\n };\n hasPagination = function() {\n containerSize = container.height();\n return containerSize > pageSize;\n };\n hasPrevPage = function(top) {\n if (top == null) {\n top = -parseInt(container.css('top'), 10) || 0;\n }\n return top !== 0;\n };\n hasNextPage = function(top) {\n containerSize = container.height();\n if (!top) {\n top = -parseInt(container.css('top'), 10) || 0;\n }\n return containerSize > pageSize && top + pageSize < containerSize;\n };\n nextPage = function(callback) {\n var lastLi, maxTop, newTop, top;\n top = parseInt(container.css('top'), 10);\n newTop = top - pageSize;\n lastLi = $el.find(\".v-pagination-list li:last-child\");\n maxTop = -((lastLi.position().top + lastLi.outerHeight()) - pageSize);\n if (newTop < maxTop) {\n newTop = maxTop;\n }\n container.animate({\n \"top\": newTop\n }, callback);\n return newTop;\n };\n prevPage = function(callback) {\n var newTop, top;\n top = parseInt(container.css('top'), 10);\n newTop = top + pageSize;\n if (newTop > 0) {\n newTop = 0;\n }\n container.animate({\n \"top\": newTop\n }, callback);\n return newTop;\n };\n visible = function(element) {\n return element.css('visibility', 'visible');\n };\n hide = function(element) {\n return element.css('visibility', 'hidden');\n };\n checkButtonVisibility = function() {};\n remove = function() {\n container.css('top', 0);\n hide(prevBtn);\n return hide(nextBtn);\n };\n $el.on(\"click\", \".v-pagination-previous\", function(event) {\n var newTop;\n event.preventDefault();\n if (container.is(':animated')) {\n return;\n }\n visible(nextBtn);\n newTop = prevPage();\n if (!hasPrevPage(newTop)) {\n return hide(prevBtn);\n }\n });\n $el.on(\"click\", \".v-pagination-next\", function(event) {\n var newTop;\n event.preventDefault();\n if (container.is(':animated')) {\n return;\n }\n visible(prevBtn);\n newTop = -nextPage();\n if (!hasNextPage(newTop)) {\n return hide(nextBtn);\n }\n });\n $scope.$on(\"regenerate:project-pagination\", function() {\n remove();\n return render();\n });\n $(window).on(\"resize.projects-pagination\", render);\n return $scope.$on(\"$destroy\", function() {\n return $(window).off(\"resize.projects-pagination\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectsPagination\", ['$timeout', ProjectsPaginationDirective]);\n\n ProjectsListDirective = function($compile) {\n var link, template;\n template = _.template(\"
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \");\n link = function($scope, $el, $attrs, $ctrls) {\n var render;\n render = function(projects) {\n $el.html($compile(template({\n projects: projects\n }))($scope));\n return $scope.$emit(\"regenerate:project-pagination\");\n };\n return $scope.$watch(\"projects\", function(projects) {\n if (projects != null) {\n return render(projects);\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectsList\", [\"$compile\", ProjectsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/bind.coffee\n */\n\n(function() {\n var BindHtmlDirective, BindOnceAltDirective, BindOnceBindDirective, BindOnceHrefDirective, BindOnceHtmlDirective, BindOnceRefDirective, BindOnceSrcDirective, BindOnceTitleDirective, BindTitleDirective, bindOnce, module;\n\n bindOnce = this.taiga.bindOnce;\n\n BindOnceBindDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoBind, function(val) {\n return $el.text(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHtml, function(val) {\n return $el.html(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceRefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoRef, function(val) {\n return $el.html(\"#\" + val + \" \");\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceSrcDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoSrc, function(val) {\n return $el.attr(\"src\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHrefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHref, function(val) {\n return $el.attr(\"href\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceAltDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoAlt, function(val) {\n return $el.attr(\"alt\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoTitle, function(val) {\n return $el.attr(\"title\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgTitleHtml, function(val) {\n if (val != null) {\n return $el.attr(\"title\", val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n BindHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgBindHtml, function(val) {\n if (val != null) {\n return $el.html(val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaBase\");\n\n module.directive(\"tgBoBind\", BindOnceBindDirective);\n\n module.directive(\"tgBoHtml\", BindOnceHtmlDirective);\n\n module.directive(\"tgBoRef\", BindOnceRefDirective);\n\n module.directive(\"tgBoSrc\", BindOnceSrcDirective);\n\n module.directive(\"tgBoHref\", BindOnceHrefDirective);\n\n module.directive(\"tgBoAlt\", BindOnceAltDirective);\n\n module.directive(\"tgBoTitle\", BindOnceTitleDirective);\n\n module.directive(\"tgBindTitle\", BindTitleDirective);\n\n module.directive(\"tgBindHtml\", BindHtmlDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/conf.coffee\n */\n\n(function() {\n var ConfigurationService, defaults, module;\n\n defaults = {\n api: \"http://localhost:8000/api/v1/\",\n debug: true,\n lang: \"en\"\n };\n\n ConfigurationService = (function() {\n ConfigurationService.$inject = [\"localconf\"];\n\n function ConfigurationService(localconf) {\n this.config = _.merge(_.clone(defaults, true), localconf);\n }\n\n ConfigurationService.prototype.get = function(key, defaultValue) {\n if (defaultValue == null) {\n defaultValue = null;\n }\n if (_.has(this.config, key)) {\n return this.config[key];\n }\n return defaultValue;\n };\n\n return ConfigurationService;\n\n })();\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgConfig\", ConfigurationService);\n\n module.value(\"localconf\", null);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/filters.coffee\n */\n\n(function() {\n var FiltersStorageService, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n FiltersStorageService = (function(_super) {\n __extends(FiltersStorageService, _super);\n\n FiltersStorageService.$inject = [\"$tgStorage\", \"$routeParams\"];\n\n function FiltersStorageService(storage, params) {\n this.storage = storage;\n this.params = params;\n }\n\n FiltersStorageService.prototype.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n return FiltersStorageService;\n\n })(taiga.Service);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/http.coffee\n */\n\n(function() {\n var HttpService, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n HttpService = (function(_super) {\n __extends(HttpService, _super);\n\n HttpService.$inject = [\"$http\", \"$q\", \"$tgStorage\"];\n\n HttpService.prototype.headers = function() {\n var token;\n token = this.storage.get('token');\n if (token) {\n return {\n \"Authorization\": \"Bearer \" + token\n };\n }\n return {};\n };\n\n function HttpService(http, q, storage) {\n this.http = http;\n this.q = q;\n this.storage = storage;\n HttpService.__super__.constructor.call(this);\n }\n\n HttpService.prototype.request = function(options) {\n options.headers = _.merge({}, options.headers || {}, this.headers());\n if (_.isPlainObject(options.data)) {\n options.data = JSON.stringify(options.data);\n }\n return this.http(options);\n };\n\n HttpService.prototype.get = function(url, params, options) {\n options = _.merge({\n method: \"GET\",\n url: url\n }, options);\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.post = function(url, data, params, options) {\n options = _.merge({\n method: \"POST\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.put = function(url, data, params, options) {\n options = _.merge({\n method: \"PUT\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.patch = function(url, data, params, options) {\n options = _.merge({\n method: \"PATCH\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype[\"delete\"] = function(url, data, params, options) {\n options = _.merge({\n method: \"DELETE\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n return HttpService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgHttp\", HttpService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/i18n.coffee\n */\n\n(function() {\n var I18nDirective, I18nService, bindOnce, defaults, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n defaults = {\n ns: \"app\",\n fallbackLng: \"en\",\n async: false,\n lng: \"en\"\n };\n\n I18nService = (function(_super) {\n __extends(I18nService, _super);\n\n function I18nService(rootscope, localesEn) {\n this.rootscope = rootscope;\n this.options = _.clone(defaults, true);\n this.options.resStore = {\n en: {\n app: localesEn\n }\n };\n }\n\n I18nService.prototype.setLanguage = function(language) {\n i18n.setLng(language);\n this.rootscope.currentLang = language;\n return this.rootscope.$broadcast(\"i18n:changeLang\", language);\n };\n\n I18nService.prototype.initialize = function() {\n i18n.init(this.options);\n return this.rootscope.t = i18n.t;\n };\n\n I18nService.prototype.t = function(path, opts) {\n return i18n.t(path, opts);\n };\n\n return I18nService;\n\n })(taiga.Service);\n\n I18nDirective = function($rootscope, $i18n) {\n var link;\n link = function($scope, $el, $attrs) {\n var ns, options, opts, v, values, _i, _len, _ref, _results;\n values = $attrs.tr.split(\",\");\n options = $attrs.trOpts || '{}';\n opts = $scope.$eval(options);\n _results = [];\n for (_i = 0, _len = values.length; _i < _len; _i++) {\n v = values[_i];\n if (v.indexOf(\":\") === -1) {\n _results.push($el.html(_.escape($i18n.t(v, opts))));\n } else {\n _ref = v.split(\":\"), ns = _ref[0], v = _ref[1];\n _results.push($el.attr(ns, _.escape($i18n.t(v, opts))));\n }\n }\n return _results;\n };\n return {\n link: link,\n restrict: \"A\",\n scope: false\n };\n };\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgI18n\", [\"$rootScope\", \"localesEn\", I18nService]);\n\n module.directive(\"tr\", [\"$rootScope\", \"$tgI18n\", I18nDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/location.coffee\n */\n\n(function() {\n var locationFactory, module;\n\n locationFactory = function($location, $route, $rootscope) {\n $location.noreload = function(scope) {\n var lastRoute, un;\n lastRoute = $route.current;\n un = scope.$on(\"$locationChangeSuccess\", function() {\n $route.current = lastRoute;\n return un();\n });\n return $location;\n };\n return $location;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgLocation\", [\"$location\", \"$route\", \"$rootScope\", locationFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/model.coffee\n */\n\n(function() {\n var Model, ModelService, module, provider, taiga,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n Model = (function() {\n function Model(name, data, dataTypes) {\n this._attrs = data;\n this._name = name;\n this._dataTypes = dataTypes;\n this.setAttrs(data);\n this.initialize();\n }\n\n Model.prototype.clone = function() {\n var instance;\n instance = new Model(this._name, this._attrs, this._dataTypes);\n instance._modifiedAttrs = this._modifiedAttrs;\n instance._isModified = this._isModified;\n return instance;\n };\n\n Model.prototype.applyCasts = function() {\n var attrName, castMethod, castName, _ref, _results;\n _ref = this._dataTypes;\n _results = [];\n for (attrName in _ref) {\n castName = _ref[attrName];\n castMethod = service.casts[castName];\n if (!castMethod) {\n continue;\n }\n _results.push(this._attrs[attrName] = castMethod(this._attrs[attrName]));\n }\n return _results;\n };\n\n Model.prototype.getIdAttrName = function() {\n return \"id\";\n };\n\n Model.prototype.getName = function() {\n return this._name;\n };\n\n Model.prototype.getAttrs = function(patch) {\n if (patch == null) {\n patch = false;\n }\n if (this._attrs.version != null) {\n this._modifiedAttrs.version = this._attrs.version;\n }\n if (patch) {\n return _.extend({}, this._modifiedAttrs);\n }\n return _.extend({}, this._attrs, this._modifiedAttrs);\n };\n\n Model.prototype.setAttrs = function(attrs) {\n this._attrs = attrs;\n this._modifiedAttrs = {};\n this.applyCasts();\n return this._isModified = false;\n };\n\n Model.prototype.setAttr = function(name, value) {\n this._modifiedAttrs[name] = value;\n return this._isModified = true;\n };\n\n Model.prototype.initialize = function() {\n var getter, self, setter;\n self = this;\n getter = function(name) {\n return function() {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n return self[name];\n }\n if (__indexOf.call(_.keys(self._modifiedAttrs), name) < 0) {\n return self._attrs[name];\n }\n return self._modifiedAttrs[name];\n };\n };\n setter = function(name) {\n return function(value) {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n self[name] = value;\n return;\n }\n if (self._attrs[name] !== value) {\n self._modifiedAttrs[name] = value;\n self._isModified = true;\n } else {\n delete self._modifiedAttrs[name];\n }\n };\n };\n return _.each(this._attrs, function(value, name) {\n var options;\n options = {\n get: getter(name),\n set: setter(name),\n enumerable: true,\n configurable: true\n };\n return Object.defineProperty(self, name, options);\n });\n };\n\n Model.prototype.serialize = function() {\n var data;\n data = {\n \"data\": _.clone(this._attrs),\n \"name\": this._name\n };\n return JSON.stringify(data);\n };\n\n Model.prototype.isModified = function() {\n return this._isModified;\n };\n\n Model.prototype.isAttributeModified = function(attribute) {\n return this._modifiedAttrs[attribute] != null;\n };\n\n Model.prototype.markSaved = function() {\n this._isModified = false;\n this._attrs = this.getAttrs();\n return this._modifiedAttrs = {};\n };\n\n Model.prototype.revert = function() {\n this._modifiedAttrs = {};\n return this._isModified = false;\n };\n\n Model.desSerialize = function(sdata) {\n var ddata, model;\n ddata = JSON.parse(sdata);\n model = new Model(ddata.url, ddata.data);\n return model;\n };\n\n return Model;\n\n })();\n\n taiga = this.taiga;\n\n ModelService = (function(_super) {\n __extends(ModelService, _super);\n\n ModelService.$inject = [\"$q\", \"$tgUrls\", \"$tgStorage\", \"$tgHttp\"];\n\n function ModelService(q, urls, storage, http) {\n this.q = q;\n this.urls = urls;\n this.storage = storage;\n this.http = http;\n ModelService.__super__.constructor.call(this);\n }\n\n return ModelService;\n\n })(taiga.Service);\n\n provider = function($q, $http, $gmUrls, $gmStorage) {\n var service;\n service = {};\n service.make_model = function(name, data, cls, dataTypes) {\n if (cls == null) {\n cls = Model;\n }\n if (dataTypes == null) {\n dataTypes = {};\n }\n return new cls(name, data, dataTypes);\n };\n service.cls = Model;\n service.casts = {\n int: function(value) {\n return parseInt(value, 10);\n },\n float: function(value) {\n return parseFloat(value, 10);\n }\n };\n return service;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgModel\", [\"$q\", \"$http\", \"$tgUrls\", \"$tgStorage\", provider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/navurl.coffee\n */\n\n(function() {\n var NavigationUrlsDirective, NavigationUrlsService, bindOnce, module, taiga, trim,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\");\n\n NavigationUrlsService = (function(_super) {\n __extends(NavigationUrlsService, _super);\n\n function NavigationUrlsService() {\n this.urls = {};\n }\n\n NavigationUrlsService.prototype.update = function(urls) {\n return this.urls = _.merge({}, this.urls, urls || {});\n };\n\n NavigationUrlsService.prototype.formatUrl = function(url, ctx) {\n var replacer;\n if (ctx == null) {\n ctx = {};\n }\n replacer = function(match) {\n match = trim(match, \":\");\n return ctx[match] || \"undefined\";\n };\n return url.replace(/(:\\w+)/g, replacer);\n };\n\n NavigationUrlsService.prototype.resolve = function(name, ctx) {\n var url;\n url = this.urls[name];\n if (!url) {\n return \"\";\n }\n if (ctx) {\n return this.formatUrl(url, ctx);\n }\n return url;\n };\n\n return NavigationUrlsService;\n\n })(taiga.Service);\n\n module.service(\"$tgNavUrls\", NavigationUrlsService);\n\n NavigationUrlsDirective = function($navurls, $auth, $q, $location) {\n var bindOnceP, link, parseNav;\n bindOnceP = function($scope, attr) {\n var defered;\n defered = $q.defer();\n bindOnce($scope, attr, function(v) {\n return defered.resolve(v);\n });\n return defered.promise;\n };\n parseNav = function(data, $scope) {\n var name, params, promises, values, _ref;\n _ref = _.map(data.split(\":\"), trim), name = _ref[0], params = _ref[1];\n if (params) {\n params = _.map(params.split(\",\"), trim);\n } else {\n params = [];\n }\n values = _.map(params, function(x) {\n return trim(x.split(\"=\")[1]);\n });\n promises = _.map(values, function(x) {\n return bindOnceP($scope, x);\n });\n return $q.all(promises).then(function() {\n var item, key, options, value, _i, _len, _ref1;\n options = {};\n for (_i = 0, _len = params.length; _i < _len; _i++) {\n item = params[_i];\n _ref1 = _.map(item.split(\"=\"), trim), key = _ref1[0], value = _ref1[1];\n options[key] = $scope.$eval(value);\n }\n return [name, options];\n });\n };\n link = function($scope, $el, $attrs) {\n if ($el.is(\"a\")) {\n $el.attr(\"href\", \"#\");\n }\n $el.on(\"mouseenter\", function(event) {\n var target;\n target = $(event.currentTarget);\n if (!target.data(\"fullUrl\")) {\n return parseNav($attrs.tgNav, $scope).then(function(result) {\n var fullUrl, name, options, url, user;\n name = result[0], options = result[1];\n user = $auth.getUser();\n if (user) {\n options.user = user.username;\n }\n url = $navurls.resolve(name);\n fullUrl = $navurls.formatUrl(url, options);\n target.data(\"fullUrl\", fullUrl);\n if (target.is(\"a\")) {\n target.attr(\"href\", fullUrl);\n }\n return $el.on(\"click\", function(event) {\n event.preventDefault();\n target = $(event.currentTarget);\n if (target.hasClass('noclick')) {\n return;\n }\n fullUrl = target.data(\"fullUrl\");\n switch (event.which) {\n case 1:\n $location.url(fullUrl);\n return $scope.$apply();\n case 2:\n return window.open(fullUrl);\n }\n });\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNav\", [\"$tgNavUrls\", \"$tgAuth\", \"$q\", \"$tgLocation\", NavigationUrlsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/repository.coffee\n */\n\n(function() {\n var RepositoryService, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n RepositoryService = (function(_super) {\n __extends(RepositoryService, _super);\n\n RepositoryService.$inject = [\"$q\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\"];\n\n function RepositoryService(q, model, storage, http, urls) {\n this.q = q;\n this.model = model;\n this.storage = storage;\n this.http = http;\n this.urls = urls;\n RepositoryService.__super__.constructor.call(this);\n }\n\n RepositoryService.prototype.resolveUrlForModel = function(model) {\n var idAttrName;\n idAttrName = model.getIdAttrName();\n return \"\" + (this.urls.resolve(model.getName())) + \"/\" + model[idAttrName];\n };\n\n RepositoryService.prototype.resolveUrlForAttributeModel = function(model) {\n return this.urls.resolve(model.getName(), model.parent);\n };\n\n RepositoryService.prototype.create = function(name, data, dataTypes, extraParams) {\n var defered, promise, url;\n if (dataTypes == null) {\n dataTypes = {};\n }\n if (extraParams == null) {\n extraParams = {};\n }\n defered = this.q.defer();\n url = this.urls.resolve(name);\n promise = this.http.post(url, JSON.stringify(data));\n promise.success((function(_this) {\n return function(_data, _status) {\n return defered.resolve(_this.model.make_model(name, _data, null, dataTypes));\n };\n })(this));\n promise.error((function(_this) {\n return function(data, status) {\n return defered.reject(data);\n };\n })(this));\n return defered.promise;\n };\n\n RepositoryService.prototype.remove = function(model, params) {\n var defered, promise, url;\n if (params == null) {\n params = {};\n }\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http[\"delete\"](url, {}, params);\n promise.success(function(data, status) {\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(model);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAll = function(models, patch) {\n var promises;\n if (patch == null) {\n patch = true;\n }\n promises = _.map(models, (function(_this) {\n return function(x) {\n return _this.save(x, true);\n };\n })(this));\n return this.q.all(promises);\n };\n\n RepositoryService.prototype.save = function(model, patch) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForModel(model);\n data = JSON.stringify(model.getAttrs(patch));\n if (patch) {\n promise = this.http.patch(url, data);\n } else {\n promise = this.http.put(url, data);\n }\n promise.success((function(_this) {\n return function(data, status) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n return defered.resolve(model);\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAttribute = function(model, attribute, patch) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForAttributeModel(model);\n data = {};\n data[attribute] = model.getAttrs();\n if (patch) {\n promise = this.http.patch(url, data);\n } else {\n promise = this.http.put(url, data);\n }\n promise.success((function(_this) {\n return function(data, status) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n return defered.resolve(model);\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.refresh = function(model) {\n var defered, promise, url;\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http.get(url);\n promise.success(function(data, status) {\n model._modifiedAttrs = {};\n model._attrs = data;\n model._isModified = false;\n model.applyCasts();\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.queryMany = function(name, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneAttribute = function(name, id, attribute, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name, id);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var model;\n model = _this.model.make_model(name, data.data[attribute]);\n model.parent = id;\n return model;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOne = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = \"\" + url + \"/\" + id;\n }\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return _this.model.make_model(name, data.data);\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneRaw = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = \"\" + url + \"/\" + id;\n }\n httpOptions = _.merge({\n headers: {}\n }, options);\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryPaginated = function(name, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n httpOptions = _.merge({\n headers: {}\n }, options);\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var headers, result;\n headers = data.headers();\n result = {};\n result.models = _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n result.count = parseInt(headers[\"x-pagination-count\"], 10);\n result.current = parseInt(headers[\"x-pagination-current\"] || 1, 10);\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10);\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.resolve = function(options) {\n var cache, params;\n params = {};\n if (options.pslug != null) {\n params.project = options.pslug;\n }\n if (options.usref != null) {\n params.us = options.usref;\n }\n if (options.taskref != null) {\n params.task = options.taskref;\n }\n if (options.issueref != null) {\n params.issue = options.issueref;\n }\n if (options.sslug != null) {\n params.milestone = options.sslug;\n }\n if (options.wikipage != null) {\n params.wikipage = options.wikipage;\n }\n cache = !(options.wikipage || options.sslug);\n return this.queryOneRaw(\"resolver\", null, params, {\n cache: cache\n });\n };\n\n return RepositoryService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgRepo\", RepositoryService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/storage.coffee\n */\n\n(function() {\n var StorageService, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n StorageService = (function(_super) {\n __extends(StorageService, _super);\n\n StorageService.$inject = [\"$rootScope\"];\n\n function StorageService($rootScope) {\n StorageService.__super__.constructor.call(this);\n }\n\n StorageService.prototype.get = function(key, _default) {\n var serializedValue;\n serializedValue = localStorage.getItem(key);\n if (serializedValue === null) {\n return _default || null;\n }\n return JSON.parse(serializedValue);\n };\n\n StorageService.prototype.set = function(key, val) {\n if (_.isObject(key)) {\n return _.each(key, (function(_this) {\n return function(val, key) {\n return _this.set(key, val);\n };\n })(this));\n } else {\n return localStorage.setItem(key, JSON.stringify(val));\n }\n };\n\n StorageService.prototype.contains = function(key) {\n var value;\n value = this.get(key);\n return value !== null;\n };\n\n StorageService.prototype.remove = function(key) {\n return localStorage.removeItem(key);\n };\n\n StorageService.prototype.clear = function() {\n return localStorage.clear();\n };\n\n return StorageService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgStorage\", StorageService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/http.coffee\n */\n\n(function() {\n var UrlsService, format, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n format = function(fmt, obj) {\n obj = _.clone(obj);\n return fmt.replace(/%s/g, function(match) {\n return String(obj.shift());\n });\n };\n\n taiga = this.taiga;\n\n UrlsService = (function(_super) {\n __extends(UrlsService, _super);\n\n UrlsService.$inject = [\"$tgConfig\"];\n\n function UrlsService(config) {\n this.config = config;\n this.urls = {};\n this.mainUrl = config.get(\"api\");\n }\n\n UrlsService.prototype.update = function(urls) {\n return this.urls = _.merge(this.urls, urls);\n };\n\n UrlsService.prototype.resolve = function() {\n var args, name, url;\n args = _.toArray(arguments);\n if (args.length === 0) {\n throw Error(\"wrong arguments to setUrls\");\n }\n name = args.slice(0, 1)[0];\n url = format(this.urls[name], args.slice(1));\n return format(\"%s/%s\", [_.str.rtrim(this.mainUrl, \"/\"), _.str.ltrim(url, \"/\")]);\n };\n\n return UrlsService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service('$tgUrls', UrlsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/attachments.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($rootScope, $config, $urls, $model, $repo, $auth, $q) {\n var service;\n service = {};\n service.list = function(urlName, objectId, projectId) {\n var params;\n params = {\n object_id: objectId,\n project: projectId\n };\n return $repo.queryMany(urlName, params);\n };\n service.create = function(urlName, projectId, objectId, file) {\n var data, defered, maxFileSize, response, uploadComplete, uploadFailed, uploadProgress, xhr;\n defered = $q.defer();\n if (file === void 0) {\n defered.reject(null);\n return defered.promise;\n }\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered.reject(response);\n return defered.promise;\n }\n uploadProgress = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"in-progress\";\n file.size = sizeFormat(evt.total);\n file.progressMessage = \"upload \" + (sizeFormat(evt.loaded)) + \" of \" + (sizeFormat(evt.total));\n return file.progressPercent = \"\" + (Math.round((evt.loaded / evt.total) * 100)) + \"%\";\n });\n };\n })(this);\n uploadComplete = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n var data, model;\n file.status = \"done\";\n try {\n data = JSON.parse(evt.target.responseText);\n } catch (_error) {\n data = {};\n }\n model = $model.make_model(urlName, data);\n return defered.resolve(model);\n });\n };\n })(this);\n uploadFailed = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"error\";\n return defered.reject(\"fail\");\n });\n };\n })(this);\n data = new FormData();\n data.append(\"project\", projectId);\n data.append(\"object_id\", objectId);\n data.append(\"attached_file\", file);\n xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n xhr.open(\"POST\", $urls.resolve(urlName));\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + ($auth.getToken()));\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send(data);\n return defered.promise;\n };\n return function(instance) {\n return instance.attachments = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgAttachmentsResourcesProvider\", [\"$rootScope\", \"$tgConfig\", \"$tgUrls\", \"$tgModel\", \"$tgRepo\", \"$tgAuth\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/history.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(type, objectId) {\n return $repo.queryOneRaw(\"history/\" + type, objectId);\n };\n service.deleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = \"\" + url + \"/\" + objectId + \"/delete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.undeleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = \"\" + url + \"/\" + objectId + \"/undelete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.history = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgHistoryResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/projects.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.get = function(token) {\n return $repo.queryOne(\"invitations\", token);\n };\n return function(instance) {\n return instance.invitations = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgInvitationsResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/issues.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage, $q) {\n var filtersHashSuffix, hashSuffix, myFiltersHashSuffix, service;\n service = {};\n hashSuffix = \"issues-queryparams\";\n filtersHashSuffix = \"issues-filters\";\n myFiltersHashSuffix = \"issues-my-filters\";\n service.get = function(projectId, issueId) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n return $repo.queryOne(\"issues\", issueId, params);\n };\n service.getByRef = function(projectId, ref) {\n return $repo.queryOne(\"issues\", \"by_ref?project=\" + projectId + \"&ref=\" + ref);\n };\n service.list = function(projectId, filters, options) {\n var params;\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryPaginated(\"issues\", params, options);\n };\n service.bulkCreate = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-issues\");\n params = {\n project_id: projectId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", \"\" + projectId + \"/issues_stats\");\n };\n service.filtersData = function(projectId) {\n return $repo.queryOneRaw(\"projects\", \"\" + projectId + \"/issue_filters_data\");\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeFilters = function(projectSlug, params) {\n var hash, ns;\n ns = \"\" + projectSlug + \":\" + filtersHashSuffix;\n hash = generateHash([projectSlug, ns]);\n return $storage.set(hash, params);\n };\n service.getFilters = function(projectSlug) {\n var hash, ns;\n ns = \"\" + projectSlug + \":\" + filtersHashSuffix;\n hash = generateHash([projectSlug, ns]);\n return $storage.get(hash) || {};\n };\n service.storeMyFilters = function(projectId, myFilters) {\n var deferred, hash, ns, promise, url;\n deferred = $q.defer();\n url = $urls.resolve(\"user-storage\");\n ns = \"\" + projectId + \":\" + myFiltersHashSuffix;\n hash = generateHash([projectId, ns]);\n if (_.isEmpty(myFilters)) {\n promise = $http[\"delete\"](\"\" + url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function() {\n return deferred.resolve();\n });\n promise.then(null, function() {\n return deferred.reject();\n });\n } else {\n promise = $http.put(\"\" + url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function(data) {\n return deferred.resolve();\n });\n promise.then(null, function(data) {\n var innerPromise;\n innerPromise = $http.post(\"\" + url, {\n key: hash,\n value: myFilters\n });\n innerPromise.then(function() {\n return deferred.resolve();\n });\n return innerPromise.then(null, function() {\n return deferred.reject();\n });\n });\n }\n return deferred.promise;\n };\n service.getMyFilters = function(projectId) {\n var deferred, hash, ns, promise, url;\n deferred = $q.defer();\n url = $urls.resolve(\"user-storage\");\n ns = \"\" + projectId + \":\" + myFiltersHashSuffix;\n hash = generateHash([projectId, ns]);\n promise = $http.get(\"\" + url + \"/\" + hash);\n promise.then(function(data) {\n return deferred.resolve(data.data.value);\n });\n promise.then(null, function(data) {\n return deferred.resolve({});\n });\n return deferred.promise;\n };\n return function(instance) {\n return instance.issues = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgIssuesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/kanban.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($storage) {\n var hashSuffixStatusColumnModes, hashSuffixStatusViewModes, service;\n service = {};\n hashSuffixStatusViewModes = \"kanban-statusviewmodels\";\n hashSuffixStatusColumnModes = \"kanban-statuscolumnmodels\";\n service.storeStatusViewModes = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusViewModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusViewModes = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusViewModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.kanban = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgKanbanResourcesProvider\", [\"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/mdrender.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.render = function(projectId, content) {\n var params, url;\n if ((content == null) || content === \"\") {\n content = ' ';\n }\n params = {\n project_id: projectId,\n content: content\n };\n url = $urls.resolve(\"wiki\");\n return $http.post(\"\" + url + \"/render\", params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.mdrender = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMdRenderResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"memberships\", id);\n };\n service.list = function(projectId, filters, enablePagination) {\n var options, params;\n if (enablePagination == null) {\n enablePagination = true;\n }\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n if (enablePagination) {\n return $repo.queryPaginated(\"memberships\", params);\n }\n return $repo.queryMany(\"memberships\", params, options = {\n enablePagination: enablePagination\n });\n };\n service.listByUser = function(userId, filters) {\n var params;\n params = {\n user: userId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryPaginated(\"memberships\", params);\n };\n service.resendInvitation = function(id) {\n var url;\n url = $urls.resolve(\"memberships\");\n return $http.post(\"\" + url + \"/\" + id + \"/resend_invitation\", {});\n };\n service.bulkCreateMemberships = function(projectId, data, invitation_extra_text) {\n var params, url;\n url = $urls.resolve(\"bulk-create-memberships\");\n params = {\n project_id: projectId,\n bulk_memberships: data,\n invitation_extra_text: invitation_extra_text\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.memberships = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMembershipsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.list = function(projectId, module) {\n return $repo.queryOneAttribute(\"project-modules\", projectId, module);\n };\n return function(instance) {\n return instance.modules = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgModulesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"notify-policies\", id);\n };\n service.list = function(filters) {\n var params;\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"notify-policies\", params);\n };\n return function(instance) {\n return instance.notifyPolicies = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgNotifyPoliciesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/projects.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"projects\", id);\n };\n service.getBySlug = function(slug) {\n return $repo.queryOne(\"projects\", \"by_slug?slug=\" + slug);\n };\n service.list = function() {\n return $repo.queryMany(\"projects\");\n };\n service.templates = function() {\n return $repo.queryMany(\"project-templates\");\n };\n service.usersList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"users\", params);\n };\n service.rolesList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"roles\", params);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", \"\" + projectId + \"/stats\");\n };\n service.leave = function(projectId) {\n var url;\n url = \"\" + ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/leave\";\n return $http.post(url);\n };\n service.memberStats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", \"\" + projectId + \"/member_stats\");\n };\n service.tagsColors = function(id) {\n return $repo.queryOne(\"projects\", \"\" + id + \"/tags_colors\");\n };\n return function(instance) {\n return instance.projects = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgProjectsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"roles\", id);\n };\n service.list = function(projectId) {\n return $repo.queryMany(\"roles\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.roles = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgRolesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/search.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service[\"do\"] = function(projectId, term) {\n var params, url;\n url = $urls.resolve(\"search\");\n params = {\n project: projectId,\n text: term,\n get_all: false\n };\n return $http.get(url, params).then(function(data) {\n return data.data;\n });\n };\n return function(instance) {\n return instance.search = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSearchResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/sprints.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $model, $storage) {\n var hashSuffixUserstories, service;\n service = {};\n hashSuffixUserstories = \"userstories-queryparams\";\n service.get = function(projectId, sprintId) {\n return $repo.queryOne(\"milestones\", sprintId).then(function(sprint) {\n var uses;\n service.storeUserstoriesQueryParams(projectId, {\n \"milestone\": sprintId\n });\n uses = sprint.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n sprint._attrs.user_stories = uses;\n return sprint;\n });\n };\n service.stats = function(projectId, sprintId) {\n return $repo.queryOneRaw(\"milestones\", \"\" + sprintId + \"/stats\");\n };\n service.list = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"milestones\", params).then((function(_this) {\n return function(milestones) {\n var m, uses, _i, _len;\n for (_i = 0, _len = milestones.length; _i < _len; _i++) {\n m = milestones[_i];\n uses = m.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n m._attrs.user_stories = uses;\n }\n return milestones;\n };\n })(this));\n };\n service.storeUserstoriesQueryParams = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixUserstories;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n return function(instance) {\n return instance.sprints = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSprintsResourcesProvider\", [\"$tgRepo\", \"$tgModel\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/tasks.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, hashSuffixStatusColumnModes, hashSuffixUsRowModes, service;\n service = {};\n hashSuffix = \"tasks-queryparams\";\n hashSuffixStatusColumnModes = \"tasks-statuscolumnmodels\";\n hashSuffixUsRowModes = \"tasks-usrowmodels\";\n service.get = function(projectId, taskId) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n return $repo.queryOne(\"tasks\", taskId, params);\n };\n service.getByRef = function(projectId, ref) {\n return $repo.queryOne(\"tasks\", \"by_ref?project=\" + projectId + \"&ref=\" + ref);\n };\n service.list = function(projectId, sprintId, userStoryId) {\n var params;\n if (sprintId == null) {\n sprintId = null;\n }\n if (userStoryId == null) {\n userStoryId = null;\n }\n params = {\n project: projectId\n };\n if (sprintId) {\n params.milestone = sprintId;\n }\n if (userStoryId) {\n params.user_story = userStoryId;\n }\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"tasks\", params);\n };\n service.bulkCreate = function(projectId, sprintId, usId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-tasks\");\n params = {\n project_id: projectId,\n sprint_id: sprintId,\n us_id: usId,\n bulk_tasks: data\n };\n return $http.post(url, params).then(function(result) {\n return result.data;\n });\n };\n service.bulkUpdateTaskTaskboardOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-task-taskboard-order\");\n params = {\n project_id: projectId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(type, params);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeUsRowModes = function(projectId, sprintId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.set(hash, params);\n };\n service.getUsRowModes = function(projectId, sprintId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.tasks = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgTasksResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($config, $repo, $http, $urls, $q) {\n var service;\n service = {};\n service.changeAvatar = function(file) {\n var data, defered, maxFileSize, options, response, url;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered = $q.defer();\n defered.reject(response);\n return defered.promise;\n }\n data = new FormData();\n data.append('avatar', file);\n options = {\n transformRequest: angular.identity,\n headers: {\n 'Content-Type': void 0\n }\n };\n url = \"\" + ($urls.resolve(\"users\")) + \"/change_avatar\";\n return $http.post(url, data, {}, options);\n };\n service.removeAvatar = function() {\n var url;\n url = \"\" + ($urls.resolve(\"users\")) + \"/remove_avatar\";\n return $http.post(url);\n };\n service.changePassword = function(currentPassword, newPassword) {\n var data, url;\n url = \"\" + ($urls.resolve(\"users\")) + \"/change_password\";\n data = {\n current_password: currentPassword,\n password: newPassword\n };\n return $http.post(url, data);\n };\n return function(instance) {\n return instance.userSettings = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserSettingsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/userstories.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"userstories-queryparams\";\n service.get = function(projectId, usId) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n return $repo.queryOne(\"userstories\", usId, params);\n };\n service.getByRef = function(projectId, ref) {\n return $repo.queryOne(\"userstories\", \"by_ref?project=\" + projectId + \"&ref=\" + ref);\n };\n service.listUnassigned = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId,\n \"milestone\": \"null\"\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", params);\n };\n service.listAll = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", params);\n };\n service.bulkCreate = function(projectId, status, bulk) {\n var data, url;\n data = {\n project_id: projectId,\n status_id: status,\n bulk_stories: bulk\n };\n url = $urls.resolve(\"bulk-create-us\");\n return $http.post(url, data);\n };\n service.bulkUpdateBacklogOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-backlog-order\");\n params = {\n project_id: projectId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateSprintOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-sprint-order\");\n params = {\n project_id: projectId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateKanbanOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-kanban-order\");\n params = {\n project_id: projectId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = \"\" + projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeShowTags = function(projectId, showTags) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.set(hash, showTags);\n };\n service.getShowTags = function(projectId) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.get(hash) || null;\n };\n return function(instance) {\n return instance.userstories = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserstoriesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/wikis.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(wikiId) {\n return $repo.queryOne(\"wiki\", wikiId);\n };\n service.getBySlug = function(projectId, slug) {\n return $repo.queryOne(\"wiki\", \"by_slug?project=\" + projectId + \"&slug=\" + slug);\n };\n service.listLinks = function(projectId) {\n return $repo.queryMany(\"wiki-links\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.wiki = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWikiResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/main.coffee\n */\n\n(function() {\n var UserChangePasswordController, UserChangePasswordDirective, debounce, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserChangePasswordController = (function(_super) {\n __extends(UserChangePasswordController, _super);\n\n UserChangePasswordController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\"];\n\n function UserChangePasswordController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.scope.sectionName = \"Change Password\";\n this.scope.project = {};\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserChangePasswordController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n UserChangePasswordController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this));\n };\n\n return UserChangePasswordController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserChangePasswordController\", UserChangePasswordController);\n\n UserChangePasswordDirective = function($rs, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs, ctrl) {\n var submit, submitButton;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if ($scope.newPassword1 !== $scope.newPassword2) {\n $confirm.notify('error', \"The passwords dosn't match\");\n return;\n }\n $loading.start(submitButton);\n promise = $rs.userSettings.changePassword($scope.currentPassword, $scope.newPassword1);\n promise.then(function() {\n $loading.finish(submitButton);\n return $confirm.notify('success');\n });\n return promise.then(null, function(response) {\n $loading.finish(submitButton);\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserChangePassword\", [\"$tgResources\", \"$tgConfirm\", \"$tgLoading\", UserChangePasswordDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/lightboxes.coffee\n */\n\n(function() {\n var DeleteUserDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n DeleteUserDirective = function($repo, $rootscope, $auth, $location, $navUrls, lightboxService) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n $scope.$on(\"deletelightbox:new\", function(ctx, user) {\n return lightboxService.open($el);\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var promise;\n promise = $repo.remove($scope.user);\n promise.then(function(data) {\n lightboxService.close($el);\n $auth.logout();\n return $location.path($navUrls.resolve(\"login\"));\n });\n return promise.then(null, function() {\n return console.log(\"FAIL\");\n });\n };\n $el.on(\"click\", \".button-red\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n return $el.on(\"click\", \".button-green\", debounce(2000, function(event) {\n event.preventDefault();\n return submit();\n }));\n };\n return {\n link: link,\n templateUrl: \"/partials/views/modules/lightbox-delete-account.html\"\n };\n };\n\n module.directive(\"tgLbDeleteUser\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"lightboxService\", DeleteUserDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/main.coffee\n */\n\n(function() {\n var TaigaAvatarModelDirective, UserAvatarDirective, UserProfileDirective, UserSettingsController, debounce, mixOf, module, sizeFormat, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n sizeFormat = this.taiga.sizeFormat;\n\n module = angular.module(\"taigaUserSettings\");\n\n debounce = this.taiga.debounce;\n\n UserSettingsController = (function(_super) {\n __extends(UserSettingsController, _super);\n\n UserSettingsController.$inject = [\"$scope\", \"$rootScope\", \"$tgConfig\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\"];\n\n function UserSettingsController(scope, rootscope, config, repo, confirm, rs, params, q, location, navUrls, auth) {\n var maxFileSize, promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.config = config;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.scope.sectionName = \"User Profile\";\n this.scope.project = {};\n this.scope.user = this.auth.getUser();\n maxFileSize = this.config.get(\"maxUploadFileSize\", null);\n if (maxFileSize) {\n this.scope.maxFileSizeMsg = \"[Max, size: \" + (sizeFormat(maxFileSize));\n }\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserSettingsController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n UserSettingsController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this));\n };\n\n UserSettingsController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.user);\n };\n\n return UserSettingsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserSettingsController\", UserSettingsController);\n\n UserProfileDirective = function($confirm, $auth, $repo) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var changeEmail, form, onError, onSuccess;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n changeEmail = $scope.user.isAttributeModified(\"email\");\n onSuccess = function(data) {\n $auth.setUser($scope.user);\n if (changeEmail) {\n return $confirm.success(\"Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address\");\n } else {\n return $confirm.notify('success');\n }\n };\n onError = function(data) {\n form.setErrors(data);\n return $confirm.notify('error', data._error_message);\n };\n return $repo.save($scope.user).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".submit-button\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserProfile\", [\"$tgConfirm\", \"$tgAuth\", \"$tgRepo\", UserProfileDirective]);\n\n UserAvatarDirective = function($auth, $model, $rs, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, showSizeInfo;\n showSizeInfo = function() {\n return $el.find(\".size-info\").removeClass(\"hidden\");\n };\n onSuccess = function(response) {\n var user;\n user = $model.make_model(\"users\", response.data);\n $auth.setUser(user);\n $scope.user = user;\n $el.find('.overlay').hide();\n return $confirm.notify('success');\n };\n onError = function(response) {\n if (response.status === 413) {\n showSizeInfo();\n }\n $el.find('.overlay').hide();\n return $confirm.notify('error', response.data._error_message);\n };\n $el.on(\"click\", \".button.change\", function() {\n return $el.find(\"#avatar-field\").click();\n });\n $el.on(\"change\", \"#avatar-field\", function(event) {\n if ($scope.avatarAttachment) {\n $el.find('.overlay').show();\n return $rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess, onError);\n }\n });\n $el.on(\"click\", \"a.use-gravatar\", function(event) {\n $el.find('.overlay').show();\n return $rs.userSettings.removeAvatar().then(onSuccess, onError);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserAvatar\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", UserAvatarDirective]);\n\n TaigaAvatarModelDirective = function($parse) {\n var link;\n link = function($scope, $el, $attrs) {\n var model, modelSetter;\n model = $parse($attrs.tgAvatarModel);\n modelSetter = model.assign;\n return $el.bind('change', function() {\n return $scope.$apply(function() {\n return modelSetter($scope, $el[0].files[0]);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive('tgAvatarModel', ['$parse', TaigaAvatarModelDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/nav.coffee\n */\n\n(function() {\n var UserSettingsNavigationDirective, module;\n\n UserSettingsNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgUserSettingsNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#usersettingsmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaUserSettings\");\n\n module.directive(\"tgUserSettingsNavigation\", UserSettingsNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/notifications.coffee\n */\n\n(function() {\n var UserNotificationsController, UserNotificationsDirective, UserNotificationsListDirective, bindOnce, mixOf, module, taiga,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserNotificationsController = (function(_super) {\n __extends(UserNotificationsController, _super);\n\n UserNotificationsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\"];\n\n function UserNotificationsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.scope.sectionName = \"Email Notifications\";\n this.scope.project = {};\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserNotificationsController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n _this.scope.project = project;\n _this.scope.$emit('project:loaded', project);\n return project;\n };\n })(this));\n };\n\n UserNotificationsController.prototype.loadNotifyPolicies = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n UserNotificationsController.prototype.loadInitialData = function() {\n var promise;\n promise = this.repo.resolve({\n pslug: this.params.pslug\n }).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.loadNotifyPolicies();\n };\n })(this));\n };\n\n return UserNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserNotificationsController\", UserNotificationsController);\n\n UserNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotifications\", UserNotificationsDirective);\n\n UserNotificationsListDirective = function($repo, $confirm) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\\">\\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\n \\\" id=\\\"policy-all-<%- notifyPolicy.id %>\\\"\\n value=\\\"2\\\" <% if (notifyPolicy.notify_level == 2) { %>checked=\\\"checked\\\"<% } %>/>\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-involved-<%- notifyPolicy.id %>\\\"\\n value=\\\"1\\\" <% if (notifyPolicy.notify_level == 1) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-none-<%- notifyPolicy.id %>\\\"\\n value=\\\"3\\\" <% if (notifyPolicy.notify_level == 3) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n $el.off();\n $el.html(template({\n notifyPolicies: $scope.notifyPolicies\n }));\n return $el.on(\"change\", \"input[type=radio]\", function(event) {\n var onError, onSuccess, policy, policyIndex, prev_level, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.parents(\".policy-table-row\").data('index');\n policy = $scope.notifyPolicies[policyIndex];\n prev_level = policy.notify_level;\n policy.notify_level = parseInt(target.val(), 10);\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n return target.parents(\".policy-table-row\").find(\"input[value=\" + prev_level + \"]\").prop(\"checked\", true);\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", UserNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/integrations/github.coffee\n */\n\n(function() {\n var AUTH_URL, GithubLoginButtonDirective, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaIntegrations\");\n\n AUTH_URL = \"https://github.com/login/oauth/authorize\";\n\n GithubLoginButtonDirective = function($window, $params, $location, $config, $events, $confirm, $auth, $navUrls, $loader) {\n var link, template;\n template = \"\\n \\n Login with Github\\n\";\n link = function($scope, $el, $attrs) {\n var clientId, loginOnError, loginOnSuccess, loginWithGitHubAccount, renderGitHubButton;\n clientId = $config.get(\"gitHubClientId\", null);\n if (!clientId) {\n return;\n }\n renderGitHubButton = function() {\n if (clientId) {\n return $el.html(template);\n }\n };\n loginOnSuccess = function(response) {\n var nextUrl;\n if ($params.next && $params.next !== $navUrls.resolve(\"login\")) {\n nextUrl = $params.next;\n } else {\n nextUrl = $navUrls.resolve(\"home\");\n }\n $events.setupConnection();\n $location.search(\"next\", null);\n $location.search(\"token\", null);\n $location.search(\"state\", null);\n $location.search(\"code\", null);\n return $location.path(nextUrl);\n };\n loginOnError = function(response) {\n $location.search(\"state\", null);\n $location.search(\"code\", null);\n $loader.pageLoaded();\n if (response.data.error_message) {\n return $confirm.notify(\"light-error\", response.data.error_message);\n } else {\n return $confirm.notify(\"light-error\", \"Our Oompa Loompas have not been able to get you credentials from GitHub.\");\n }\n };\n loginWithGitHubAccount = function() {\n var code, data, token, type;\n type = $params.state;\n code = $params.code;\n token = $params.token;\n if (!(type === \"github\" && code)) {\n return;\n }\n $loader.start();\n data = {\n code: code,\n token: token\n };\n return $auth.login(data, type).then(loginOnSuccess, loginOnError);\n };\n renderGitHubButton();\n loginWithGitHubAccount();\n $el.on(\"click\", \".button-github\", function(event) {\n var redirectToUri, url;\n redirectToUri = $location.absUrl();\n url = \"\" + AUTH_URL + \"?client_id=\" + clientId + \"&redirect_uri=\" + redirectToUri + \"&state=github&scope=user:email\";\n return $window.location.href = url;\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n template: \"\"\n };\n };\n\n module.directive(\"tgGithubLoginButton\", [\"$window\", '$routeParams', \"$tgLocation\", \"$tgConfig\", \"$tgEvents\", \"$tgConfirm\", \"$tgAuth\", \"$tgNavUrls\", \"tgLoader\", GithubLoginButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: plugins/humanshtml/humanshtml.coffee\n */\n\n(function() {\n var configure, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaPlugins\", [\"ngRoute\"]);\n\n configure = function($routeProvider) {\n return $routeProvider.when(\"/humans.html\", {\n \"templateUrl\": \"/plugins/humanshtml/templates/humans.html\"\n });\n };\n\n module.config([\"$routeProvider\", configure]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: plugins/terms/terms.coffee\n */\n\n(function() {\n var TermsNoticeDirective, module, taiga, template;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaPlugins\", [\"ngRoute\"]);\n\n template = _.template(\"

    \\n By clicking \\\"Sign up\\\", you agree to our
    \\n \\\" title=\\\"See terms of service\\\" target=\\\"_blank\\\"> terms of service\\n and\\n \\\" title=\\\"See privacy policy\\\" target=\\\"_blank\\\"> privacy policy.\\n

    \");\n\n TermsNoticeDirective = function($config) {\n var privacyPolicyUrl, templateFn, termsOfServiceUrl;\n privacyPolicyUrl = $config.get(\"privacyPolicyUrl\");\n termsOfServiceUrl = $config.get(\"termsOfServiceUrl\");\n templateFn = function() {\n var ctx;\n if (!(privacyPolicyUrl && termsOfServiceUrl)) {\n return \"\";\n }\n ctx = {\n termsUrl: termsOfServiceUrl,\n privacyUrl: privacyPolicyUrl\n };\n return template(ctx);\n };\n return {\n scope: {},\n restrict: \"AE\",\n template: templateFn\n };\n };\n\n module.directive(\"tgTermsNotice\", [\"$tgConfig\", TermsNoticeDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014 Andrey Antukh \n * Copyright (C) 2014 Jesús Espino Garcia \n * Copyright (C) 2014 David Barragán Merino \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: pluggins/main.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaPlugins\", [\"ngRoute\"]);\n\n}).call(this);\n","angular.module('taigaBase').value('localesEn', {\n \"checksley\": {\n \"defaultMessage\": \"This value seems to be invalid.\",\n \"type-email\": \"This value should be a valid email.\",\n \"type-url\": \"This value should be a valid url.\",\n \"type-urlstrict\": \"This value should be a valid url.\",\n \"type-number\": \"This value should be a valid number.\",\n \"type-digits\": \"This value should be digits.\",\n \"type-dateIso\": \"This value should be a valid date (YYYY-MM-DD).\",\n \"type-alphanum\": \"This value should be alphanumeric.\",\n \"type-phone\": \"This value should be a valid phone number.\",\n \"notnull\": \"This value should not be null.\",\n \"notblank\": \"This value should not be blank.\",\n \"required\": \"This value is required.\",\n \"regexp\": \"This value seems to be invalid.\",\n \"min\": \"This value should be greater than or equal to %s.\",\n \"max\": \"This value should be lower than or equal to %s.\",\n \"range\": \"This value should be between %s and %s.\",\n \"minlength\": \"This value is too short. It should have %s characters or more.\",\n \"maxlength\": \"This value is too long. It should have %s characters or less.\",\n \"rangelength\": \"This value length is invalid. It should be between %s and %s characters long.\",\n \"mincheck\": \"You must select at least %s choices.\",\n \"maxcheck\": \"You must select %s choices or less.\",\n \"rangecheck\": \"You must select between %s and %s choices.\",\n \"equalto\": \"This value should be the same.\"\n },\n \"common\": {\n \"subject\": \"Subject\",\n \"save\": \"Save\",\n \"blocked\": \"Blocked\",\n \"cancel\": \"Cancel\",\n \"status\": \"Status\",\n \"new-bulk\": \"New bulk insert\",\n \"one-item-line\": \"One item per line...\"\n },\n \"pagination\": {\n \"next\": \"Next\",\n \"prev\": \"Previous\"\n },\n \"markdown-editor\": {\n \"heading-1\": \"First Level Heading\",\n \"heading-2\": \"Second Level Heading\",\n \"heading-3\": \"Third Level Heading\",\n \"bold\": \"Bold\",\n \"italic\": \"Italic\",\n \"strike\": \"Strike\",\n \"bulleted-list\": \"Bulleted List\",\n \"numeric-list\": \"Numeric List\",\n \"picture\": \"Picture\",\n \"link\": \"Link\",\n \"quotes\": \"Quotes\",\n \"code-block\": \"Code Block / Code\",\n \"preview\": \"Preview\",\n \"help\": \"Help\",\n \"placeholder\": \"Your title here...\",\n \"link-placeholder\": \"Your text to link here...\"\n },\n \"us\": {\n \"title-new\": \"New User Story\",\n \"team-requirement\": \"Team Requirement\",\n \"client-requirement\": \"Client Requirement\"\n }\n}\n);"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/js/conf.js b/dist/js/conf.js new file mode 100644 index 0000000..76425ed --- /dev/null +++ b/dist/js/conf.js @@ -0,0 +1,11 @@ +angular.module('taigaBase').value('localconf', { + "api": "http://localhost:8000/api/v1/", + "eventsUrl": null, + "debug": true, + "publicRegisterEnabled": true, + "feedbackEnabled": true, + "privacyPolicyUrl": null, + "termsOfServiceUrl": null, + "maxUploadFileSize": null, + "gitHubClientId": null +}); diff --git a/dist/js/libs.js b/dist/js/libs.js new file mode 100644 index 0000000..a4c490d --- /dev/null +++ b/dist/js/libs.js @@ -0,0 +1,37 @@ +function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length*chrsz))}function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length*chrsz))}function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length*chrsz))}function hex_hmac_sha1(key,data){return binb2hex(core_hmac_sha1(key,data))}function b64_hmac_sha1(key,data){return binb2b64(core_hmac_sha1(key,data))}function str_hmac_sha1(key,data){return binb2str(core_hmac_sha1(key,data))}function sha1_vm_test(){return"a9993e364706816aba3e25717850c26c9cd0d89d"==hex_sha1("abc")}function core_sha1(x,len){x[len>>5]|=128<<24-len%32,x[(len+64>>9<<4)+15]=len;for(var w=Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776,i=0;ij;j++){w[j]=16>j?x[i+j]:rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j)));e=d,d=c,c=rol(b,30),b=a,a=t}a=safe_add(a,olda),b=safe_add(b,oldb),c=safe_add(c,oldc),d=safe_add(d,oldd),e=safe_add(e,olde)}return Array(a,b,c,d,e)}function sha1_ft(t,b,c,d){return 20>t?b&c|~b&d:40>t?b^c^d:60>t?b&c|b&d|c&d:b^c^d}function sha1_kt(t){return 20>t?1518500249:40>t?1859775393:60>t?-1894007588:-899497514}function core_hmac_sha1(key,data){var bkey=str2binb(key);bkey.length>16&&(bkey=core_sha1(bkey,key.length*chrsz));for(var ipad=Array(16),opad=Array(16),i=0;16>i;i++)ipad[i]=909522486^bkey[i],opad[i]=1549556828^bkey[i];var hash=core_sha1(ipad.concat(str2binb(data)),512+data.length*chrsz);return core_sha1(opad.concat(hash),672)}function safe_add(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw}function rol(num,cnt){return num<>>32-cnt}function str2binb(str){for(var bin=Array(),mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<32-chrsz-i%32;return bin}function binb2str(bin){for(var str="",mask=(1<>5]>>>32-chrsz-i%32&mask);return str}function binb2hex(binarray){for(var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef",str="",i=0;i<4*binarray.length;i++)str+=hex_tab.charAt(binarray[i>>2]>>8*(3-i%4)+4&15)+hex_tab.charAt(binarray[i>>2]>>8*(3-i%4)&15);return str}function binb2b64(binarray){for(var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",str="",i=0;i<4*binarray.length;i+=3)for(var triplet=(binarray[i>>2]>>8*(3-i%4)&255)<<16|(binarray[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|binarray[i+2>>2]>>8*(3-(i+2)%4)&255,j=0;4>j;j++)str+=8*i+6*j>32*binarray.length?b64pad:tab.charAt(triplet>>6*(3-j)&63);return str}!function(global,factory){"object"==typeof module&&"object"==typeof module.exports?module.exports=global.document?factory(global,!0):function(w){if(!w.document)throw new Error("jQuery requires a window with a document");return factory(w)}:factory(global)}("undefined"!=typeof window?window:this,function(window,noGlobal){function isArraylike(obj){var length=obj.length,type=jQuery.type(obj);return"function"===type||jQuery.isWindow(obj)?!1:1===obj.nodeType&&length?!0:"array"===type||0===length||"number"==typeof length&&length>0&&length-1 in obj}function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier))return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not});if(qualifier.nodeType)return jQuery.grep(elements,function(elem){return elem===qualifier!==not});if("string"==typeof qualifier){if(risSimple.test(qualifier))return jQuery.filter(qualifier,elements,not);qualifier=jQuery.filter(qualifier,elements)}return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>=0!==not})}function sibling(cur,dir){for(;(cur=cur[dir])&&1!==cur.nodeType;);return cur}function createOptions(options){var object=optionsCache[options]={};return jQuery.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=!0}),object}function completed(){document.removeEventListener("DOMContentLoaded",completed,!1),window.removeEventListener("load",completed,!1),jQuery.ready()}function Data(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=jQuery.expando+Data.uid++}function dataAttr(elem,key,data){var name;if(void 0===data&&1===elem.nodeType)if(name="data-"+key.replace(rmultiDash,"-$1").toLowerCase(),data=elem.getAttribute(name),"string"==typeof data){try{data="true"===data?!0:"false"===data?!1:"null"===data?null:+data+""===data?+data:rbrace.test(data)?jQuery.parseJSON(data):data}catch(e){}data_user.set(elem,key,data)}else data=void 0;return data}function returnTrue(){return!0}function returnFalse(){return!1}function safeActiveElement(){try{return document.activeElement}catch(err){}}function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table")&&jQuery.nodeName(11!==content.nodeType?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function disableScript(elem){return elem.type=(null!==elem.getAttribute("type"))+"/"+elem.type,elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);return match?elem.type=match[1]:elem.removeAttribute("type"),elem}function setGlobalEval(elems,refElements){for(var i=0,l=elems.length;l>i;i++)data_priv.set(elems[i],"globalEval",!refElements||data_priv.get(refElements[i],"globalEval"))}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(1===dest.nodeType){if(data_priv.hasData(src)&&(pdataOld=data_priv.access(src),pdataCur=data_priv.set(dest,pdataOld),events=pdataOld.events)){delete pdataCur.handle,pdataCur.events={};for(type in events)for(i=0,l=events[type].length;l>i;i++)jQuery.event.add(dest,type,events[type][i])}data_user.hasData(src)&&(udataOld=data_user.access(src),udataCur=jQuery.extend({},udataOld),data_user.set(dest,udataCur))}}function getAll(context,tag){var ret=context.getElementsByTagName?context.getElementsByTagName(tag||"*"):context.querySelectorAll?context.querySelectorAll(tag||"*"):[];return void 0===tag||tag&&jQuery.nodeName(context,tag)?jQuery.merge([context],ret):ret}function fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase();"input"===nodeName&&rcheckableType.test(src.type)?dest.checked=src.checked:("input"===nodeName||"textarea"===nodeName)&&(dest.defaultValue=src.defaultValue)}function actualDisplay(name,doc){var style,elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=window.getDefaultComputedStyle&&(style=window.getDefaultComputedStyle(elem[0]))?style.display:jQuery.css(elem[0],"display");return elem.detach(),display}function defaultDisplay(nodeName){var doc=document,display=elemdisplay[nodeName];return display||(display=actualDisplay(nodeName,doc),"none"!==display&&display||(iframe=(iframe||jQuery("

    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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/fonts/opensans-regular.ttf b/dist/fonts/opensans-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c537f8382a42986cc5e0d5a06b1460df4f0a5e25 GIT binary patch literal 38232 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/opensans-regular.woff b/dist/fonts/opensans-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e231183dce4c7b452afc9e7799586fd285e146f4 GIT binary patch literal 22660 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/opensans-semibold.eot b/dist/fonts/opensans-semibold.eot new file mode 100644 index 0000000000000000000000000000000000000000..d8375dd0ab130207f023358d62ef6ff357108b7f GIT binary patch literal 20028 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/fonts/opensans-semibold.ttf b/dist/fonts/opensans-semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b3290843a7a3e621867b169c8487de9a8c7a8054 GIT binary patch literal 39476 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/opensans-semibold.woff b/dist/fonts/opensans-semibold.woff new file mode 100644 index 0000000000000000000000000000000000000000..28d6adee03b8d2301e06680fce413eb94887b57e GIT binary patch literal 22908 zcmZse1B@55003wR007_v002TD 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 pLIO(m7W1gX#MwheB + + +Generated by Fontastic.me + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/fonts/taiga.ttf b/dist/fonts/taiga.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6d89b713992bedacfe4f54a22387a84115c75531 GIT binary patch literal 9944 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 literal 0 HcmV?d00001 diff --git a/dist/fonts/taiga.woff b/dist/fonts/taiga.woff new file mode 100644 index 0000000000000000000000000000000000000000..11436464bd0fc73a3258cc9865ed87f5cf172109 GIT binary patch literal 7272 zcmZXZRZ!KB7wx~)p`|+xh;&GINq2W1IwTHh>(00jU5 z?~pkVk?fs4d;oxg6aWAt005lOeu5C3EqtH=K;Z!Z0O)_is{y!JINJaKMF0Q*YXE@Y za{1s2hq}6Z005-{006lE`ws~~@X3xe^!K4$@B~{;P9(VPMmb`&*ph^Y5?WgIs7bF3 zC4Cc2u*Z+D$q7q{bpD5XW7Om%c2oTOOU`1>?NnDo3h{UbebV~SK-4c#R)gYChEx5p z!`tHEZ?xZjHXx_K1me3&_NSDV-Z+R@{jfb-^ZzTf@15(t _9kuBuj^7n=j>}t1X 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 literal 0 HcmV?d00001 diff --git a/dist/humans.txt b/dist/humans.txt new file mode 100644 index 0000000..82ff42f --- /dev/null +++ b/dist/humans.txt @@ -0,0 +1,86 @@ +/* the humans responsible & colophon */ +/* humanstxt.org */ + + +/* TEAM */ + + Taiga Engineer & Digital Hermit: Lord Juan Francisco Alcántara + Site: http://www.kaleidos.net/40826D/ + Twitter: nil + Location: Madrid, Spain + + Taiga Engineer & Spartan: Lord Alejandro Alonso + Site: http://kaleidos.net/FC8EAC/ + Twitter: @_superalex_ + Location: Madrid, Spain + + Taiga Engineer & Vodka distiller: Lord Andrey Antukh + Site: http://kaleidos.net/A5694F/ + Twitter: @niwibe + Location: Madrid, Russia + + Taiga Engineer: Lord David Barragán Merino + Site: http://kaleidos.net/FFF8E7/ + Twitter: @bameda + Location: Madrid, Spain + + Taiga Engineer & Troll Master: Lord Jesús Espino García + Site: http://kaleidos.net/007000/ + Twitter: @jespinog + Location: Madrid, Spain + + Taiga UX Consultant & Mistress of the Dark: Pilar Esteban + Site: https://www.linkedin.com/in/pilaresteban + Twitter: @devilme + Location: Madrid, Spain + + Taiga Engineer & African Dancer: Anler Hernández + Site: http://www.kaleidos.net/2099DB/ + Twitter: @anler + Location: Madrid, Cuba + + Taiga UI Designer, Frontend Engineer & Paella Masterchef: Lord Xavier Julián + Site: http://kaleidos.net/CC0000/ + Twitter: @Xaviju + Location: Madrid, Spain + + Taiga UI Designer: Juan de la Cruz + Site: http://kaleidos.net + Twitter: @elhombretecla + Location: Madrid, Spain + + Taiga CEO, Community Manager & Chico Almodóvar: Ricky Posner + Twitter: @eposner + Location: Madrid, Spain + + Taiga CEO & Dungeon Master: Lord Pablo Ruiz Múzquiz + Site: http://kaleidos.net/761CEC/ + Twitter: @diacritica + Location: Madrid, Spain + + +/* SITE */ + Standards: HTML5, CSS3 + Components: Django, AngularJS, jQuery + Software: PostgreSQL, RabbitMQ, Redis + Languajes: Python, CoffeeScript, Jade, Sass + + + .,,. + ,;;*;;;;, for ponies with + .-'``;-');;. magical powers! + /' .-. /*;; + .' \d \;; .;;;, + / o ` \; ,__. ,;*;;;*;, + \__, _.__,' \_.-') __)--.;;;;;*;;;;, + `""`;;;\ /-')_) __) `\' ';;;;;; + ;*;;; -') `)_) |\ | ;;;;*; + ;;;;| `---` O | | ;;*;;; + *;*;\| O / ;;;;;* + ;;;;;/| .-------\ / ;*;;;;; + ;;;*;/ \ | '. (`. ;;;*;;; + ;;;;;'. ; | ) \ | ;;;;;; + ,;*;;;;\/ |. / /` | ';;;*; + ;;;;;;/ |/ / /__/ ';;; + '*jgs/ | / | ;*; + `""""` `""""` ;' diff --git a/dist/images/beta.png b/dist/images/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b581c24ddbe810687b83ca1d3b3b44d7fd974d GIT binary patch literal 2409 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 literal 0 HcmV?d00001 diff --git a/dist/images/bg.png b/dist/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..66c46b0f591e9f60b002031b2807bd87c897dc6d GIT binary patch literal 101667 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%0Dl88PgDpl_~YrEF@p9YK& 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