Add generic lightbox

stable
Álex Hermida 2018-07-04 17:13:41 +02:00 committed by Alex Hermida
parent 4e2d1ddf34
commit 93c2c45efb
28 changed files with 214 additions and 157 deletions

View File

@ -543,7 +543,6 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
@rs2.attachments.list("us", us.id, projectId).then (attachments) => @rs2.attachments.list("us", us.id, projectId).then (attachments) =>
@rootscope.$broadcast("genericform:edit", { @rootscope.$broadcast("genericform:edit", {
'objType': 'us', 'objType': 'us',
'statusList': @scope.usStatusList,
'obj': us, 'obj': us,
'attachments': attachments.toJS() 'attachments': attachments.toJS()
}) })
@ -574,8 +573,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
when "standard" then @rootscope.$broadcast("genericform:new", when "standard" then @rootscope.$broadcast("genericform:new",
{ {
'objType': 'us', 'objType': 'us',
'project': @scope.project, 'project': @scope.project
'statusList': @scope.usStatusList
}) })
when "bulk" then @rootscope.$broadcast("usform:bulk", @scope.projectId, when "bulk" then @rootscope.$broadcast("usform:bulk", @scope.projectId,
@scope.project.default_us_status) @scope.project.default_us_status)

View File

@ -773,9 +773,11 @@ module.directive("tgLbSetDueDate", ["lightboxService", "$tgLoading", "$translate
## Create/Edit Lightbox Directive ## Create/Edit Lightbox Directive
############################################################################# #############################################################################
groupBy = @.taiga.groupBy
CreateEditDirective = ( CreateEditDirective = (
$log, $repo, $model, $rs, $rootScope, lightboxService, $loading, $translate, $log, $repo, $model, $rs, $rootScope, lightboxService, $loading, $translate,
$confirm, $q, attachmentsService) -> $confirm, $q, attachmentsService, $template, $compile) ->
link = ($scope, $el, attrs) -> link = ($scope, $el, attrs) ->
form = null form = null
schemas = { schemas = {
@ -783,50 +785,68 @@ $confirm, $q, attachmentsService) ->
objName: 'User Story', objName: 'User Story',
model: 'userstories', model: 'userstories',
params: { include_attachments: true, include_tasks: true }, params: { include_attachments: true, include_tasks: true },
requiredAttrs: ['project'], data: (project) ->
return {
statusList: _.sortBy(project.us_statuses, "order")
}
initialData: (data) -> initialData: (data) ->
return { return {
project: data.project.id project: data.project.id
subject: ""
description: ""
tags: []
points : {} points : {}
status: data.project.default_us_status status: data.project.default_us_status
is_archived: false is_archived: false
tags: []
subject: ""
description: ""
} }
} }
task: { task: {
objName: 'Task', objName: 'Task',
model: 'tasks', model: 'tasks',
params: { include_attachments: true }, params: { include_attachments: true },
requiredAttrs: ['project', 'sprintId', 'usId'], data: (project) ->
return {
statusList: _.sortBy(project.task_statuses, "order")
}
initialData: (data) -> initialData: (data) ->
return { return {
project: data.project.id project: data.project.id
milestone: data.sprintId subject: ""
user_story: data.usId description: ""
is_archived: false
status: data.project.default_task_status
assigned_to: null assigned_to: null
tags: [], tags: []
subject: "", milestone: data.sprintId
description: "", status: data.project.default_task_status
user_story: data.us
is_archived: false
} }
}, },
issue: { issue: {
objName: 'Issue', objName: 'Issue',
model: 'issues', model: 'issues',
params: { include_attachments: true }, params: { include_attachments: true },
requiredAttrs: ['project', 'typeList', 'typeById', 'severityList', 'priorityList'], data: (project) ->
return {
project: project
statusList: _.sortBy(project.issue_statuses, "order")
typeById: groupBy(project.issue_types, (x) -> x.id)
typeList: _.sortBy(project.issue_types, "order")
severityById: groupBy(project.severities, (x) -> x.id)
severityList: _.sortBy(project.severities, "order")
priorityById: groupBy(project.priorities, (x) -> x.id)
priorityList: _.sortBy(project.priorities, "order")
}
initialData: (data) -> initialData: (data) ->
return { return {
project: data.project.id assigned_to: null
subject: "" milestone: data.sprintId
status: data.project.default_issue_status
type: data.project.default_issue_type
priority: data.project.default_priority priority: data.project.default_priority
project: data.project.id
severity: data.project.default_severity severity: data.project.default_severity
status: data.project.default_issue_status
subject: ""
tags: [] tags: []
type: data.project.default_issue_type
} }
} }
} }
@ -835,30 +855,26 @@ $confirm, $q, attachmentsService) ->
attachmentsToDelete = Immutable.List() attachmentsToDelete = Immutable.List()
$scope.$on "genericform:new", (ctx, data) -> $scope.$on "genericform:new", (ctx, data) ->
if beforeMount('new', data, ['objType', 'statusList', ]) if beforeMount('new', data, ['project'])
mountCreateForm(data) mountCreateForm(data)
afterMount() afterMount()
$scope.$on "genericform:edit", (ctx, data) -> $scope.$on "genericform:edit", (ctx, data) ->
if beforeMount('edit', data, ['objType', 'statusList', 'obj', 'attachments']) if beforeMount('edit', data, ['project', 'obj', 'attachments'])
mountUpdateForm(data) mountUpdateForm(data)
afterMount() afterMount()
beforeMount = (mode, data, requiredAttrs) -> beforeMount = (mode, data, requiredAttrs) ->
form.reset() if form form.reset() if form
$el.find(".tag-input").val("")
# Get form schema # Get form schema
if !data.objType || !schemas[data.objType] if !data.objType || !schemas[data.objType]
return $log.error( return $log.error(
"Invalid objType `#{data.objType}` for `genericform:#{mode}` event") "Invalid objType `#{data.objType}` for `genericform:#{mode}` event")
$scope.objType = data.objType
$scope.schema = schemas[data.objType] $scope.schema = schemas[data.objType]
# Get required attrs for creation from objType schema # Get required attrs of the directive
if mode == 'new'
requiredAttrs = $scope.schema.requiredAttrs.concat(requiredAttrs)
# Check if required attrs for creating are present
getAttrs(mode, data, requiredAttrs) getAttrs(mode, data, requiredAttrs)
return true return true
@ -867,25 +883,26 @@ $confirm, $q, attachmentsService) ->
$scope.obj = $model.make_model($scope.schema.model, $scope.schema.initialData(data)) $scope.obj = $model.make_model($scope.schema.model, $scope.schema.initialData(data))
$scope.isNew = true $scope.isNew = true
$scope.attachments = Immutable.List() $scope.attachments = Immutable.List()
$scope.text = {
# Update texts for creation title: $translate.instant("LIGHTBOX.CREATE_EDIT.NEW", { objName: $scope.schema.objName })
$el.find(".button-green").html($translate.instant("COMMON.CREATE")) action: $translate.instant("COMMON.CREATE")
$el.find(".title").html($translate.instant( }
"LIGHTBOX.CREATE_EDIT.NEW", { objName: $scope.schema.objName })) render()
$el.find(".blocked-note").addClass("hidden")
mountUpdateForm = (data) -> mountUpdateForm = (data) ->
$scope.isNew = false $scope.isNew = false
$scope.attachments = Immutable.fromJS($scope.attachments) $scope.attachments = Immutable.fromJS($scope.attachments)
$scope.text = {
# Update texts for edition title: $translate.instant("LIGHTBOX.CREATE_EDIT.EDIT", { objName: $scope.schema.objName })
$el.find(".button-green").html($translate.instant("COMMON.SAVE")) action: $translate.instant("COMMON.SAVE")
$el.find(".title").html($translate.instant( }
"LIGHTBOX.CREATE_EDIT.EDIT", { objName: $scope.schema.objName })) render()
afterMount = () -> afterMount = () ->
resetAttachments() resetAttachments()
setStatus($scope.obj.status) setStatus($scope.obj?.status)
$scope.createEditOpen = true $scope.createEditOpen = true
lightboxService.open $el, () -> lightboxService.open $el, () ->
$scope.createEditOpen = false $scope.createEditOpen = false
@ -1073,6 +1090,16 @@ $confirm, $q, attachmentsService) ->
$scope.isClientRequirement = () -> $scope.isClientRequirement = () ->
return $scope.obj?.client_requirement return $scope.obj?.client_requirement
render = () ->
templatePath = "common/lightbox/lightbox-create-edit/lb-create-edit-#{$scope.objType}.html"
template = $template.get(templatePath, true)
_.map $scope.schema.data($scope.project), (value, key) ->
$scope[key] = value
html = $compile(template($scope))($scope)
$el.html(html)
return { return {
link: link link: link
} }
@ -1088,6 +1115,8 @@ module.directive("tgLbCreateEdit", [
"$translate", "$translate",
"$tgConfirm", "$tgConfirm",
"$q", "$q",
"tgAttachmentsService" "tgAttachmentsService",
"$tgTemplate",
"$compile",
CreateEditDirective CreateEditDirective
]) ])

