taiga-front/app/modules/components/project-menu/project-menu.controller.coffee

127 lines
4.4 KiB
CoffeeScript

###
# Copyright (C) 2014-2016 Taiga Agile LLC <taiga@taiga.io>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: project-menu.controller.coffee
###
class ProjectMenuController
@.$inject = [
"tgProjectService",
"tgLightboxFactory"
]
constructor: (@projectService, @lightboxFactory) ->
@.project = null
@.menu = Immutable.Map()
show: () ->
@.project = @projectService.project
@.active = @._getActiveSection()
@._setVideoConference()
@._setMenuPermissions()
hide: () ->
@.project = null
@.menu = {}
search: () ->
@lightboxFactory.create("tg-search-box", {
"class": "lightbox lightbox-search"
})
_setVideoConference: () ->
videoconferenceUrl = @._videoConferenceUrl()
if videoconferenceUrl
@.project = @.project.set("videoconferenceUrl", videoconferenceUrl)
_setMenuPermissions: () ->
@.menu = Immutable.Map({
epics: false,
backlog: false,
kanban: false,
issues: false,
wiki: false
})
if @.project.get("is_epics_activated") && @.project.get("my_permissions").indexOf("view_epics") != -1
@.menu = @.menu.set("epics", true)
if @.project.get("is_backlog_activated") && @.project.get("my_permissions").indexOf("view_us") != -1
@.menu = @.menu.set("backlog", true)
if @.project.get("is_kanban_activated") && @.project.get("my_permissions").indexOf("view_us") != -1
@.menu = @.menu.set("kanban", true)
if @.project.get("is_issues_activated") && @.project.get("my_permissions").indexOf("view_issues") != -1
@.menu = @.menu.set("issues", true)
if @.project.get("is_wiki_activated") && @.project.get("my_permissions").indexOf("view_wiki_pages") != -1
@.menu = @.menu.set("wiki", true)
_getActiveSection: () ->
sectionName = @projectService.section
sectionsBreadcrumb = @projectService.sectionsBreadcrumb
indexBacklog = sectionsBreadcrumb.lastIndexOf("backlog")
indexKanban = sectionsBreadcrumb.lastIndexOf("kanban")
if indexBacklog != -1 || indexKanban != -1
if indexKanban == -1 || indexBacklog > indexKanban
oldSectionName = "backlog"
else
oldSectionName = "kanban"
if sectionName == "backlog-kanban"
if oldSectionName in ["backlog", "kanban"]
sectionName = oldSectionName
else if @.project.get("is_backlog_activated") && !@.project.get("is_kanban_activated")
sectionName = "backlog"
else if !@.project.get("is_backlog_activated") && @.project.get("is_kanban_activated")
sectionName = "kanban"
return sectionName
_videoConferenceUrl: () ->
# Get base url
if @.project.get("videoconferences") == "appear-in"
baseUrl = "https://appear.in/"
else if @.project.get("videoconferences") == "talky"
baseUrl = "https://talky.io/"
else if @.project.get("videoconferences") == "jitsi"
baseUrl = "https://meet.jit.si/"
else if @.project.get("videoconferences") == "custom"
return @.project.get("videoconferences_extra_data")
else
return ""
# Add prefix to the chat room name if exist
if @.project.get("videoconferences_extra_data")
url = @.project.get("slug") + "-" + taiga.slugify(@.project.get("videoconferences_extra_data"))
else
url = @.project.get("slug")
# Some special cases
if @.project.get("videoconferences") == "jitsi"
url = url.replace(/-/g, "")
return baseUrl + url
angular.module("taigaComponents").controller("ProjectMenu", ProjectMenuController)