View File

@ -370,12 +370,7 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
project = @projectService.project.toJS() project = @projectService.project.toJS()
@rootscope.$broadcast("genericform:new", { @rootscope.$broadcast("genericform:new", {
'objType': 'issue', 'objType': 'issue',
'statusList': @scope.issueStatusList, 'project': project
'project': project,
'severityList': @scope.severityList,
'priorityList': @scope.priorityList,
'typeById': groupBy(project.issue_types, (x) -> x.id),
'typeList': _.sortBy(project.issue_types, "order")
}) })
addIssuesInBulk: -> addIssuesInBulk: ->

View File

@ -167,8 +167,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
when "standard" then @rootscope.$broadcast("genericform:new", when "standard" then @rootscope.$broadcast("genericform:new",
{ {
'objType': 'us', 'objType': 'us',
'project': @scope.project, 'project': @scope.project
'statusList': @scope.usStatusList
}) })
when "bulk" then @rootscope.$broadcast("usform:bulk", when "bulk" then @rootscope.$broadcast("usform:bulk",
@scope.projectId, statusId) @scope.projectId, statusId)

View File

@ -58,7 +58,7 @@ KanbanSortableDirective = ($repo, $rs, $rootscope) ->
itemEl.off() itemEl.off()
itemEl.remove() itemEl.remove()
containers = _.map $el.find('.task-column'), (item) -> containers = _.map $el.find('.taskboard-column'), (item) ->
return item return item
drake = dragula(containers, { drake = dragula(containers, {

View File

@ -30,8 +30,8 @@ module = angular.module("taigaRelatedTasks", [])
RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $template, $translate, $emojis) -> RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $template, $translate, $emojis) ->
templateView = $template.get("task/related-task-row.html", true) templateView = $template.get("task/related-taskboard-row.html", true)
templateEdit = $template.get("task/related-task-row-edit.html", true) templateEdit = $template.get("task/related-taskboard-row-edit.html", true)
link = ($scope, $el, $attrs, $model) -> link = ($scope, $el, $attrs, $model) ->
@childScope = $scope.$new() @childScope = $scope.$new()

View File

@ -314,21 +314,40 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
@.refreshTagsColors().then () => @.refreshTagsColors().then () =>
@taskboardTasksService.replaceModel(task) @taskboardTasksService.replaceModel(task)
@scope.$on "issueform:new:success", (event, issue) =>
@.refreshTagsColors().then () =>
@taskboardIssuesService.add(issue)
@analytics.trackEvent("issue", "create", "create issue on taskboard", 1)
@scope.$on "issueform:edit:success", (event, issue) =>
@.refreshTagsColors().then () =>
@taskboardIssuesService.replaceModel(issue)
@scope.$on "taskboard:task:deleted", (event, task) => @scope.$on "taskboard:task:deleted", (event, task) =>
@.loadTasks() @.loadTasks()
@scope.$on("taskboard:task:move", @.taskMove) @scope.$on("taskboard:task:move", @.taskMove)
@scope.$on("assigned-to:added", @.onAssignedToChanged) @scope.$on("assigned-to:added", @.onAssignedToChanged)
onAssignedToChanged: (ctx, userid, taskModel) -> onAssignedToChanged: (ctx, userid, model) ->
taskModel.assigned_to = userid if model.getName() == 'tasks'
model.assigned_to = userid
@taskboardTasksService.replaceModel(model)
@taskboardTasksService.replaceModel(taskModel) @repo.save(model).then =>
@.generateFilters()
if @.isFilterDataTypeSelected('assigned_to') || @.isFilterDataTypeSelected('role')
@.loadTasks()
if model.getName() == 'issues'
model.assigned_to = userid
@taskboardIssuesService.replaceModel(model)
@repo.save(model).then =>
@.generateFilters()
if @.isFilterDataTypeSelected('assigned_to') || @.isFilterDataTypeSelected('role')
@.loadIssues()
@repo.save(taskModel).then =>
@.generateFilters()
if @.isFilterDataTypeSelected('assigned_to') || @.isFilterDataTypeSelected('role')
@.loadTasks()
initializeSubscription: -> initializeSubscription: ->
routingKey = "changes.project.#{@scope.projectId}.tasks" routingKey = "changes.project.#{@scope.projectId}.tasks"
@ -408,7 +427,6 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
params.include_attachments = 1 params.include_attachments = 1
params = _.merge params, @location.search() params = _.merge params, @location.search()
console.log '@scope.sprintId tasks', @scope.sprintId
return @rs.tasks.list(@scope.projectId, @scope.sprintId, null, params).then (tasks) => return @rs.tasks.list(@scope.projectId, @scope.sprintId, null, params).then (tasks) =>
@taskboardTasksService.init(@scope.project, @scope.usersById) @taskboardTasksService.init(@scope.project, @scope.usersById)
@taskboardTasksService.set(tasks) @taskboardTasksService.set(tasks)
@ -462,13 +480,31 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
@rootscope.$broadcast("genericform:edit", { @rootscope.$broadcast("genericform:edit", {
'objType': 'task', 'objType': 'task',
'obj': editingTask, 'obj': editingTask,
'statusList': @scope.taskStatusList, 'project': @scope.project,
'sprintId': @scope.sprintId,
'attachments': attachments.toJS() 'attachments': attachments.toJS()
}) })
task = task.set('loading', false) task = task.set('loading-edit', false)
@taskboardTasksService.replace(task) @taskboardTasksService.replace(task)
editIssue: (id) ->
issue = @.taskboardIssuesService.getIssue(id)
issue = issue.set('loading-edit', true)
@rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref']))
.then (editingIssue) =>
@rs2.attachments.list("issue", issue.get('id'), issue.getIn(['model', 'project']))
.then (attachments) =>
@rootscope.$broadcast("genericform:edit", {
'objType': 'issue',
'obj': editingIssue,
'project': @scope.project,
'sprintId': @scope.sprintId,
'attachments': attachments.toJS()
})
issue = issue.set('loading-edit', false)
deleteTask: (id) -> deleteTask: (id) ->
task = @.taskboardTasksService.getTask(id) task = @.taskboardTasksService.getTask(id)
task = task.set('loading-delete', true) task = task.set('loading-delete', true)
@ -525,14 +561,18 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
'objType': 'task', 'objType': 'task',
'project': @scope.project, 'project': @scope.project,
'sprintId': @scope.sprintId, 'sprintId': @scope.sprintId,
'usId': us?.id, 'usId': us?.id
'status': @scope.project.default_task_status,
'statusList': @scope.taskStatusList
}) })
when "bulk" then @rootscope.$broadcast("taskform:bulk", @scope.sprintId, us?.id) when "bulk" then @rootscope.$broadcast("taskform:bulk", @scope.sprintId, us?.id)
addNewIssue: (type, us) -> addNewIssue: (type, us) ->
switch type switch type
when "standard" then @rootscope.$broadcast("genericform:new",
{
'objType': 'issue',
'project': @scope.project,
'sprintId': @scope.sprintId
})
when "standard" then @rootscope.$broadcast("taskform:new", @scope.sprintId, us?.id) when "standard" then @rootscope.$broadcast("taskform:new", @scope.sprintId, us?.id)
when "bulk" then @rootscope.$broadcast("taskform:bulk", @scope.sprintId, us?.id) when "bulk" then @rootscope.$broadcast("taskform:bulk", @scope.sprintId, us?.id)
@ -544,6 +584,11 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
@rootscope.$broadcast("assigned-to:add", task) @rootscope.$broadcast("assigned-to:add", task)
changeIssueAssignedTo: (id) ->
issue = @taskboardIssuesService.getIssueModel(id)
@rootscope.$broadcast("assigned-to:add", issue)
setRolePoints: () -> setRolePoints: () ->
computableRoles = _.filter(@scope.project.roles, "computable") computableRoles = _.filter(@scope.project.roles, "computable")
@ -676,12 +721,14 @@ TaskboardSquishColumnDirective = (rs) ->
$el.find('.taskboard-table-inner').css("width", totalWidth) $el.find('.taskboard-table-inner').css("width", totalWidth)
columnWidths.pop() issuesBoxWidth = $el.find('.issues-row .taskboard-row-title-box').outerWidth(true)
issuesRowWidth = _.reduce columnWidths, (total, width) -> $el.find('.issues-row').css("width", totalWidth - columnWidths.pop())
return total + width
issuesBoxWidth = $el.find('.issues-row .taskboard-issues-box').outerWidth(true) issuesCardBoxMaxHeight = if $scope.ctrl.zoomLevel == '0' then 260 else 390
$el.find('.issues-row').css("width", issuesRowWidth) $el.find('.issues-row .taskboard-cards-box').css("max-height", issuesCardBoxMaxHeight)
issueCardMaxWidth = if $scope.ctrl.zoomLevel == '0' then 128 else 280
$el.find('.issues-row .taskboard-cards-box .card').css("max-width", issueCardMaxWidth)
recalculateStatusColumnWidth = (statusId) => recalculateStatusColumnWidth = (statusId) =>
#unassigned ceil #unassigned ceil

View File

@ -62,13 +62,13 @@ TaskboardSortableDirective = ($repo, $rs, $rootscope, $translate) ->
itemEl.off() itemEl.off()
itemEl.remove() itemEl.remove()
containers = _.map $el.find('.task-column'), (item) -> containers = _.map $el.find('.taskboard-column'), (item) ->
return item return item
drake = dragula(containers, { drake = dragula(containers, {
copySortSource: false, copySortSource: false,
copy: false, copy: false,
accepts: (el, target) -> return !$(target).hasClass('taskboard-userstory-box') accepts: (el, target) -> return !$(target).hasClass('taskboard-row-title-box')
moves: (item) -> moves: (item) ->
return $(item).is('tg-card') return $(item).is('tg-card')
}) })

View File

@ -46,7 +46,6 @@ class TaskboardIssuesService extends taiga.Service
return _.find @.issuesRaw, (issue) -> return issue.id == id return _.find @.issuesRaw, (issue) -> return issue.id == id
replaceModel: (issue) -> replaceModel: (issue) ->
console.log 'replacesModel'
@.issuesRaw = _.map @.issuesRaw, (item) -> @.issuesRaw = _.map @.issuesRaw, (item) ->
if issue.id == item.id if issue.id == item.id
return issue return issue
@ -58,7 +57,6 @@ class TaskboardIssuesService extends taiga.Service
refresh: -> refresh: ->
issues = [] issues = []
for issueModel in @.issuesRaw for issueModel in @.issuesRaw
console.log issueModel
issue = {} issue = {}
model = issueModel.getAttrs() model = issueModel.getAttrs()
@ -73,6 +71,5 @@ class TaskboardIssuesService extends taiga.Service
issues.push(issue) issues.push(issue)
@.milestoneIssues = Immutable.fromJS(issues) @.milestoneIssues = Immutable.fromJS(issues)
console.log @.milestoneIssues, 'milestoneIssues'
angular.module("taigaKanban").service("tgTaskboardIssues", TaskboardIssuesService) angular.module("taigaKanban").service("tgTaskboardIssues", TaskboardIssuesService)

View File

@ -22,7 +22,6 @@ Resource = (urlsService, http) ->
service.listInAllProjects = (params) -> service.listInAllProjects = (params) ->
url = urlsService.resolve("issues") url = urlsService.resolve("issues")
console.log 'resource issues url', url
httpOptions = { httpOptions = {
headers: { headers: {
"x-disable-pagination": "1" "x-disable-pagination": "1"

View File

@ -22,7 +22,6 @@ Resource = (urlsService, http) ->
service.listInAllProjects = (params) -> service.listInAllProjects = (params) ->
url = urlsService.resolve("tasks") url = urlsService.resolve("tasks")
console.log 'resoruce tasks url', url
httpOptions = { httpOptions = {
headers: { headers: {
"x-disable-pagination": "1" "x-disable-pagination": "1"

View File

@ -124,7 +124,6 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl",
include ../includes/modules/sprints include ../includes/modules/sprints
div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit) div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit)
include ../includes/modules/lightbox-create-edit/lb-create-edit-us
div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories) div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories)
include ../includes/modules/lightbox-us-bulk include ../includes/modules/lightbox-us-bulk

View File

@ -8,15 +8,15 @@ block options
) )
div.ticket-data-container div.ticket-data-container
tg-issue-type-button.ticket-status( tg-issue-type-button.ticket-status(
autosave="false" not-auto-save="true"
ng-model="obj" ng-model="obj"
) )
tg-issue-severity-button.ticket-status( tg-issue-severity-button.ticket-status(
autosave="false" not-auto-save="true"
ng-model="obj" ng-model="obj"
) )
tg-issue-priority-button.ticket-status( tg-issue-priority-button.ticket-status(
autosave="false" not-auto-save="true"
ng-model="obj" ng-model="obj"
) )

View File

@ -1,7 +1,7 @@
tg-lightbox-close tg-lightbox-close
form form
h2.title(translate="LIGHTBOX.CREATE_EDIT.TITLE_NEW") h2.title {{ text.title }}
div.form-wrapper div.form-wrapper
main main
fieldset fieldset
@ -57,10 +57,6 @@ form
block options block options
button.button-green.submit-button( button.button-green.submit-button(type="submit") {{ text.action }}
type="submit"
title="{{'COMMON.CREATE' | translate}}"
translate="COMMON.CREATE"
)
div.lightbox.lightbox-select-user(tg-lb-assignedto) div.lightbox.lightbox-select-user(tg-lb-assignedto)

View File

@ -62,7 +62,7 @@ div.kanban-table(
div.kanban-table-body div.kanban-table-body
div.kanban-table-inner div.kanban-table-inner
div.kanban-uses-box.task-column(ng-class='{vfold:folds[s.id]}', div.kanban-uses-box.taskboard-column(ng-class='{vfold:folds[s.id]}',
ng-repeat="s in ::usStatusList track by s.id", ng-repeat="s in ::usStatusList track by s.id",
tg-kanban-wip-limit="s", tg-kanban-wip-limit="s",
tg-kanban-column-height-fixer, tg-kanban-column-height-fixer,

View File

@ -9,7 +9,7 @@ section.related-tasks(
.row.single-related-task.js-related-task( .row.single-related-task.js-related-task(
ng-repeat="task in tasks" ng-repeat="task in tasks"
ng-class="{closed: task.is_closed, blocked: task.is_blocked, iocaine: task.is_iocaine}" ng-class="{closed: task.is_closed, blocked: task.is_blocked, iocaine: task.is_iocaine}"
tg-related-task-row tg-related-taskboard-row
ng-model="task" ng-model="task"
) )
div(tg-related-task-create-form) div(tg-related-task-create-form)

View File

@ -31,8 +31,11 @@ div.taskboard-table(
div.taskboard-table-body(tg-taskboard-table-height-fixer) div.taskboard-table-body(tg-taskboard-table-height-fixer)
div.taskboard-table-inner div.taskboard-table-inner
div.task-row(ng-repeat="us in userstories track by us.id", ng-class="{blocked: us.is_blocked, 'row-fold':usFolded[us.id]}") div.taskboard-row(
div.taskboard-userstory-box.task-column(tg-bo-title="us.blocked_note") ng-repeat="us in userstories track by us.id",
ng-class="{blocked: us.is_blocked, 'row-fold':usFolded[us.id]}"
)
div.taskboard-row-title-box.taskboard-column(tg-bo-title="us.blocked_note")
tg-svg.vfold.fold-action( tg-svg.vfold.fold-action(
svg-icon="icon-fold-row", svg-icon="icon-fold-row",
ng-click='foldUs(us.id)' ng-click='foldUs(us.id)'
@ -65,7 +68,7 @@ div.taskboard-table(
include ../components/addnewtask include ../components/addnewtask
div.taskboard-tasks-box.task-column( div.taskboard-cards-box.taskboard-column(
ng-repeat="st in ::taskStatusList track by st.id", ng-repeat="st in ::taskStatusList track by st.id",
class="squish-status-{{st.id}}", class="squish-status-{{st.id}}",
ng-class="{'column-fold':statusesFolded[st.id]}", ng-class="{'column-fold':statusesFolded[st.id]}",
@ -90,8 +93,8 @@ div.taskboard-table(
zoom-level="ctrl.zoomLevel" zoom-level="ctrl.zoomLevel"
type="task" type="task"
) )
div.task-row(ng-init="us = null", ng-class="{'row-fold':usFolded[null]}") div.taskboard-row(ng-init="us = null", ng-class="{'row-fold':usFolded[null]}")
div.taskboard-userstory-box.task-column div.taskboard-row-title-box.taskboard-column
a.vfold( a.vfold(
href="" href=""
title="{{'TASKBOARD.TABLE.TITLE_ACTION_FOLD_ROW' | translate}}" title="{{'TASKBOARD.TABLE.TITLE_ACTION_FOLD_ROW' | translate}}"
@ -110,7 +113,7 @@ div.taskboard-table(
span(translate="TASKBOARD.TABLE.ROW_UNASSIGED_TASKS_TITLE") span(translate="TASKBOARD.TABLE.ROW_UNASSIGED_TASKS_TITLE")
include ../components/addnewtask.jade include ../components/addnewtask.jade
div.taskboard-tasks-box.task-column( div.taskboard-cards-box.taskboard-column(
ng-repeat="st in ::taskStatusList track by st.id", ng-repeat="st in ::taskStatusList track by st.id",
class="squish-status-{{st.id}}", class="squish-status-{{st.id}}",
ng-class="{'column-fold':statusesFolded[st.id]}", ng-class="{'column-fold':statusesFolded[st.id]}",
@ -136,8 +139,8 @@ div.taskboard-table(
zoom-level="ctrl.zoomLevel" zoom-level="ctrl.zoomLevel"
type="task" type="task"
) )
div.issues-row div.taskboard-row.issues-row(ng-class="{'row-fold':usFolded[0]}")
div.taskboard-issues-box.task-column div.taskboard-row-title-box.taskboard-column
a.vfold( a.vfold(
href="" href=""
title="{{'TASKBOARD.TABLE.TITLE_ACTION_FOLD_ROW' | translate}}" title="{{'TASKBOARD.TABLE.TITLE_ACTION_FOLD_ROW' | translate}}"
@ -155,20 +158,19 @@ div.taskboard-table(
h3.task-colum-name(translate="TASKBOARD.TABLE.ROW_ISSUES_TITLE") h3.task-colum-name(translate="TASKBOARD.TABLE.ROW_ISSUES_TITLE")
include ../components/addnewissue.jade include ../components/addnewissue.jade
div.taskboard-tasks-box.issues-cell div.taskboard-cards-box
div tg-card.card.ng-animate-disabled(
tg-card.card.ng-animate-disabled( tg-repeat="issue in milestoneIssues"
tg-repeat="issue in milestoneIssues" class="kanban-task-minimized"
ng-class="{'kanban-task-maximized': ctrl.isMaximized(s.id), 'kanban-task-minimized': ctrl.isMinimized(s.id)}" tg-class-permission="{'readonly': '!modify_issue'}"
tg-class-permission="{'readonly': '!modify_task'}" tg-bind-scope,
tg-bind-scope, on-toggle-fold="ctrl.toggleFold(id)"
on-toggle-fold="ctrl.toggleFold(id)" on-click-edit="ctrl.editIssue(id)"
on-click-edit="ctrl.editTask(id)" on-click-delete="ctrl.deleteTask(id)"
on-click-delete="ctrl.deleteTask(id)" on-click-assigned-to="ctrl.changeIssueAssignedTo(id)"
on-click-assigned-to="ctrl.changeTaskAssignedTo(id)" project="project"
project="project" item="issue"
item="issue" zoom="ctrl.zoom"
zoom="ctrl.zoom" zoom-level="ctrl.zoomLevel"
zoom-level="ctrl.zoomLevel" type="issue"
type="issue" )
)

View File

@ -34,7 +34,6 @@ div.wrapper.issues.lightbox-generic-form(
div.lightbox.lightbox-select-user(tg-lb-assignedto) div.lightbox.lightbox-select-user(tg-lb-assignedto)
div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit) div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit)
include ../includes/modules/lightbox-create-edit/lb-create-edit-issue
div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-issues) div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-issues)
include ../includes/modules/lightbox-issue-bulk include ../includes/modules/lightbox-issue-bulk

View File

@ -41,7 +41,6 @@ div.wrapper(
include ../includes/modules/kanban-table include ../includes/modules/kanban-table
div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit) div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit)
include ../includes/modules/lightbox-create-edit/lb-create-edit-us
div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories) div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories)
include ../includes/modules/lightbox-us-bulk include ../includes/modules/lightbox-us-bulk

View File

@ -48,7 +48,6 @@ div.wrapper(
include ../includes/modules/taskboard-table include ../includes/modules/taskboard-table
div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit) div.lightbox.lightbox-generic-form.lightbox-create-edit(tg-lb-create-edit)
include ../includes/modules/lightbox-create-edit/lb-create-edit-task
div.lightbox.lightbox-generic-bulk.lightbox-task-bulk(tg-lb-create-bulk-tasks) div.lightbox.lightbox-generic-bulk.lightbox-task-bulk(tg-lb-create-bulk-tasks)
include ../includes/modules/lightbox-task-bulk include ../includes/modules/lightbox-task-bulk

View File

@ -6,8 +6,6 @@ $column-shrink: 0;
$column-margin: 0 $margin 0 0; $column-margin: 0 $margin 0 0;
$column-padding: .5rem 1rem; $column-padding: .5rem 1rem;
$issues-column-width: $column-width - $margin * 4;
@mixin fold { @mixin fold {
.card { .card {
align-self: flex-start; align-self: flex-start;
@ -30,8 +28,8 @@ $issues-column-width: $column-width - $margin * 4;
} }
} }
} }
&.task-column, &.taskboard-column,
.task-column { .taskboard-column {
align-content: flex-start; align-content: flex-start;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -125,7 +123,7 @@ $issues-column-width: $column-width - $margin * 4;
margin-bottom: 5rem; margin-bottom: 5rem;
overflow: auto; overflow: auto;
width: 100%; width: 100%;
.task-column { .taskboard-column {
flex-basis: $column-width; flex-basis: $column-width;
flex-grow: $column-flex; flex-grow: $column-flex;
flex-shrink: $column-shrink; flex-shrink: $column-shrink;
@ -137,17 +135,6 @@ $issues-column-width: $column-width - $margin * 4;
} }
} }
.issues-cell {
display: flex;
flex-direction: row;
max-width: inherit;
width: 100%;
.card {
flex-basis: $issues-column-width;
flex-grow: $column-flex;
flex-shrink: 1;
}
}
.row-fold { .row-fold {
@include fold; @include fold;
@ -155,25 +142,25 @@ $issues-column-width: $column-width - $margin * 4;
.column-fold { .column-fold {
@include fold; @include fold;
} }
.task-row { .taskboard-row {
display: flex; display: flex;
margin-bottom: .25rem; margin-bottom: .25rem;
min-height: 10rem; min-height: 10rem;
width: 100%; width: 100%;
&.blocked { &.blocked {
.taskboard-userstory-box { .taskboard-row-title-box {
background: rgba($red, .6); background: rgba($red, .6);
} }
.taskboard-userstory-box svg, .taskboard-row-title-box svg,
.taskboard-userstory-box svg:hover, .taskboard-row-title-box svg:hover,
.points-value, .points-value,
.points-value:hover { .points-value:hover {
color: $white; color: $white;
fill: $white; fill: $white;
transition: color .3s linear; transition: color .3s linear;
} }
.taskboard-tasks-box { .taskboard-cards-box {
background: rgba($red, .1); background: rgba($red, .1);
} }
} }
@ -188,23 +175,36 @@ $issues-column-width: $column-width - $margin * 4;
display: none; display: none;
} }
} }
&.issues-row {
.taskboard-cards-box {
align-content: flex-start;
align-items: flex-start;
display: flex;
flex-wrap: wrap;
max-height: 400px;
width: 100%;
}
.card {
cursor: default;
height: auto;
}
}
&.issues-row:not(.row-fold) {
.taskboard-cards-box {
flex-direction: column;
}
.card {
width: 280px;
}
}
} }
.issues-row { .taskboard-row-title-box {
display: flex;
margin-bottom: .25rem;
// margin-top: 1rem;
// border-top: 1rem solid;
// border-top-color: black;
min-height: 10rem;
width: auto;
}
.taskboard-userstory-box {
padding: .5rem .5rem .5rem 1.5rem; padding: .5rem .5rem .5rem 1.5rem;
} }
} }
.taskboard-userstory-box { .taskboard-row-title-box {
position: relative; position: relative;
.us-title { .us-title {
@include font-size(normal); @include font-size(normal);

View File

@ -14,7 +14,7 @@ $column-padding: .5rem 1rem;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
&.zoom-0 { &.zoom-0 {
.task-column, .taskboard-column,
.task-colum-name { .task-colum-name {
max-width: $column-width / 2; max-width: $column-width / 2;
} }
@ -45,7 +45,7 @@ $column-padding: .5rem 1rem;
} }
} }
&.task-colum-name, &.task-colum-name,
&.task-column { &.taskboard-column {
flex-flow: 1; flex-flow: 1;
max-width: $column-folded-width; max-width: $column-folded-width;
min-height: 2.5rem; min-height: 2.5rem;
@ -129,7 +129,7 @@ $column-padding: .5rem 1rem;
overflow: hidden; overflow: hidden;
overflow-x: auto; overflow-x: auto;
width: 100%; width: 100%;
.task-column { .taskboard-column {
flex-basis: $column-width; flex-basis: $column-width;
flex-grow: $column-flex; flex-grow: $column-flex;
flex-shrink: $column-shrink; flex-shrink: $column-shrink;

View File

@ -2,7 +2,7 @@
_:-ms-fullscreen, _:-ms-fullscreen,
:root .taskboard-table-body { :root .taskboard-table-body {
.task-row { .taskboard-row {
min-height: auto; min-height: auto;
} }
} }

View File

@ -273,7 +273,7 @@ tg-project-menu {
} }
} }
.taskboard-table-body { .taskboard-table-body {
.taskboard-tasks-box { .taskboard-cards-box {
background: $white; background: $white;
border: 1px solid $black; border: 1px solid $black;
} }

View File

@ -160,7 +160,7 @@ tg-project-menu {
} }
} }
.taskboard-table-body { .taskboard-table-body {
.taskboard-tasks-box { .taskboard-cards-box {
background: $mass-white; background: $mass-white;
} }
} }

View File

@ -140,7 +140,7 @@ tg-project-menu {
} }
} }
.taskboard-table-body { .taskboard-table-body {
.taskboard-tasks-box { .taskboard-cards-box {
background: $mass-white; background: $mass-white;
} }
} }