🎨 🐎 SVG sprites

stable
Xavier Julián 2016-01-13 13:59:24 +01:00
parent d557355e3b
commit 7fec4f62b4
266 changed files with 2513 additions and 1689 deletions

View File

@ -5,6 +5,7 @@
### Features ### Features
- Ability to create url custom fields. (thanks to [@astagi](https://github.com/astagi)). - Ability to create url custom fields. (thanks to [@astagi](https://github.com/astagi)).
- Moved from iconfont to SVG sprite icon system and redesign.
### Misc ### Misc
- Lots of small and not so small bugfixes. - Lots of small and not so small bugfixes.

View File

@ -53,12 +53,21 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService,
<option value="<%- role.id %>"><%- role.name %></option> <option value="<%- role.id %>"><%- role.name %></option>
<% }); %> <% }); %>
</select> </select>
<a class="icon icon-plus add-fieldset" href=""></a> <a class="add-fieldset" href="">
<svg class="icon icon-add">
<use xlink:href="#icon-add">
</svg>
</a>
</fieldset> </fieldset>
</div> </div>
""") """)
link = ($scope, $el, $attrs) -> link = ($scope, $el, $attrs) ->
createButton = (type) ->
html = "<svg class='icon " + type + "'><use xlink:href='#" + type + "'></svg>";
console.log html
return html
createFieldSet = (required = true)-> createFieldSet = (required = true)->
ctx = {roleList: $scope.project.roles, required: required} ctx = {roleList: $scope.project.roles, required: required}
return $compile(template(ctx))($scope) return $compile(template(ctx))($scope)
@ -88,17 +97,19 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService,
fieldSet.remove() fieldSet.remove()
lastActionButton = $el.find(".add-member-wrapper fieldset:last > a") lastActionButton = $el.find(".add-member-wrapper fieldset:last > a")
if lastActionButton.hasClass("icon-delete delete-fieldset") if lastActionButton.hasClass("delete-fieldset")
lastActionButton.removeClass("icon-delete delete-fieldset") lastActionButton.removeClass("delete-fieldset").addClass("add-fieldset")
.addClass("icon-plus add-fieldset") svg = createButton('icon-add')
lastActionButton.html(svg)
$el.on "click", ".add-fieldset", (event) -> $el.on "click", ".add-fieldset", (event) ->
event.preventDefault() event.preventDefault()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
fieldSet = target.closest('.add-member-wrapper') fieldSet = target.closest('.add-member-wrapper')
target.removeClass("icon-plus add-fieldset") target.removeClass("add-fieldset").addClass("delete-fieldset")
.addClass("icon-delete delete-fieldset") svg = createButton('icon-trash')
target.html(svg)
newFieldSet = createFieldSet(false) newFieldSet = createFieldSet(false)
fieldSet.after(newFieldSet) fieldSet.after(newFieldSet)
@ -106,8 +117,10 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService,
$scope.$digest() # To compile newFieldSet and translate text $scope.$digest() # To compile newFieldSet and translate text
if $el.find(".add-member-wrapper").length == MAX_MEMBERSHIP_FIELDSETS if $el.find(".add-member-wrapper").length == MAX_MEMBERSHIP_FIELDSETS
$el.find(".add-member-wrapper fieldset:last > a").removeClass("icon-plus add-fieldset") $el.find(".add-member-wrapper fieldset:last > a")
.addClass("icon-delete delete-fieldset") .removeClass("add-fieldset").addClass("delete-fieldset")
svg = createButton('icon-trash')
$el.find(".add-member-wrapper fieldset:last > a").html(svg)
submit = debounce 2000, (event) => submit = debounce 2000, (event) =>
event.preventDefault() event.preventDefault()

View File

@ -359,7 +359,9 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
</div> </div>
<a class="delete" href="" <a class="delete" href=""
title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}"> title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}">
<span class="icon icon-delete"></span> <svg class="icon icon-trash">
<use xlink:href="#icon-trash">
</svg>
</a> </a>
""" """
@ -370,7 +372,9 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
</a> </a>
<a class="delete" href="" <a class="delete" href=""
title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}"> title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}">
<span class="icon icon-delete"></span> <svg class="icon icon-trash">
<use xlink:href="#icon-trash">
</svg>
</a> </a>
""" """

View File

@ -193,7 +193,7 @@ EditRoleDirective = ($repo, $confirm) ->
toggleView() toggleView()
$el.on "click", "a.icon-edit", -> $el.on "click", ".edit-value", ->
toggleView() toggleView()
$el.find("input").focus() $el.find("input").focus()
$el.find("input").val($scope.role.name) $el.find("input").val($scope.role.name)
@ -292,7 +292,9 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) ->
title="{{ '<%- permission.name %>' | translate }}"></div> title="{{ '<%- permission.name %>' | translate }}"></div>
<% }) %> <% }) %>
</div> </div>
<div class="icon icon-arrow-bottom"></div> <svg class="icon icon-arrow-right">
<use xlink:href="#icon-arrow-right">
</svg>
""") """)
categoryTemplate = _.template(""" categoryTemplate = _.template("""
@ -431,6 +433,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) ->
$el.on "click", ".resume", (event) -> $el.on "click", ".resume", (event) ->
event.preventDefault() event.preventDefault()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
target.toggleClass("open-drawer")
target.next().toggleClass("open") target.next().toggleClass("open")
$el.on "change", ".category-item input", (event) -> $el.on "change", ".category-item input", (event) ->

View File

@ -204,7 +204,7 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading,
$el.on "submit", "form", submit $el.on "submit", "form", submit
$el.on "click", ".delete-sprint .icon-delete", (event) -> $el.on "click", ".delete-sprint", (event) ->
event.preventDefault() event.preventDefault()
remove() remove()

View File

@ -563,7 +563,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
currentLoading = @loading() currentLoading = @loading()
.target(target) .target(target)
.removeClasses("icon-edit") .removeClasses("edit-story")
.timeout(200) .timeout(200)
.start() .start()

View File

@ -40,7 +40,7 @@ BacklogSprintDirective = ($repo, $rootscope) ->
toggleSprint = ($el) => toggleSprint = ($el) =>
sprintTable = $el.find(".sprint-table") sprintTable = $el.find(".sprint-table")
sprintArrow = $el.find(".icon-arrow-up") sprintArrow = $el.find(".compact-sprint")
sprintArrow.toggleClass('active') sprintArrow.toggleClass('active')
sprintTable.toggleClass('open') sprintTable.toggleClass('open')
@ -55,7 +55,7 @@ BacklogSprintDirective = ($repo, $rootscope) ->
toggleSprint($el) toggleSprint($el)
# Event Handlers # Event Handlers
$el.on "click", ".sprint-name > .icon-arrow-up", (event) -> $el.on "click", ".sprint-name > .compact-sprint", (event) ->
event.preventDefault() event.preventDefault()
toggleSprint($el) toggleSprint($el)

View File

@ -288,13 +288,11 @@ Capslock = ($translate) ->
link = ($scope, $el, $attrs) -> link = ($scope, $el, $attrs) ->
open = false open = false
warningIcon = $('<div>')
.addClass('icon') warningIcon = "<svg class='icon icon-capslock' title='" + $translate.instant('COMMON.CAPSLOCK_WARNING') + "'><use xlink:href='#icon-capslock'></svg>";
.addClass('icon-capslock')
.attr('title', $translate.instant('COMMON.CAPSLOCK_WARNING'))
hideIcon = () -> hideIcon = () ->
warningIcon.fadeOut () -> $('.icon-capslock').fadeOut () ->
open = false open = false
$(this).remove() $(this).remove()

View File

@ -321,7 +321,7 @@ AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $qqueue, $template
$model.$modelValue.assigned_to = $currentUserService.getUser().get('id') $model.$modelValue.assigned_to = $currentUserService.getUser().get('id')
save($currentUserService.getUser().get('id')) save($currentUserService.getUser().get('id'))
$el.on "click", ".icon-delete", (event) -> $el.on "click", ".remove-user", (event) ->
event.preventDefault() event.preventDefault()
return if not isEditable() return if not isEditable()
title = $translate.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED") title = $translate.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED")
@ -498,11 +498,10 @@ EditableSubjectDirective = ($rootscope, $repo, $confirm, $loading, $qqueue, $tem
else if event.keyCode == 27 else if event.keyCode == 27
$scope.$apply () => $model.$modelValue.revert() $scope.$apply () => $model.$modelValue.revert()
$el.find('div.edit-subject').hide() $el.find('.edit-subject').hide()
$el.find('div.view-subject').show() $el.find('.view-subject').show()
$el.find('div.edit-subject').hide() $el.find('.edit-subject').hide()
$el.find('div.view-subject span.edit').hide()
$scope.$watch $attrs.ngModel, (value) -> $scope.$watch $attrs.ngModel, (value) ->
return if not value return if not value

View File

@ -59,12 +59,12 @@ class ConfirmService extends taiga.Service
el = angular.element(lightboxSelector) el = angular.element(lightboxSelector)
# Render content # Render content
el.find("h2.title").text(title) el.find(".title").text(title)
el.find("span.subtitle").text(subtitle) el.find(".subtitle").text(subtitle)
el.find("span.message").text(message) el.find(".message").text(message)
# Assign event handlers # Assign event handlers
el.on "click.confirm-dialog", "a.button-green", debounce 2000, (event) => el.on "click.confirm-dialog", ".button-green", debounce 2000, (event) =>
event.preventDefault() event.preventDefault()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
currentLoading = @loading() currentLoading = @loading()
@ -77,7 +77,7 @@ class ConfirmService extends taiga.Service
@.hide(el) @.hide(el)
} }
el.on "click.confirm-dialog", "a.button-red", (event) => el.on "click.confirm-dialog", ".button-red", (event) =>
event.preventDefault() event.preventDefault()
defered.reject() defered.reject()
@.hide(el) @.hide(el)
@ -129,7 +129,7 @@ class ConfirmService extends taiga.Service
@.hide(el) @.hide(el)
} }
el.on "click.confirm-dialog", "a.button-red", (event) => el.on "click.confirm-dialog", ".button-red", (event) =>
event.preventDefault() event.preventDefault()
defered.reject() defered.reject()
@.hide(el) @.hide(el)
@ -144,15 +144,15 @@ class ConfirmService extends taiga.Service
el = angular.element(".lightbox-generic-error") el = angular.element(".lightbox-generic-error")
# Render content # Render content
el.find("h2.title").html(message) el.find(".title").html(message)
# Assign event handlers # Assign event handlers
el.on "click.confirm-dialog", "a.button-green", (event) => el.on "click.confirm-dialog", ".button-green", (event) =>
event.preventDefault() event.preventDefault()
defered.resolve() defered.resolve()
@.hide(el) @.hide(el)
el.on "click.confirm-dialog", "a.close", (event) => el.on "click.confirm-dialog", ".close", (event) =>
event.preventDefault() event.preventDefault()
defered.resolve() defered.resolve()
@.hide(el) @.hide(el)
@ -167,16 +167,16 @@ class ConfirmService extends taiga.Service
el = angular.element(".lightbox-generic-success") el = angular.element(".lightbox-generic-success")
# Render content # Render content
el.find("h2.title").html(title) if title el.find(".title").html(title) if title
el.find("p.message").html(message) if message el.find(".message").html(message) if message
# Assign event handlers # Assign event handlers
el.on "click.confirm-dialog", "a.button-green", (event) => el.on "click.confirm-dialog", ".button-green", (event) =>
event.preventDefault() event.preventDefault()
defered.resolve() defered.resolve()
@.hide(el) @.hide(el)
el.on "click.confirm-dialog", "a.close", (event) => el.on "click.confirm-dialog", ".close", (event) =>
event.preventDefault() event.preventDefault()
defered.resolve() defered.resolve()
@.hide(el) @.hide(el)
@ -189,15 +189,15 @@ class ConfirmService extends taiga.Service
el = angular.element(".lightbox-generic-loading") el = angular.element(".lightbox-generic-loading")
# Render content # Render content
el.find("h2.title").html(title) if title el.find(".title").html(title) if title
el.find("p.message").html(message) if message el.find(".message").html(message) if message
return { return {
start: => @lightboxService.open(el) start: => @lightboxService.open(el)
stop: => @lightboxService.close(el) stop: => @lightboxService.close(el)
update: (status, title, message, percent) => update: (status, title, message, percent) =>
el.find("h2.title").html(title) if title el.find(".title").html(title) if title
el.find("p.message").html(message) if message el.find(".message").html(message) if message
if percent if percent
el.find(".spin").addClass("hidden") el.find(".spin").addClass("hidden")
@ -251,7 +251,7 @@ class ConfirmService extends taiga.Service
delete @.tsem delete @.tsem
el.on "click", ".icon-delete, .close", (event) => el.on "click", ".icon-close, .close", (event) =>
body.find(selector) body.find(selector)
.removeClass('active') .removeClass('active')
.addClass('inactive') .addClass('inactive')

View File

@ -117,15 +117,15 @@ CustomAttributesValuesDirective = ($templates, $storage) ->
$ctrl.initialize($attrs.type, value.id) $ctrl.initialize($attrs.type, value.id)
$ctrl.loadCustomAttributesValues() $ctrl.loadCustomAttributesValues()
$el.on "click", ".custom-fields-header a", -> $el.on "click", ".custom-fields-header .icon", ->
hash = collapsedHash($attrs.type) hash = collapsedHash($attrs.type)
collapsed = not($storage.get(hash) or false) collapsed = not($storage.get(hash) or false)
$storage.set(hash, collapsed) $storage.set(hash, collapsed)
if collapsed if collapsed
$el.find(".custom-fields-header a").removeClass("open") $el.find(".custom-fields-header .icon").removeClass("open")
$el.find(".custom-fields-body").removeClass("open") $el.find(".custom-fields-body").removeClass("open")
else else
$el.find(".custom-fields-header a").addClass("open") $el.find(".custom-fields-header .icon").addClass("open")
$el.find(".custom-fields-body").addClass("open") $el.find(".custom-fields-body").addClass("open")
$scope.$on "$destroy", -> $scope.$on "$destroy", ->
@ -235,7 +235,7 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate,
render(attributeValue, true) render(attributeValue, true)
setFocusAndSelectOnInputField() setFocusAndSelectOnInputField()
$el.on "click", "a.icon-edit", (event) -> $el.on "click", ".js-edit-description", (event) ->
event.preventDefault() event.preventDefault()
render(attributeValue, true) render(attributeValue, true)
setFocusAndSelectOnInputField() setFocusAndSelectOnInputField()
@ -249,7 +249,7 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate,
$el.on "submit", "form", submit $el.on "submit", "form", submit
$el.on "click", "a.icon-floppy", submit $el.on "click", ".js-save-description", submit
$scope.$on "$destroy", -> $scope.$on "$destroy", ->
$el.off() $el.off()

View File

@ -120,10 +120,13 @@ LbTagLineDirective = ($rs, $template, $compile) ->
tag.style = "border-left: 5px solid #{tag.color}" tag.style = "border-left: 5px solid #{tag.color}"
html = $compile(templateTags(ctx))($scope) html = $compile(templateTags(ctx))($scope)
$el.find("div.tags-container").html(html) $el.find(".tags-container").html(html)
showSaveButton = -> $el.find(".save").removeClass("hidden") showSaveButton = ->
hideSaveButton = -> $el.find(".save").addClass("hidden") $el.find(".save").removeClass("hidden")
hideSaveButton = ->
$el.find(".save").addClass("hidden")
resetInput = -> resetInput = ->
$el.find("input").val("") $el.find("input").val("")
@ -179,7 +182,7 @@ LbTagLineDirective = ($rs, $template, $compile) ->
event.preventDefault() event.preventDefault()
saveInputTag() saveInputTag()
$el.on "click", ".icon-delete", (event) -> $el.on "click", ".remove-tag", (event) ->
event.preventDefault() event.preventDefault()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
@ -348,7 +351,7 @@ TagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compi
hideAddTagButton() hideAddTagButton()
showInput() showInput()
$el.on "click", ".icon-delete", (event) -> $el.on "click", ".remove-tag", (event) ->
event.preventDefault() event.preventDefault()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)

View File

@ -461,14 +461,14 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
showFilters = (title, type) -> showFilters = (title, type) ->
$el.find(".filters-cats").hide() $el.find(".filters-cats").hide()
$el.find(".filter-list").removeClass("hidden") $el.find(".filter-list").removeClass("hidden")
$el.find("h2.breadcrumb").removeClass("hidden") $el.find(".breadcrumb").removeClass("hidden")
$el.find("h2 a.subfilter span.title").html(title) $el.find("h2 .subfilter .title").html(title)
$el.find("h2 a.subfilter span.title").prop("data-type", type) $el.find("h2 .subfilter .title").prop("data-type", type)
showCategories = -> showCategories = ->
$el.find(".filters-cats").show() $el.find(".filters-cats").show()
$el.find(".filter-list").addClass("hidden") $el.find(".filter-list").addClass("hidden")
$el.find("h2.breadcrumb").addClass("hidden") $el.find(".breadcrumb").addClass("hidden")
initializeSelectedFilters = (filters) -> initializeSelectedFilters = (filters) ->
selectedFilters = [] selectedFilters = []
@ -502,7 +502,7 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
$el.find(".filter-list").html(html) $el.find(".filter-list").html(html)
getFiltersType = () -> getFiltersType = () ->
return $el.find("h2 a.subfilter span.title").prop('data-type') return $el.find(".subfilter .title").prop('data-type')
reloadIssues = () -> reloadIssues = () ->
currentFiltersType = getFiltersType() currentFiltersType = getFiltersType()
@ -617,7 +617,7 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
toggleFilterSelection(type, id) toggleFilterSelection(type, id)
$el.on "click", ".filter-list .single-filter .icon-delete", (event) -> $el.on "click", ".filter-list .single-filter .remove-filter", (event) ->
event.preventDefault() event.preventDefault()
event.stopPropagation() event.stopPropagation()
@ -665,7 +665,7 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
currentLoading.finish() currentLoading.finish()
$scope.filters.myFilters = filters $scope.filters.myFilters = filters
currentfilterstype = $el.find("h2 a.subfilter span.title").prop('data-type') currentfilterstype = $el.find("h2 .subfilter .title").prop('data-type')
if currentfilterstype == "myFilters" if currentfilterstype == "myFilters"
renderFilters($scope.filters.myFilters) renderFilters($scope.filters.myFilters)

View File

@ -62,7 +62,7 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem
else if event.keyCode == 27 else if event.keyCode == 27
renderView($model.$modelValue) renderView($model.$modelValue)
$el.on "click", ".icon-floppy", (event) -> $el.on "click", ".save-task", (event) ->
saveTask($model.$modelValue).then -> saveTask($model.$modelValue).then ->
renderView($model.$modelValue) renderView($model.$modelValue)
@ -79,7 +79,7 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem
$el.html($compile(templateView({task: task, perms: perms}))($scope)) $el.html($compile(templateView({task: task, perms: perms}))($scope))
$el.on "click", ".icon-edit", -> $el.on "click", ".edit-task", ->
renderEdit($model.$modelValue) renderEdit($model.$modelValue)
$el.find('input').focus().select() $el.find('input').focus().select()

View File

@ -45,3 +45,4 @@ html(lang="en")
script(src="/#{v}/js/libs.js") script(src="/#{v}/js/libs.js")
script(src="/#{v}/js/templates.js") script(src="/#{v}/js/templates.js")
script(src="/#{v}/js/app-loader.js") script(src="/#{v}/js/app-loader.js")
include svg/sprite.svg

View File

@ -41,7 +41,7 @@
"IOCAINE_TEXT": "Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!", "IOCAINE_TEXT": "Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!",
"CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project",
"TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client",
"CAPSLOCK_WARNING": "Be careful! You're writing with capital letters and this input is case sensitive.", "CAPSLOCK_WARNING": "Be careful! You are writing with capital letters and this input is case sensitive.",
"FORM_ERRORS": { "FORM_ERRORS": {
"DEFAULT_MESSAGE": "This value seems to be invalid.", "DEFAULT_MESSAGE": "This value seems to be invalid.",
"TYPE_EMAIL": "This value should be a valid email.", "TYPE_EMAIL": "This value should be a valid email.",
@ -458,9 +458,7 @@
"RECRUITING_MESSAGE": "Who are you looking for?", "RECRUITING_MESSAGE": "Who are you looking for?",
"RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for",
"PUBLIC_PROJECT": "Public project", "PUBLIC_PROJECT": "Public project",
"PUBLIC_PROJECT_DESC": "Users will be able to find and view your project",
"PRIVATE_PROJECT": "Private project", "PRIVATE_PROJECT": "Private project",
"PRIVATE_PROJECT_DESC": "By default, this project will be hidden to the public",
"PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?",
"DELETE": "Delete this project", "DELETE": "Delete this project",
"LOGO_HELP": "The image will be scaled to 80x80px.", "LOGO_HELP": "The image will be scaled to 80x80px.",

View File

@ -13,6 +13,12 @@
opacity: 1; opacity: 1;
} }
} }
.attachment-name {
@extend %light;
@include ellipsis(175px);
display: inline-block;
}
}
.attachment-image { .attachment-image {
display: inline-block; display: inline-block;
} }
@ -38,20 +44,20 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
.attachment-name {
@extend %light;
@include ellipsis(175px);
display: inline-block;
}
.icon-delete { .icon-delete {
color: $red-light;
margin-left: auto; margin-left: auto;
opacity: 0; opacity: 0;
transition: opacity .3s ease-in; transition: opacity .2s ease-in;
transition-delay: .2s; transition-delay: .1s;
svg {
fill: $red-light;
}
&:hover { &:hover {
svg {
color: $red; color: $red;
} }
}
} }
.loading-container { .loading-container {
align-items: center; align-items: center;
@ -67,4 +73,3 @@
max-width: 3rem; max-width: 3rem;
} }
} }
}

View File

@ -47,36 +47,31 @@
flex-shrink: 0; flex-shrink: 0;
justify-content: space-around; justify-content: space-around;
margin-left: auto; margin-left: auto;
.settings,
.editable-settings {
@extend %large;
color: $gray-light;
&:hover {
color: $primary;
}
}
.settings { .settings {
opacity: 0; opacity: 0;
} }
.editable-settings { .editable-settings {
opacity: 1; opacity: 1;
} }
.icon-delete { svg {
fill: $gray-light;
}
.icon-edit,
.icon-save {
&:hover { &:hover {
color: $red; fill: $primary;
} }
} }
.icon-drag-v { .icon-trash,
.icon-close {
&:hover {
fill: $red;
}
}
.icon-drag {
cursor: move; cursor: move;
} }
} }
.icon-delete {
@extend %large;
color: $gray-light;
&:hover {
color: $red;
}
}
.editable-attachment-deprecated { .editable-attachment-deprecated {
display: flex; display: flex;
padding-left: 1rem; padding-left: 1rem;

View File

@ -4,6 +4,7 @@
.attachments-header { .attachments-header {
align-content: center; align-content: center;
align-items: center;
background: $whitish; background: $whitish;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -33,9 +34,9 @@
} }
svg { svg {
fill: $white; fill: $white;
height: 1.25rem; height: 1.2rem;
margin-bottom: -.2rem; margin-bottom: -.2rem;
width: 1.25rem; width: 1.2rem;
} }
} }
button { button {
@ -50,7 +51,6 @@
svg { svg {
fill: $gray-light; fill: $gray-light;
height: 1.6rem; height: 1.6rem;
margin-bottom: -.2rem;
width: 1.6rem; width: 1.6rem;
} }
} }
@ -77,6 +77,7 @@
.single-attachment { .single-attachment {
@extend %small; @extend %small;
background: rgba($white, .9);
&.ui-sortable-helper { &.ui-sortable-helper {
background: lighten($primary, 60%); background: lighten($primary, 60%);
box-shadow: 1px 1px 10px rgba($black, .1); box-shadow: 1px 1px 10px rgba($black, .1);
@ -89,12 +90,11 @@
.attachment-name { .attachment-name {
@extend %bold; @extend %bold;
padding-right: 1rem; padding-right: 1rem;
.icon {
margin-right: .25rem;
}
svg { svg {
height: 1.2rem; fill: $gray;
width: 1.2rem; height: .9rem;
margin-right: .25rem;
width: .9rem;
} }
} }
.attachment-size { .attachment-size {

View File

@ -30,8 +30,9 @@
span {{::vm.attachment.getIn(['file', 'name'])}} span {{::vm.attachment.getIn(['file', 'name'])}}
a.icon-delete( a.icon-delete(
ng-if="vm.attachment.get('editable')"
href="" href=""
title="{{'COMMON.DELETE' | translate}}" title="{{'COMMON.DELETE' | translate}}"
ng-click="vm.delete()" ng-click="vm.delete()"
) )
svg.icon.icon-trash
use(xlink:href="#icon-trash")

View File

@ -12,8 +12,8 @@ form.single-attachment(
target="_blank" target="_blank"
download="{{::vm.attachment.getIn(['file', 'name'])}}" download="{{::vm.attachment.getIn(['file', 'name'])}}"
) )
span.icon svg.icon.icon-attachment
include ../../../svg/attachment.svg use(xlink:href="#icon-attachment")
span {{::vm.attachment.getIn(['file', 'name'])}} span {{::vm.attachment.getIn(['file', 'name'])}}
.attachment-comments(ng-if="!vm.attachment.get('editable') && vm.attachment.getIn(['file', 'description'])") .attachment-comments(ng-if="!vm.attachment.get('editable') && vm.attachment.getIn(['file', 'description'])")
@ -47,34 +47,44 @@ form.single-attachment(
.attachment-settings(ng-if="vm.attachment.get('editable')") .attachment-settings(ng-if="vm.attachment.get('editable')")
div(tg-loading="vm.attachment.get('loading')") div(tg-loading="vm.attachment.get('loading')")
a.editable-settings.icon.icon-floppy( a.editable-settings(
href="" href=""
title="{{'COMMON.SAVE' | translate}}" title="{{'COMMON.SAVE' | translate}}"
ng-click="vm.save()" ng-click="vm.save()"
) )
svg.drag.icon.icon-save
use(xlink:href="#icon-save")
div div
a.editable-settings.icon.icon-delete( a.editable-settings(
href="" href=""
title="{{'COMMON.CANCEL' | translate}}" title="{{'COMMON.CANCEL' | translate}}"
ng-click="vm.editMode(false)" ng-click="vm.editMode(false)"
) )
svg.drag.icon.icon-close
use(xlink:href="#icon-close")
.attachment-settings( .attachment-settings(
ng-if="!vm.attachment.get('editable')" ng-if="!vm.attachment.get('editable')"
tg-check-permission="modify_{{vm.type}}" tg-check-permission="modify_{{vm.type}}"
) )
a.settings.icon.icon-edit( a.settings(
href="" href=""
title="{{'COMMON.EDIT' | translate}}" title="{{'COMMON.EDIT' | translate}}"
ng-click="vm.editMode(true)" ng-click="vm.editMode(true)"
) )
a.settings.icon.icon-delete( svg.drag.icon.icon-edit
use(xlink:href="#icon-edit")
a.settings(
href="" href=""
title="{{'COMMON.DELETE' | translate}}" title="{{'COMMON.DELETE' | translate}}"
ng-click="vm.delete()" ng-click="vm.delete()"
) )
a.settings.icon.icon-drag-v( svg.drag.icon.icon-trash
use(xlink:href="#icon-trash")
a.settings(
href="" href=""
title="{{'COMMON.DRAG' | translate}}" title="{{'COMMON.DRAG' | translate}}"
) )
svg.drag.icon.icon-drag
use(xlink:href="#icon-drag")

View File

@ -8,21 +8,24 @@ section.attachments(tg-attachments-drop="vm.addAttachments(files, false)")
ng-click="vm.setMode('gallery')" ng-click="vm.setMode('gallery')"
title="{{ 'ATTACHMENT.GALLERY_VIEW_MODE' | translate }}" title="{{ 'ATTACHMENT.GALLERY_VIEW_MODE' | translate }}"
) )
include ../../../svg/gallery.svg svg.icon.icon-gallery
use(xlink:href="#icon-gallery")
button.view-list( button.view-list(
ng-class="{'is-active': vm.mode == 'list'}" ng-class="{'is-active': vm.mode == 'list'}"
ng-if="vm.attachments.size" ng-if="vm.attachments.size"
ng-click="vm.setMode('list')" ng-click="vm.setMode('list')"
title="{{ 'ATTACHMENT.LIST_VIEW_MODE' | translate }}" title="{{ 'ATTACHMENT.LIST_VIEW_MODE' | translate }}"
) )
include ../../../svg/list.svg svg.icon.icon-list
use(xlink:href="#icon-list")
.add-attach( .add-attach(
tg-check-permission="modify_{{vm.type}}" tg-check-permission="modify_{{vm.type}}"
title!="{{'ATTACHMENT.ADD' | translate}}" title!="{{'ATTACHMENT.ADD' | translate}}"
) )
label.add-attachment-button(for="add-attach") label.add-attachment-button(for="add-attach")
include ../../../svg/add.svg svg.icon.icon-add
use(xlink:href="#icon-add")
input( input(
id="add-attach", id="add-attach",
@ -49,12 +52,11 @@ section.attachments(tg-attachments-drop="vm.addAttachments(files, false)")
.single-attachment(ng-repeat="file in vm.uploadingAttachments()") .single-attachment(ng-repeat="file in vm.uploadingAttachments()")
.attachment-name .attachment-name
span.icon svg.icon.icon-attachment
include ../../../svg/attachment.svg use(xlink:href="#icon-attachment")
span {{file.name}} span {{file.name}}
.attachment-size .attachment-size
span {{file.size | sizeFormat}} span {{file.size | sizeFormat}}
.attachment-comments .attachment-comments
span {{file.progressMessage}} span {{file.progressMessage}}
.percentage(ng-style="{'width': file.progressPercent}") .percentage(ng-style="{'width': file.progressPercent}")

View File

@ -5,7 +5,8 @@ section.attachments(tg-attachments-drop="vm.addAttachments(files)")
h3.attachments-title #[span.attachments-num {{vm.attachments.size}}] #[span.attachments-text(translate="ATTACHMENT.SECTION_NAME")] h3.attachments-title #[span.attachments-num {{vm.attachments.size}}] #[span.attachments-text(translate="ATTACHMENT.SECTION_NAME")]
.add-attach(title!="{{'ATTACHMENT.ADD' | translate}}") .add-attach(title!="{{'ATTACHMENT.ADD' | translate}}")
label.add-attachment-button(for="add-attach") label.add-attachment-button(for="add-attach")
include ../../../svg/add.svg svg.icon.icon-add
use(xlink:href="#icon-add")
input( input(
id="add-attach" id="add-attach"
type="file" type="file"
@ -18,8 +19,8 @@ section.attachments(tg-attachments-drop="vm.addAttachments(files)")
.attachment-body.attachment-list .attachment-body.attachment-list
.single-attachment(tg-repeat="attachment in vm.attachments track by $index") .single-attachment(tg-repeat="attachment in vm.attachments track by $index")
.attachment-name .attachment-name
span.icon svg.icon.icon-attachment
include ../../../svg/attachment.svg use(xlink:href="#icon-attachment")
span {{attachment.get('name')}} span {{attachment.get('name')}}
.attachment-size .attachment-size
span {{attachment.get('size') | sizeFormat}} span {{attachment.get('size') | sizeFormat}}
@ -30,4 +31,5 @@ section.attachments(tg-attachments-drop="vm.addAttachments(files)")
title="{{'COMMON.DELETE' | translate}}" title="{{'COMMON.DELETE' | translate}}"
ng-click="vm.deleteAttachment(attachment)" ng-click="vm.deleteAttachment(attachment)"
) )
include ../../../svg/remove.svg svg.icon.icon-trash
use(xlink:href="#icon-trash")

View File

@ -23,7 +23,7 @@ AttachmentSortableDirective = ($parse) ->
el.sortable({ el.sortable({
items: "div[tg-bind-scope]" items: "div[tg-bind-scope]"
handle: "a.settings.icon.icon-drag-v" handle: ".settings .icon"
containment: ".attachments" containment: ".attachments"
dropOnEmpty: true dropOnEmpty: true
helper: 'clone' helper: 'clone'

View File

@ -9,4 +9,5 @@
href="" href=""
title="{{ COMMON.CLOSE | translate }}" title="{{ COMMON.CLOSE | translate }}"
) )
include ../../../svg/remove.svg svg.icon.icon-close
use(xlink:href="#icon-close")

View File

@ -12,7 +12,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.SEARCH' | translate}}" aria-label="{{'PROJECT.SECTION.SEARCH' | translate}}"
tabindex="1" tabindex="1"
) )
span.icon.icon-search svg.icon.icon-search
use(xlink:href="#icon-search")
span.helper(translate="PROJECT.SECTION.SEARCH") span.helper(translate="PROJECT.SECTION.SEARCH")
li(id="nav-timeline") li(id="nav-timeline")
@ -22,7 +23,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.TIMELINE' | translate}}" aria-label="{{'PROJECT.SECTION.TIMELINE' | translate}}"
tabindex="2" tabindex="2"
) )
include ../../../svg/timeline.svg svg.icon.icon-timeline
use(xlink:href="#icon-timeline")
span.helper(translate="PROJECT.SECTION.TIMELINE") span.helper(translate="PROJECT.SECTION.TIMELINE")
li(id="nav-backlog", ng-if="vm.menu.get('backlog')") li(id="nav-backlog", ng-if="vm.menu.get('backlog')")
@ -32,7 +34,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.BACKLOG' | translate}}" aria-label="{{'PROJECT.SECTION.BACKLOG' | translate}}"
tabindex="2" tabindex="2"
) )
span.icon.icon-scrum svg.icon.icon-scrum
use(xlink:href="#icon-scrum")
span.helper(translate="PROJECT.SECTION.BACKLOG") span.helper(translate="PROJECT.SECTION.BACKLOG")
li(id="nav-kanban", ng-if="vm.menu.get('kanban')") li(id="nav-kanban", ng-if="vm.menu.get('kanban')")
@ -42,7 +45,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.KANBAN' | translate}}" aria-label="{{'PROJECT.SECTION.KANBAN' | translate}}"
tabindex="3" tabindex="3"
) )
span.icon.icon-kanban svg.icon.icon-kanban
use(xlink:href="#icon-kanban")
span.helper(translate="PROJECT.SECTION.KANBAN") span.helper(translate="PROJECT.SECTION.KANBAN")
li(id="nav-issues", ng-if="vm.menu.get('issues')") li(id="nav-issues", ng-if="vm.menu.get('issues')")
@ -52,7 +56,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.ISSUES' | translate}}" aria-label="{{'PROJECT.SECTION.ISSUES' | translate}}"
tabindex="4" tabindex="4"
) )
span.icon.icon-issues svg.icon.icon-issues
use(xlink:href="#icon-issues")
span.helper(translate="PROJECT.SECTION.ISSUES") span.helper(translate="PROJECT.SECTION.ISSUES")
li(id="nav-wiki", ng-if="vm.menu.get('wiki')") li(id="nav-wiki", ng-if="vm.menu.get('wiki')")
@ -62,7 +67,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.WIKI' | translate}}" aria-label="{{'PROJECT.SECTION.WIKI' | translate}}"
tabindex="5" tabindex="5"
) )
span.icon.icon-wiki svg.icon.icon-wiki
use(xlink:href="#icon-wiki")
span.helper(translate="PROJECT.SECTION.WIKI") span.helper(translate="PROJECT.SECTION.WIKI")
li(id="nav-team") li(id="nav-team")
@ -72,7 +78,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.TEAM' | translate}}" aria-label="{{'PROJECT.SECTION.TEAM' | translate}}"
tabindex="6" tabindex="6"
) )
span(class="icon icon-team") svg.icon.icon-team
use(xlink:href="#icon-team")
span.helper(translate="PROJECT.SECTION.TEAM") span.helper(translate="PROJECT.SECTION.TEAM")
li(id="nav-video", ng-if="vm.project.get('videoconferenceUrl')") li(id="nav-video", ng-if="vm.project.get('videoconferenceUrl')")
@ -82,7 +89,8 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.MEETUP' | translate}}" aria-label="{{'PROJECT.SECTION.MEETUP' | translate}}"
tabindex="7" tabindex="7"
) )
span.icon.icon-video svg.icon.icon-bubble
use(xlink:href="#icon-bubble")
span.helper(translate="PROJECT.SECTION.MEETUP") span.helper(translate="PROJECT.SECTION.MEETUP")
li(id="nav-admin", ng-if="vm.project.get('i_am_owner')") li(id="nav-admin", ng-if="vm.project.get('i_am_owner')")
@ -92,5 +100,6 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.ADMIN' | translate}}" aria-label="{{'PROJECT.SECTION.ADMIN' | translate}}"
tabindex="8" tabindex="8"
) )
span.icon.icon-settings svg.icon.icon-settings
use(xlink:href="#icon-settings")
span.helper(translate="PROJECT.SECTION.ADMIN") span.helper(translate="PROJECT.SECTION.ADMIN")

View File

@ -9,7 +9,8 @@ a.vote-inner(
ng-mouseleave="vm.showTextWhenMouseIsLeave()" ng-mouseleave="vm.showTextWhenMouseIsLeave()"
) )
span.track-icon span.track-icon
include ../../../svg/upvote.svg svg.icon.icon-upvote
use(xlink:href="#icon-upvote")
span.track-button-counter( span.track-button-counter(
title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.total_voters||0}:'messageformat' }}", title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.total_voters||0}:'messageformat' }}",
tg-loading="vm.loading" tg-loading="vm.loading"
@ -18,7 +19,8 @@ a.vote-inner(
//- Anonymous user button //- Anonymous user button
span.vote-inner(ng-if="::!vm.user") span.vote-inner(ng-if="::!vm.user")
span.track-icon span.track-icon
include ../../../svg/upvote.svg svg.icon.icon-upvote
use(xlink:href="#icon-upvote")
span.track-button-counter( span.track-button-counter(
title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.total_voters||0}:'messageformat' }}" title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.total_voters||0}:'messageformat' }}"
) {{ ::vm.item.total_voters }} ) {{ ::vm.item.total_voters }}

View File

@ -13,20 +13,18 @@ div.ticket-watch-inner
ng-mouseover="vm.showTextWhenMouseIsOver()" ng-mouseover="vm.showTextWhenMouseIsOver()"
ng-mouseleave="vm.showTextWhenMouseIsLeave()" ng-mouseleave="vm.showTextWhenMouseIsLeave()"
) )
span.track-icon span(ng-if="!vm.item.is_watcher")
include ../../../svg/watch.svg svg.icon.icon-watch
span( use(xlink:href="#icon-watch")
ng-if="!vm.item.is_watcher", | {{'COMMON.WATCH_BUTTON.WATCH' | translate}}
translate="COMMON.WATCH_BUTTON.WATCH" span(ng-if="vm.item.is_watcher && !vm.isMouseOver",)
) svg.icon.icon-watch
span( use(xlink:href="#icon-watch")
ng-if="vm.item.is_watcher && !vm.isMouseOver", | {{'COMMON.WATCH_BUTTON.WATCHING' | translate}}
translate="COMMON.WATCH_BUTTON.WATCHING" span(ng-if="vm.item.is_watcher && vm.isMouseOver")
) svg.icon.icon-unwatch
span( use(xlink:href="#icon-unwatch")
ng-if="vm.item.is_watcher && vm.isMouseOver", | {{'COMMON.WATCH_BUTTON.UNWATCH' | translate}}
translate="COMMON.WATCH_BUTTON.UNWATCH"
)
a.add-watcher( a.add-watcher(
href="" href=""

View File

@ -2,8 +2,7 @@ mixin counter
span.track-button-counter( span.track-button-counter(
title="{{ 'COMMON.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.watchers.length||0}:'messageformat' }}", title="{{ 'COMMON.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.watchers.length||0}:'messageformat' }}",
tg-loading="vm.loading" tg-loading="vm.loading"
) ) {{ vm.item.watchers.length }}
| {{ vm.item.watchers.length }}
//- Registered user button //- Registered user button
@ -17,8 +16,8 @@ a.track-button.watch-button.watch-container(
ng-mouseleave="vm.showTextWhenMouseIsLeave()" ng-mouseleave="vm.showTextWhenMouseIsLeave()"
) )
span.track-inner span.track-inner
span.track-icon svg.icon.icon-watch
include ../../../svg/watch.svg use(xlink:href="#icon-watch")
span( span(
ng-if="!vm.item.is_watcher", ng-if="!vm.item.is_watcher",
translate="COMMON.WATCH_BUTTON.WATCH" translate="COMMON.WATCH_BUTTON.WATCH"
@ -39,6 +38,7 @@ span.track-button.watch-button.watch-container(
) )
span.track-inner span.track-inner
span.track-icon span.track-icon
include ../../../svg/watch.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span(translate="COMMON.WATCH_BUTTON.WATCHERS") span(translate="COMMON.WATCH_BUTTON.WATCHERS")
+counter +counter

View File

@ -3,7 +3,8 @@
href="#" href="#"
ng-click="vm.open()" ng-click="vm.open()"
) {{vm.currentText()}} ) {{vm.currentText()}}
span.icon-arrow-bottom svg.icon.icon-arrow-down
use(xlink:href="#icon-arrow-down")
ul.filter-list(ng-if="vm.is_open") ul.filter-list(ng-if="vm.is_open")
li(ng-click="vm.orderBy('week')") {{ 'DISCOVER.FILTERS.WEEK' | translate }} li(ng-click="vm.orderBy('week')") {{ 'DISCOVER.FILTERS.WEEK' | translate }}

View File

@ -18,12 +18,12 @@ div.discover-header
placeholder="{{ 'DISCOVER.SEARCH.INPUT_PLACEHOLDER' | translate }}" placeholder="{{ 'DISCOVER.SEARCH.INPUT_PLACEHOLDER' | translate }}"
ng-model="vm.q" ng-model="vm.q"
) )
a.search-button( svg.search-button.icon.icon-search(
ng-click="vm.submitFilter()" ng-click="vm.submitFilter()"
href="#" href="#"
title="{{ 'DISCOVER.SEARCH.ACTION_TITLE' | translate }}" title="{{ 'DISCOVER.SEARCH.ACTION_TITLE' | translate }}"
) )
include ../../../../svg/search.svg use(xlink:href="#icon-search")
fieldset.searchbox-filters(ng-if="vm.filter") fieldset.searchbox-filters(ng-if="vm.filter")
input( input(

View File

@ -36,19 +36,15 @@
} }
} }
.search-button { .search-button {
@include svg-size(1.5rem);
fill: $gray-light;
position: absolute; position: absolute;
right: 1rem; right: 1rem;
top: 1rem; top: 1rem;
transition: fill .2s;
&:hover { &:hover {
svg { cursor: pointer;
fill: $primary; fill: $primary;
} }
} }
} }
svg {
fill: $gray-light;
height: 1.5rem;
transition: all .2;
width: 1.5rem;
}
}

View File

@ -1,7 +1,8 @@
.discover-results-header .discover-results-header
.discover-results-header-inner .discover-results-header-inner
.title .title
include ../../../../svg/search.svg svg.icon.icon-search
use(xlink:href="#icon-search")
h2 {{ 'DISCOVER.SEARCH.RESULTS' | translate }} h2 {{ 'DISCOVER.SEARCH.RESULTS' | translate }}
.filter-discover-search(ng-mouseleave="vm.toggleClose()") .filter-discover-search(ng-mouseleave="vm.toggleClose()")
@ -10,14 +11,16 @@
ng-click="vm.openLike()" ng-click="vm.openLike()"
ng-class="{active: vm.like_is_open}" ng-class="{active: vm.like_is_open}"
) )
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{ 'DISCOVER.MOST_LIKED' | translate }} span {{ 'DISCOVER.MOST_LIKED' | translate }}
a.discover-search-filter( a.discover-search-filter(
href="#" href="#"
ng-click="vm.openActivity()" ng-click="vm.openActivity()"
ng-class="{active: vm.activity_is_open}" ng-class="{active: vm.activity_is_open}"
) )
include ../../../../svg/activity.svg svg.icon.icon-activity
use(xlink:href="#icon-activity")
span {{ 'DISCOVER.MOST_ACTIVE' | translate }} span {{ 'DISCOVER.MOST_ACTIVE' | translate }}
.discover-search-subfilter.most-liked-subfilter(ng-if="vm.like_is_open") .discover-search-subfilter.most-liked-subfilter(ng-if="vm.like_is_open")

View File

@ -5,8 +5,9 @@
justify-content: space-between; justify-content: space-between;
} }
svg { svg {
@include svg-size(1.1rem); @include svg-size(1.2rem);
fill: $gray-light; fill: $gray-light;
margin-right: .25rem;
} }
.title { .title {
@extend %bold; @extend %bold;
@ -23,9 +24,15 @@
margin-right: 1rem; margin-right: 1rem;
&.active { &.active {
color: $primary; color: $primary;
svg {
fill: $primary;
} }
} }
} }
svg {
@include svg-size(.8rem);
}
}
.discover-search-subfilter { .discover-search-subfilter {
@include arrow('bottom', $whitish, $whitish, 1, 8); @include arrow('bottom', $whitish, $whitish, 1, 8);

View File

@ -26,28 +26,31 @@
tg-nav="project:project=project.get('slug')" tg-nav="project:project=project.get('slug')"
title="{{::project.get('name')}}" title="{{::project.get('name')}}"
) {{::project.get('name')}} ) {{::project.get('name')}}
span.look-for-people( svg.look-for-people.icon.icon-recruit(
ng-if="project.get('is_looking_for_people')" ng-if="project.get('is_looking_for_people')"
title="{{ ::project.get('looking_for_people_note') }}"
) )
include ../../../../svg/recruit.svg use(xlink:href="#icon-recruit")
title="{{ ::project.get('looking_for_people_note') }}"
p.project-card-description {{ ::project.get('description') | limitTo:100 }}{{ ::project.get('description').length < 100 ? '' : '...'}} p.project-card-description {{ ::project.get('description') | limitTo:100 }}{{ ::project.get('description').length < 100 ? '' : '...'}}
.project-card-statistics .project-card-statistics
span.statistic( span.statistic(
ng-class="{'active': project.get('is_fan')}" ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}" title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}"
) )
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{::project.get('total_fans')}} span {{::project.get('total_fans')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('is_watcher')}" ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}" title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}"
) )
include ../../../../svg/eye.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span {{::project.get('total_watchers')}} span {{::project.get('total_watchers')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('i_am_member')}" ng-class="{'active': project.get('i_am_member')}"
title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}" title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}"
) )
include ../../../../svg/team.svg svg.icon.icon-team
use(xlink:href="#icon-team")
span.statistics-num {{ ::project.get('members').size }} span.statistics-num {{ ::project.get('members').size }}

View File

@ -24,29 +24,30 @@
tg-nav="project:project=project.get('slug')" tg-nav="project:project=project.get('slug')"
title="{{::project.get('name')}}" title="{{::project.get('name')}}"
) {{::project.get('name')}} ) {{::project.get('name')}}
span.look-for-people( svg.look-for-people.icon.icon-recruit(ng-if="project.get('is_looking_for_people')")
ng-if="project.get('is_looking_for_people')" use(xlink:href="#icon-recruit")
title="{{ ::project.get('looking_for_people_note') }}" title="{{ ::project.get('looking_for_people_note') }}"
)
include ../../../../svg/recruit.svg
.project-statistics .project-statistics
span.statistic( span.statistic(
ng-class="{'active': project.get('is_fan')}" ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}" title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}"
) )
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{::project.get('total_fans')}} span {{::project.get('total_fans')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('is_watcher')}" ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}" title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}"
) )
include ../../../../svg/eye.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span {{::project.get('total_watchers')}} span {{::project.get('total_watchers')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('i_am_member')}" ng-class="{'active': project.get('i_am_member')}"
title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}" title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}"
) )
include ../../../../svg/team.svg svg.icon.icon-team
use(xlink:href="#icon-team")
span.statistics-num {{ ::project.get('members').size }} span.statistics-num {{ ::project.get('members').size }}
p.project-description {{ ::project.get('description') | limitTo:150 }}{{ ::project.get('description').length < 150 ? '' : '...'}} p.project-description {{ ::project.get('description') | limitTo:150 }}{{ ::project.get('description').length < 150 ? '' : '...'}}

View File

@ -34,14 +34,19 @@
justify-content: space-between; justify-content: space-between;
margin-bottom: 1rem; margin-bottom: 1rem;
svg { svg {
@include svg-size(1.5rem); @include svg-size(.8rem);
fill: $gray-light; fill: $gray-light;
margin: .5rem; margin-left: .5rem;
} }
} }
.title-wrapper { .title-wrapper {
align-items: center; align-items: center;
display: flex; display: flex;
svg {
@include svg-size(1.25rem);
fill: $gray-light;
margin-right: .5rem;
}
} }
.title { .title {
@extend %bold; @extend %bold;
@ -97,6 +102,11 @@
position: relative; position: relative;
top: .2rem; top: .2rem;
} }
&:hover {
svg {
fill: currentColor;
}
}
} }
.filter-list { .filter-list {
background: $black; background: $black;
@ -163,12 +173,10 @@
} }
} }
.look-for-people { .look-for-people {
svg {
@include svg-size(); @include svg-size();
fill: $gray-light; fill: $gray-light;
margin-left: .5rem; margin-left: .5rem;
} }
}
.project-description { .project-description {
@extend %small; @extend %small;
color: $gray; color: $gray;
@ -179,8 +187,9 @@
flex-basis: 140px; flex-basis: 140px;
justify-content: flex-end; justify-content: flex-end;
svg { svg {
@include svg-size(.8rem); @include svg-size(.75rem);
fill: $gray-light; fill: $gray-light;
margin-right: .25rem;
} }
.svg-eye-closed { .svg-eye-closed {
display: none; display: none;

View File

@ -1,7 +1,8 @@
.most-active(ng-if="vm.highlighted.size") .most-active(ng-if="vm.highlighted.size")
.header .header
.title-wrapper .title-wrapper
include ../../../../svg/activity.svg svg.icon.icon-activity
use(xlink:href="#icon-activity")
h1.title {{ 'DISCOVER.MOST_ACTIVE' | translate }} h1.title {{ 'DISCOVER.MOST_ACTIVE' | translate }}
tg-discover-home-order-by(on-change="vm.orderBy(orderBy)", order-by="vm.currentOrderBy") tg-discover-home-order-by(on-change="vm.orderBy(orderBy)", order-by="vm.currentOrderBy")
@ -14,5 +15,6 @@
.empty-highlighted-project( .empty-highlighted-project(
ng-if="!vm.highlighted.size" ng-if="!vm.highlighted.size"
) )
include ../../../../svg/activity.svg svg.icon.icon-activity
use(xlink:href="#icon-activity")
span {{ 'DISCOVER.MOST_ACTIVE_EMPTY' | translate }} span {{ 'DISCOVER.MOST_ACTIVE_EMPTY' | translate }}

View File

@ -1,7 +1,8 @@
.most-liked(ng-if="vm.highlighted.size") .most-liked(ng-if="vm.highlighted.size")
.header .header
.title-wrapper .title-wrapper
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
h1.title {{ 'DISCOVER.MOST_LIKED' | translate }} h1.title {{ 'DISCOVER.MOST_LIKED' | translate }}
tg-discover-home-order-by(on-change="vm.orderBy(orderBy)", order-by="vm.currentOrderBy") tg-discover-home-order-by(on-change="vm.orderBy(orderBy)", order-by="vm.currentOrderBy")
tg-highlighted( tg-highlighted(
@ -13,5 +14,6 @@
.empty-highlighted-project( .empty-highlighted-project(
ng-if="!vm.highlighted.size" ng-if="!vm.highlighted.size"
) )
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{ 'DISCOVER.MOST_LIKED_EMPTY' | translate }} span {{ 'DISCOVER.MOST_LIKED_EMPTY' | translate }}

View File

@ -43,11 +43,9 @@ div(tg-discover-search)
tg-nav="project:project=project.get('slug')" tg-nav="project:project=project.get('slug')"
title="{{ ::project.get('name') }}" title="{{ ::project.get('name') }}"
) {{project.get('name')}} ) {{project.get('name')}}
span.look-for-people( svg.look-for-people.icon.icon-recruit(ng-if="project.get('is_looking_for_people')")
ng-if="project.get('is_looking_for_people')" use(xlink:href="#icon-recruit")
title="{{ ::project.get('looking_for_people_note') }}" title="{{ ::project.get('looking_for_people_note') }}"
)
include ../../../svg/recruit.svg
p {{ ::project.get('description') | limitTo:300 }} p {{ ::project.get('description') | limitTo:300 }}
span(ng-if="::project.get('description').length > 300") ... span(ng-if="::project.get('description').length > 300") ...
.list-itemtype-project-right.project-statistics .list-itemtype-project-right.project-statistics
@ -55,19 +53,22 @@ div(tg-discover-search)
ng-class="{'active': project.get('is_fan')}" ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}" title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}"
) )
include ../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{::project.get('total_fans')}} span {{::project.get('total_fans')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('is_watcher')}" ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}" title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}"
) )
include ../../../svg/eye.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span {{::project.get('total_watchers')}} span {{::project.get('total_watchers')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('i_am_member')}" ng-class="{'active': project.get('i_am_member')}"
title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}" title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}"
) )
include ../../../svg/team.svg svg.icon.icon-team
use(xlink:href="#icon-team")
span.statistics-num {{ ::project.get('members').size }} span.statistics-num {{ ::project.get('members').size }}
a.button-green.more-results( a.button-green.more-results(

View File

@ -4,7 +4,6 @@
margin: 0 8rem; margin: 0 8rem;
position: relative; position: relative;
} }
.search-button { .search-button {
left: 1rem; left: 1rem;
right: auto; right: auto;
@ -73,19 +72,17 @@
vertical-align: middle; vertical-align: middle;
} }
.look-for-people { .look-for-people {
margin-left: .5rem;
svg {
@include svg-size(1rem);
fill: $gray-light; fill: $gray-light;
} margin-left: .5rem;
} }
.project-statistics { .project-statistics {
display: flex; display: flex;
flex-basis: 300px; flex-basis: 300px;
justify-content: flex-end; justify-content: flex-end;
svg { svg {
@include svg-size(.8rem); @include svg-size(.7rem);
fill: $gray-light; fill: $gray-light;
margin-right: .2rem;
} }
.svg-eye-closed { .svg-eye-closed {
display: none; display: none;

View File

@ -24,11 +24,9 @@ section.home-project-list(ng-if="vm.projects.size")
tg-nav="project:project=project.get('slug')" tg-nav="project:project=project.get('slug')"
title="{{::project.get('name')}}" title="{{::project.get('name')}}"
) {{::project.get('name')}} ) {{::project.get('name')}}
span.look-for-people( svg.look-for-people.icon.icon-recruit(ng-if="project.get('is_looking_for_people')")
ng-if="project.get('is_looking_for_people')" use(xlink:href="#icon-recruit")
title="{{ ::project.get('looking_for_people_note') }}" title="{{ ::project.get('looking_for_people_note') }}"
)
include ../../../svg/recruit.svg
p.project-card-description {{::project.get('description')| limitTo:100 }} p.project-card-description {{::project.get('description')| limitTo:100 }}
span(ng-if="::project.get('description').length > 100") ... span(ng-if="::project.get('description').length > 100") ...
.project-card-statistics .project-card-statistics
@ -36,25 +34,29 @@ section.home-project-list(ng-if="vm.projects.size")
ng-class="{'active': project.get('is_fan')}" ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}" title="{{ 'PROJECT.FANS_COUNTER_TITLE'|translate:{total:project.get('total_fans')||0}:'messageformat' }}"
) )
include ../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span {{::project.get('total_fans')}} span {{::project.get('total_fans')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('is_watcher')}" ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}" title="{{ 'PROJECT.WATCHERS_COUNTER_TITLE'|translate:{total:project.get('total_watchers')||0}:'messageformat' }}"
) )
include ../../../svg/eye.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span {{::project.get('total_watchers')}} span {{::project.get('total_watchers')}}
span.statistic( span.statistic(
ng-class="{'active': project.get('i_am_member')}" ng-class="{'active': project.get('i_am_member')}"
title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}" title="{{ 'PROJECT.MEMBERS_COUNTER_TITLE'|translate:{total:project.get('members').size||0}:'messageformat' }}"
) )
include ../../../svg/team.svg svg.icon.icon-team
use(xlink:href="#icon-team")
span.statistics-num {{ ::project.get('members').size }} span.statistics-num {{ ::project.get('members').size }}
span.statistic( span.statistic(
ng-if="::project.get('is_private')" ng-if="::project.get('is_private')"
title="{{ 'PROJECT.PRIVATE' | translate }}" title="{{ 'PROJECT.PRIVATE' | translate }}"
) )
include ../../../svg/lock.svg svg.icon.icon-lock
use(xlink:href="#icon-lock")
a.see-more-projects-btn.button-gray( a.see-more-projects-btn.button-gray(
href="#", href="#",
@ -65,7 +67,8 @@ section.home-project-list(ng-if="vm.projects.size")
) )
section.projects-empty(ng-if="vm.projects != undefined && vm.projects.size === 0") section.projects-empty(ng-if="vm.projects != undefined && vm.projects.size === 0")
include ../../../svg/empty-project.svg svg.icon.icon-project
use(xlink:href="#icon-project")
p(translate="HOME.EMPTY_PROJECT_LIST") p(translate="HOME.EMPTY_PROJECT_LIST")
a.create-project-button.button-green(href="#", ng-click="vm.newProject()", a.create-project-button.button-green(href="#", ng-click="vm.newProject()",
title="{{'PROJECT.NAVIGATION.TITLE_CREATE_PROJECT' | translate}}", title="{{'PROJECT.NAVIGATION.TITLE_CREATE_PROJECT' | translate}}",

View File

@ -14,13 +14,11 @@
.projects-empty { .projects-empty {
text-align: center; text-align: center;
svg { svg {
fill: $whitish;
height: 100px; height: 100px;
margin: 1rem auto; margin: 1rem auto;
text-align: center; text-align: center;
width: 100%; width: 100%;
path {
fill: $whitish;
}
} }
p { p {
@extend %small; @extend %small;

View File

@ -1,10 +0,0 @@
#TODO: fill correctly when implemented
a(href="#", title="Organizations")
include ../../../svg/organizations.svg
div.navbar-dropdown.dropdown-organization-list
ul
- for (var x = 0; x < 4; x++)
li
a(href="#", title="{{ project.title }}") Organization 1
a.create-organization-btn.button-green(href="#", title="Create Organization") Create Organization

View File

@ -1,5 +1,6 @@
a(href="", title="Projects", tg-nav="projects") a(href="", title="Projects", tg-nav="projects")
include ../../../svg/projects.svg svg.icon.icon-project
use(xlink:href="#icon-project")
div.navbar-dropdown.dropdown-project-list div.navbar-dropdown.dropdown-project-list
ul ul
@ -19,7 +20,11 @@ div.navbar-dropdown.dropdown-project-list
title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}", title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}",
translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT") translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT")
span(tg-import-project-button) a.button-blackish.import-project-button(
a.button-blackish.import-project-button(href="", title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}") href=""
span.icon.icon-upload title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}"
tg-import-project-button
)
svg.icon.icon-upload
use(xlink:href="#icon-upload")
input.import-file.hidden(type="file") input.import-file.hidden(type="file")

View File

@ -30,14 +30,16 @@ nav.navbar(ng-if="vm.isEnabledHeader")
ng-class="{active: vm.active}", ng-class="{active: vm.active}",
title="{{'PROJECT.NAVIGATION.DASHBOARD_TITLE' | translate}}") title="{{'PROJECT.NAVIGATION.DASHBOARD_TITLE' | translate}}")
include ../../svg/dashboard.svg svg.icon.icon-dashboard
use(xlink:href="#icon-dashboard")
a( a(
href="#", href="#",
tg-nav="discover", tg-nav="discover",
title="{{'PROJECT.NAVIGATION.DISCOVER_TITLE' | translate}}", title="{{'PROJECT.NAVIGATION.DISCOVER_TITLE' | translate}}",
) )
include ../../svg/discover.svg svg.icon.icon-discover
use(xlink:href="#icon-discover")
div.topnav-dropdown-wrapper(ng-show="vm.projects.size", tg-dropdown-project-list) div.topnav-dropdown-wrapper(ng-show="vm.projects.size", tg-dropdown-project-list)
//- div.topnav-dropdown-wrapper(tg-dropdown-organization-list) //- div.topnav-dropdown-wrapper(tg-dropdown-organization-list)

View File

@ -52,13 +52,14 @@ $dropdown-width: 350px;
color: $white; color: $white;
display: inline-block; display: inline-block;
transition: all .2s linear; transition: all .2s linear;
svg path { svg {
fill: darken($primary-dark, 8%); fill: darken($primary-dark, 8%);
transition: all .2s linear;
} }
&:hover { &:hover {
background: rgba($black, .2); background: rgba($black, .2);
color: $primary-light; color: $primary-light;
svg path { svg {
fill: $white; fill: $white;
} }
@ -152,14 +153,22 @@ $dropdown-width: 350px;
&.see-more-projects-btn { &.see-more-projects-btn {
margin-bottom: .3rem; margin-bottom: .3rem;
} }
&.import-project-button {
padding: .8rem 1rem;
}
&.create-project-btn { &.create-project-btn {
flex: 1; flex: 1;
} }
&.import-project-button {
padding-left: .75rem;
padding-right: .75rem;
} }
.import-project-button {
&:hover {
svg {
fill: $primary-light;
}
}
svg {
fill: $white;
}
} }
.create-options { .create-options {
display: flex; display: flex;

View File

@ -2,19 +2,10 @@ section.profile-bar
div.profile-image-wrapper(ng-class="::{'is-current-user': vm.isCurrentUser}") div.profile-image-wrapper(ng-class="::{'is-current-user': vm.isCurrentUser}")
img.profile-img(ng-src="{{::vm.user.get('big_photo')}}", alt="{{::vm.user.get('full_name')}}") img.profile-img(ng-src="{{::vm.user.get('big_photo')}}", alt="{{::vm.user.get('full_name')}}")
a.profile-edition(title="{{ 'USER.PROFILE.EDIT' | translate }}", tg-nav="user-settings-user-profile", translate="USER.PROFILE.EDIT") a.profile-edition(title="{{ 'USER.PROFILE.EDIT' | translate }}", tg-nav="user-settings-user-profile", translate="USER.PROFILE.EDIT")
// a.button-green
// span(translate="USER.PROFILE.FOLLOW")
div.profile-data div.profile-data
h1(ng-class="{'not-full-name': !vm.user.get('full_name')}") {{::vm.user.get("full_name_display")}} h1(ng-class="{'not-full-name': !vm.user.get('full_name')}") {{::vm.user.get("full_name_display")}}
.username @{{::vm.user.get("username")}} .username @{{::vm.user.get("username")}}
h2 {{::vm.stats.get('roles').join(", ")}} h2 {{::vm.stats.get('roles').join(", ")}}
// div.location
// include ../../../svg/location.svg
// span Madrid
// Remove Abuse Flag when a user is seeing itself
// a.flag(href="", title="{{ 'USER.PROFILE.REPORT' | translate }}")
// include ../../../svg/flag.svg
// These values in profile stats are not defined yet in UX. Please ask
div.profile-stats div.profile-stats
div.stat div.stat
span.stat-number {{::vm.stats.get('total_num_projects')}} span.stat-number {{::vm.stats.get('total_num_projects')}}
@ -25,14 +16,6 @@ section.profile-bar
div.stat div.stat
span.stat-number {{::vm.stats.get('total_num_contacts')}} span.stat-number {{::vm.stats.get('total_num_contacts')}}
span.stat-name(translate="USER.PROFILE.CONTACTS") span.stat-name(translate="USER.PROFILE.CONTACTS")
// TODO Hide until organizations come
// div.profile-organizations
// h3 Organizations
// div.profile-organizations-wrapper
// div.organization
// div.organization
// div.organization
// div.organization
div.profile-quote(ng-if="::vm.user.get('bio')") div.profile-quote(ng-if="::vm.user.get('bio')")
span {{::vm.user.get("bio") | limitTo:210 }}{{vm.user.get("bio").length < 210 ? '' : '...'}} span {{::vm.user.get("bio") | limitTo:210 }}{{vm.user.get("bio").length < 210 ? '' : '...'}}

View File

@ -4,7 +4,8 @@ section.profile-contacts
img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...") img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...")
div.empty-tab(ng-if="vm.contacts && !vm.contacts.size") div.empty-tab(ng-if="vm.contacts && !vm.contacts.size")
include ../../../svg/hide.svg svg.icon.icon-unwatch
use(xlink:href="#icon-unwatch")
div(ng-if="!vm.isCurrentUser") div(ng-if="!vm.isCurrentUser")
p(translate="USER.PROFILE.CONTACTS_EMPTY", translate-values="{username: vm.user.get('full_name_display')}") p(translate="USER.PROFILE.CONTACTS_EMPTY", translate-values="{username: vm.user.get('full_name_display')}")

View File

@ -34,14 +34,14 @@
ng-class="{'active': vm.item.get('is_fan')}" ng-class="{'active': vm.item.get('is_fan')}"
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_fans\")||0}:'messageformat' }}" title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_fans\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-like
include ../../../../svg/like.svg use(xlink:href="#icon-like")
span {{ ::vm.item.get('total_fans') }} span {{ ::vm.item.get('total_fans') }}
span.list-itemtype-track-watchers( span.list-itemtype-track-watchers(
ng-class="{'active': vm.item.get('is_watcher')}" ng-class="{'active': vm.item.get('is_watcher')}"
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}" title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-watch
include ../../../../svg/watch.svg use(xlink:href="#icon-watch")
span {{ ::vm.item.get('total_watchers') }} span {{ ::vm.item.get('total_watchers') }}

View File

@ -67,14 +67,14 @@ div.list-itemtype-ticket
ng-class="{'active': vm.item.get('is_voter')}", ng-class="{'active': vm.item.get('is_voter')}",
title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_voters\")||0}:'messageformat' }}" title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_voters\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-upvote
include ../../../../svg/upvote.svg use(xlink:href="#icon-upvote")
span {{ ::vm.item.get('total_voters') }} span {{ ::vm.item.get('total_voters') }}
span.list-itemtype-track-watchers( span.list-itemtype-track-watchers(
ng-class="{'active': vm.item.get('is_watcher')}" ng-class="{'active': vm.item.get('is_watcher')}"
title="{{ 'COMMON.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}" title="{{ 'COMMON.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-watch
include ../../../../svg/watch.svg use(xlink:href="#icon-watch")
span {{ ::vm.item.get('total_watchers') }} span {{ ::vm.item.get('total_watchers') }}

View File

@ -1,7 +1,8 @@
section.profile-favs section.profile-favs
div.profile-filter div.profile-filter
div.searchbox(ng-if="::vm.enableFilterByTextQuery") div.searchbox(ng-if="::vm.enableFilterByTextQuery")
span.icon-search svg.icon.icon-search
use(xlink:href="#icon-search")
input( input(
type="text" type="text"
ng-model="vm.q" ng-model="vm.q"

View File

@ -14,7 +14,7 @@
display: flex; display: flex;
flex: 1; flex: 1;
.icon-search { .icon-search {
color: grayer; fill: $gray;
margin-right: .5rem; margin-right: .5rem;
} }
input { input {

View File

@ -1,5 +1,6 @@
h4 h4
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="HINTS.SECTION_NAME") span(translate="HINTS.SECTION_NAME")
p {{::vm.hint.title}} p {{::vm.hint.title}}

View File

@ -4,7 +4,8 @@ section.profile-projects
img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...") img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...")
.empty-tab(ng-if="vm.projects && !vm.projects.size") .empty-tab(ng-if="vm.projects && !vm.projects.size")
include ../../../svg/hide.svg svg.icon.icon-unwatch
use(xlink:href="#icon-unwatch")
p( p(
translate="USER.PROFILE.PROJECTS_EMPTY" translate="USER.PROFILE.PROJECTS_EMPTY"
@ -46,16 +47,16 @@ section.profile-projects
ng-class="{'active': project.get('is_fan')}" ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_fans\")||0}:'messageformat' }}" title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_fans\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-like
include ../../../svg/like.svg use(xlink:href="#icon-like")
span {{ ::project.get('total_fans') }} span {{ ::project.get('total_fans') }}
span.list-itemtype-track-watchers( span.list-itemtype-track-watchers(
ng-class="{'active': project.get('is_watcher')}" ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_watchers\")||0}:'messageformat' }}" title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_watchers\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-watch
include ../../../svg/watch.svg use(xlink:href="#icon-watch")
span {{ ::project.get('total_watchers') }} span {{ ::project.get('total_watchers') }}
.list-itemtype-project-members .list-itemtype-project-members

View File

@ -28,6 +28,7 @@ ProfileTabDirective = () ->
scope.tab.title = title scope.tab.title = title
scope.tab.icon = attrs.tabIcon scope.tab.icon = attrs.tabIcon
scope.tab.iconName = '#' + attrs.tabIcon
scope.tab.active = !!attrs.tabActive scope.tab.active = !!attrs.tabActive
if scope.$eval(attrs.tabDisabled) != true if scope.$eval(attrs.tabDisabled) != true

View File

@ -7,7 +7,8 @@ div
ng-click="vm.toggleTab(tab)" ng-click="vm.toggleTab(tab)"
ng-class="{active: tab.active}" ng-class="{active: tab.active}"
) )
span.icon(ng-class="::tab.icon") svg.icon(ng-class="::tab.icon")
use(xlink:href="{{::tab.iconName}}")
span {{::tab.name}} span {{::tab.name}}
ng-transclude ng-transclude

View File

@ -21,21 +21,21 @@ div.profile.centered(ng-if="vm.user")
div( div(
tg-profile-tab="{{'USER.PROFILE.TABS.LIKES_TAB' | translate}}" tg-profile-tab="{{'USER.PROFILE.TABS.LIKES_TAB' | translate}}"
tab-title="{{'USER.PROFILE.TABS.LIKES_TAB_TITLE' | translate}}" tab-title="{{'USER.PROFILE.TABS.LIKES_TAB_TITLE' | translate}}"
tab-icon="icon-heart" tab-icon="icon-like"
) )
div(tg-profile-liked, user="vm.user") div(tg-profile-liked, user="vm.user")
div( div(
tg-profile-tab="{{'USER.PROFILE.TABS.VOTES_TAB' | translate}}" tg-profile-tab="{{'USER.PROFILE.TABS.VOTES_TAB' | translate}}"
tab-title="{{'USER.PROFILE.TABS.VOTES_TAB_TITLE' | translate}}" tab-title="{{'USER.PROFILE.TABS.VOTES_TAB_TITLE' | translate}}"
tab-icon="icon-caret-up" tab-icon="icon-upvote"
) )
div(tg-profile-voted, user="vm.user") div(tg-profile-voted, user="vm.user")
div( div(
tg-profile-tab="{{'USER.PROFILE.TABS.WATCHED_TAB' | translate}}" tg-profile-tab="{{'USER.PROFILE.TABS.WATCHED_TAB' | translate}}"
tab-title="{{'USER.PROFILE.TABS.WATCHED_TAB_TITLE' | translate}}" tab-title="{{'USER.PROFILE.TABS.WATCHED_TAB_TITLE' | translate}}"
tab-icon="icon-eye" tab-icon="icon-watch"
) )
div(tg-profile-watched, user="vm.user") div(tg-profile-watched, user="vm.user")

View File

@ -50,12 +50,16 @@
padding: 5vh; padding: 5vh;
text-align: center; text-align: center;
svg { svg {
fill: $whitish;
height: 10rem;
margin: 2rem auto; margin: 2rem auto;
max-width: 160px;
text-align: center; text-align: center;
width: 10rem;
} }
p { p {
color: $gray-light;
font-size: .9rem; font-size: .9rem;
margin: 0;
} }
} }
} }

View File

@ -7,8 +7,11 @@
padding: 1rem; padding: 1rem;
&:hover, &:hover,
&.active { &.active {
color: $grayer; color: $gray;
transition: color .2s linear; transition: color .2s linear;
.icon {
fill: $primary-light;
}
} }
&.active { &.active {
background: $white; background: $white;
@ -19,11 +22,13 @@
transition: color .2s linear; transition: color .2s linear;
.icon { .icon {
color: $primary; color: $primary;
transition: color .2s linear;
} }
} }
} }
.icon { .icon {
margin-right: .4rem; fill: $gray-light;
height: .8rem;
margin-right: .5rem;
transition: fill .2s linear;
} }
} }

View File

@ -6,9 +6,10 @@
margin-bottom: .5rem; margin-bottom: .5rem;
padding: .5rem; padding: .5rem;
.icon { .icon {
color: $gray-light; fill: $gray-light;
margin-right: .3rem; margin-right: .3rem;
vertical-align: text-bottom; margin-top: -3px;
vertical-align: middle;
} }
} }
p { p {

View File

@ -8,7 +8,8 @@ a.track-button.like-button.like-container(
) )
span.track-inner span.track-inner
span.track-icon span.track-icon
include ../../../../svg/like.svg svg.icon.icon-like
use(xlink:href="#icon-like")
span( span(
ng-if="!vm.project.get('is_fan')" ng-if="!vm.project.get('is_fan')"
translate="PROJECT.LIKE_BUTTON.LIKE" translate="PROJECT.LIKE_BUTTON.LIKE"

View File

@ -6,10 +6,12 @@ a.track-button.watch-button.watch-container(
) )
span.track-inner span.track-inner
span.track-icon span.track-icon
include ../../../../svg/watch.svg svg.icon.icon-watch
use(xlink:href="#icon-watch")
span(ng-if="!vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCH") span(ng-if="!vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCH")
span(ng-if="vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCHING") span(ng-if="vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCHING")
span.icon.icon-arrow-up svg.icon.icon-arrow-down
use(xlink:href="#icon-arrow-down")
span.track-button-counter( span.track-button-counter(
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}", title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}",
@ -35,7 +37,8 @@ ul.watch-options(
) )
span(translate="PROJECT.WATCH_BUTTON.OPTIONS.NOTIFY_ALL") span(translate="PROJECT.WATCH_BUTTON.OPTIONS.NOTIFY_ALL")
span.watch-check(ng-if="vm.project.get('is_watcher') && vm.project.get('notify_level') == 2") span.watch-check(ng-if="vm.project.get('is_watcher') && vm.project.get('notify_level') == 2")
include ../../../../svg/check.svg svg.icon.icon-check-empty
use(xlink:href="#icon-check-empty")
li li
a( a(
href="", href="",
@ -45,7 +48,8 @@ ul.watch-options(
) )
span(translate="PROJECT.WATCH_BUTTON.OPTIONS.NOTIFY_INVOLVED") span(translate="PROJECT.WATCH_BUTTON.OPTIONS.NOTIFY_INVOLVED")
span.watch-check(ng-if="vm.project.get('is_watcher') && vm.project.get('notify_level') == 1") span.watch-check(ng-if="vm.project.get('is_watcher') && vm.project.get('notify_level') == 1")
include ../../../../svg/check.svg svg.icon.icon-check-empty
use(xlink:href="#icon-check-empty")
li(ng-if="vm.project.get('is_watcher')") li(ng-if="vm.project.get('is_watcher')")
a( a(

View File

@ -13,7 +13,8 @@
href="" href=""
title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}" title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}"
) )
span.icon.icon-upload svg.icon.icon-upload
use(xlink:href="#icon-upload")
input.import-file.hidden(type="file") input.import-file.hidden(type="file")
section.project-list-section section.project-list-section
@ -46,7 +47,8 @@
ng-if="project.get('is_private')" ng-if="project.get('is_private')"
title="{{'PROJECT.PRIVATE' | translate}}" title="{{'PROJECT.PRIVATE' | translate}}"
) )
include ../../../svg/lock.svg svg.icon.icon-lock
use(xlink:href="#icon-lock")
p {{ ::project.get('description') | limitTo:300 }} p {{ ::project.get('description') | limitTo:300 }}
span(ng-if="::project.get('description').length > 300") ... span(ng-if="::project.get('description').length > 300") ...
@ -57,7 +59,8 @@
) )
span.tag-name {{::tag.get('name')}} span.tag-name {{::tag.get('name')}}
span.drag.icon.icon-drag-v svg.drag.icon.icon-drag
use(xlink:href="#icon-drag")
aside.help-area aside.help-area
p(translate="PROJECT.HELP") p(translate="PROJECT.HELP")

View File

@ -13,20 +13,21 @@
margin: 0; margin: 0;
} }
} }
.create-options a { .create-project-btn {
&.create-project-btn {
margin-right: .25rem; margin-right: .25rem;
padding: .6rem 2.5rem; padding: .6rem 2.5rem;
} }
&.import-project-button { .import-project-button {
padding: .53rem .8rem; padding: .53rem .8rem;
&:hover { &:hover {
background: $grayer; .icon-upload {
fill: $primary-light;
}
} }
.icon-upload { .icon-upload {
margin: 0; fill: $white;
}
} }
} }
.project-list-section { .project-list-section {
display: flex; display: flex;
@ -63,10 +64,12 @@
} }
} }
.drag { .drag {
@extend %large;
align-self: center; align-self: center;
color: $gray-light; fill: $gray-light;
height: 1.1rem;
margin-right: .5rem;
opacity: 0; opacity: 0;
transition: opacity .2s; transition: opacity .2s;
width: 1.1rem;
} }
} }

View File

@ -20,7 +20,8 @@ div.wrapper
ng-if="::vm.project.get('is_private')" ng-if="::vm.project.get('is_private')"
title="{{'PROJECT.PRIVATE' | translate}}" title="{{'PROJECT.PRIVATE' | translate}}"
) )
include ../../../svg/lock.svg svg.icon.icon-lock
use(xlink:href="#icon-lock")
div.track-buttons-container(ng-if="vm.user") div.track-buttons-container(ng-if="vm.user")
tg-like-project-button(project="vm.project") tg-like-project-button(project="vm.project")
@ -31,15 +32,15 @@ div.wrapper
span.list-itemtype-track-likers( span.list-itemtype-track-likers(
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_fans\")||0}:'messageformat' }}" title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_fans\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-like
include ../../../svg/like.svg use(xlink:href="#icon-like")
span {{ ::vm.project.get('total_fans') }} span {{ ::vm.project.get('total_fans') }}
span.list-itemtype-track-watchers( span.list-itemtype-track-watchers(
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}" title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}"
) )
span.icon svg.icon.icon-watche
include ../../../svg/watch.svg use(xlink:href="#icon-watch")
span {{ ::vm.project.get('total_watchers') }} span {{ ::vm.project.get('total_watchers') }}
p.description {{vm.project.get('description')}} p.description {{vm.project.get('description')}}

View File

@ -1,5 +1,6 @@
div.single-attachment div.single-attachment
blockquote blockquote
a(ng-href="{{ attachment.get('url') }}", title="Click to download {{ attachment.get('filename') }}", target="_blank") a(ng-href="{{ attachment.get('url') }}", title="Click to download {{ attachment.get('filename') }}", target="_blank")
span.icon.icon-document svg.icon.icon-attachment
use(xlink:href="#icon-attachment")
span {{attachment.get('filename')}} span {{attachment.get('filename')}}

View File

@ -86,11 +86,12 @@
max-width: 95%; max-width: 95%;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
vertical-align: middle; vertical-align: sub;
white-space: nowrap; white-space: nowrap;
} }
.icon { .icon {
margin-right: .3rem; fill: $grayer;
margin-right: .5rem;
} }
} }
.spin { .spin {

View File

@ -26,5 +26,6 @@ div.wrapper(ng-controller="ProjectProfileController as ctrl",
p.result-message p.result-message
a.help-button(href="https://taiga.io/support/import-export-projects/", target="_blank") a.help-button(href="https://taiga.io/support/import-export-projects/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.HELP") span(translate="ADMIN.HELP")

View File

@ -15,7 +15,8 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl"
form form
div.functionality(ng-class="{true:'active', false:''}[project.is_backlog_activated]") div.functionality(ng-class="{true:'active', false:''}[project.is_backlog_activated]")
div.icon.icon-scrum svg.icon.icon-scrum
use(xlink:href="#icon-scrum")
div.desc div.desc
p p
span.title(translate="ADMIN.MODULES.BACKLOG") span.title(translate="ADMIN.MODULES.BACKLOG")
@ -29,7 +30,8 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl"
span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE") span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE")
div.functionality(ng-class="{true:'active', false:''}[project.is_kanban_activated]") div.functionality(ng-class="{true:'active', false:''}[project.is_kanban_activated]")
div.icon.icon-kanban svg.icon.icon-kanban
use(xlink:href="#icon-kanban")
div.desc div.desc
p p
span.title(translate="ADMIN.MODULES.KANBAN") span.title(translate="ADMIN.MODULES.KANBAN")
@ -43,7 +45,8 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl"
span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE") span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE")
div.functionality(ng-class="{true:'active', false:''}[project.is_issues_activated]") div.functionality(ng-class="{true:'active', false:''}[project.is_issues_activated]")
div.icon.icon-issues svg.icon.icon-issues
use(xlink:href="#icon-issues")
div.desc div.desc
p p
span.title(translate="ADMIN.MODULES.ISSUES") span.title(translate="ADMIN.MODULES.ISSUES")
@ -57,7 +60,8 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl"
span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE") span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE")
div.functionality(ng-class="{true:'active', false:''}[project.is_wiki_activated]") div.functionality(ng-class="{true:'active', false:''}[project.is_wiki_activated]")
div.icon.icon-wiki svg.icon.icon-wiki
use(xlink:href="#icon-wiki")
div.desc div.desc
p p
span.title(translate="ADMIN.MODULES.WIKI") span.title(translate="ADMIN.MODULES.WIKI")
@ -71,7 +75,8 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl"
span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE") span(ng-switch-when="false", translate="ADMIN.MODULES.ENABLE")
div.functionality(ng-class="{true:'active', false:''}[isVideoconferenceActivated]") div.functionality(ng-class="{true:'active', false:''}[isVideoconferenceActivated]")
div.icon.icon-video svg.icon.icon-bubble-empty
use(xlink:href="#icon-bubble-empty")
div.desc div.desc
p p
span.title(translate="ADMIN.MODULES.MEETUP") span.title(translate="ADMIN.MODULES.MEETUP")

View File

@ -105,10 +105,9 @@ div.wrapper(
fieldset.looking-for-people fieldset.looking-for-people
.looking-for-people-selector .looking-for-people-selector
span {{ 'ADMIN.PROJECT_PROFILE.RECRUITING' | translate }} span {{ 'ADMIN.PROJECT_PROFILE.RECRUITING' | translate }}
span( svg.icon.icon-recruit
title="{{ 'ADMIN.PROJECT_PROFILE.RECRUITING_MESSAGE' | translate }}" use(xlink:href="#icon-recruit")
) title {{ 'ADMIN.PROJECT_PROFILE.RECRUITING_MESSAGE' | translate }}"
include ../../svg/recruit.svg
div.check div.check
input( input(
type="checkbox", type="checkbox",
@ -138,8 +137,6 @@ div.wrapper(
ng-value="false" ng-value="false"
) )
label.trans-button(for="private-project") {{ 'ADMIN.PROJECT_PROFILE.PUBLIC_PROJECT' | translate }} label.trans-button(for="private-project") {{ 'ADMIN.PROJECT_PROFILE.PUBLIC_PROJECT' | translate }}
span(title="{{ 'ADMIN.PROJECT_PROFILE.PUBLIC_PROJECT_DESC' | translate }}")
include ../../svg/help.svg
div.privacy-option div.privacy-option
input.privacy-project( input.privacy-project(
@ -150,15 +147,14 @@ div.wrapper(
ng-value="true" ng-value="true"
) )
label.trans-button(for="public-project") {{'ADMIN.PROJECT_PROFILE.PRIVATE_PROJECT' | translate }} label.trans-button(for="public-project") {{'ADMIN.PROJECT_PROFILE.PRIVATE_PROJECT' | translate }}
span(title="{{ 'ADMIN.PROJECT_PROFILE.PRIVATE_PROJECT_DESC' | translate }}")
include ../../svg/help.svg
a.private-or-public( a.private-or-public(
href="https://taiga.io/support/whats-the-difference-between-public-and-private-projects/" href="https://taiga.io/support/whats-the-difference-between-public-and-private-projects/"
target="_blank" target="_blank"
) )
span(title="{{ 'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }}") svg.icon.icon-question
include ../../svg/help.svg use(xlink:href="#icon-question")
title {{ 'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }}
span {{'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }} span {{'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }}
button.button-green.submit-button( button.button-green.submit-button(
type="submit" type="submit"

View File

@ -22,5 +22,6 @@ div.wrapper(ng-controller="ProjectProfileController as ctrl",
div div
a.help-button(href="https://taiga.io/support/csv-reports/", target="_blank") a.help-button(href="https://taiga.io/support/csv-reports/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.REPORTS.HELP") span(translate="ADMIN.REPORTS.HELP")

View File

@ -18,15 +18,17 @@ div.wrapper.roles(ng-controller="RolesController as ctrl",
span(translate="COMMON.DELETE") span(translate="COMMON.DELETE")
div(ng-if="!role.external_user") tg-edit-role(ng-if="!role.external_user")
div(tg-edit-role)
.edit-role .edit-role
input(type="text", value="{{ role.name }}") input(type="text", value="{{ role.name }}")
a.save.icon-floppy(href="", title="{{'COMMON.SAVE' | translate}}") a.save(href="", title="{{'COMMON.SAVE' | translate}}")
svg.icon.icon-save
use(xlink:href="#icon-save")
p.total p.total
span.role-name(title="{{'ADMIN.ROLES.COUNT_MEMBERS' | translate}}") {{ role.name }} span.role-name(title="{{'ADMIN.ROLES.COUNT_MEMBERS' | translate}}") {{ role.name }}
a.edit-value.icon.icon-edit a.edit-value
svg.icon.icon-edit
use(xlink:href="#icon-edit")
div.any-computable-role(ng-hide="anyComputableRole", translate="ADMIN.ROLES.WARNING_NO_ROLE") div.any-computable-role(ng-hide="anyComputableRole", translate="ADMIN.ROLES.WARNING_NO_ROLE")

View File

@ -24,7 +24,8 @@ div.wrapper.roles(tg-bitbucket-webhooks, ng-controller="BitbucketController as c
.field-with-option .field-with-option
input(type="text", ng-model="bitbucket.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url") input(type="text", ng-model="bitbucket.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url")
.option-wrapper.select-input-content .option-wrapper.select-input-content
.icon.icon-copy svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD") .help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
fieldset fieldset
@ -34,5 +35,6 @@ div.wrapper.roles(tg-bitbucket-webhooks, ng-controller="BitbucketController as c
button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE")
a.help-button(href="https://taiga.io/support/bitbucket-integration/", target="_blank") a.help-button(href="https://taiga.io/support/bitbucket-integration/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.HELP") span(translate="ADMIN.HELP")

View File

@ -23,11 +23,13 @@ div.wrapper.roles(tg-github-webhooks, ng-controller="GithubController as ctrl",
.field-with-option .field-with-option
input(type="text", ng-model="github.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url") input(type="text", ng-model="github.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url")
.option-wrapper.select-input-content .option-wrapper.select-input-content
.icon.icon-copy svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD") .help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE")
a.help-button(href="https://taiga.io/support/github-integration/", target="_blank") a.help-button(href="https://taiga.io/support/github-integration/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.HELP") span(translate="ADMIN.HELP")

View File

@ -23,7 +23,8 @@ div.wrapper.roles(tg-gitlab-webhooks, ng-controller="GitlabController as ctrl",
.field-with-option .field-with-option
input(type="text", ng-model="gitlab.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url") input(type="text", ng-model="gitlab.webhooks_url", name="payload-url", readonly="readonly", placeholder="{{'ADMIN.THIRD_PARTIES.PAYLOAD_URL' | translate}}", id="payload-url")
.option-wrapper.select-input-content .option-wrapper.select-input-content
.icon.icon-copy svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD") .help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
fieldset fieldset
@ -33,5 +34,6 @@ div.wrapper.roles(tg-gitlab-webhooks, ng-controller="GitlabController as ctrl",
button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE")
a.help-button(href="https://taiga.io/support/gitlab-integration/", target="_blank") a.help-button(href="https://taiga.io/support/gitlab-integration/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.HELP") span(translate="ADMIN.HELP")

View File

@ -31,12 +31,29 @@ div.wrapper.roles(ng-controller="WebhooksController as ctrl",
div.webhook-url div.webhook-url
div.webhook-url-inputs div.webhook-url-inputs
fieldset fieldset
input(type="text", name="url", data-type="url", placeholder="{{'ADMIN.WEBHOOKS.TYPE_PAYLOAD_URL' | translate}}", data-required="true", ng-model="webhook.url") input(
type="text"
name="url"
data-type="url"
placeholder="{{'ADMIN.WEBHOOKS.TYPE_PAYLOAD_URL' | translate}}"
data-required="true"
ng-model="webhook.url"
)
fieldset fieldset
input(type="text", name="key", placeholder="{{'ADMIN.WEBHOOKS.TYPE_SERVICE_SECRET' | translate}}", data-required="true", ng-model="webhook.key") input(
type="text"
name="key"
placeholder="{{'ADMIN.WEBHOOKS.TYPE_SERVICE_SECRET' | translate}}"
data-required="true"
ng-model="webhook.key"
)
div.webhook-options div.webhook-options
a.edit-existing.icon.icon-floppy(href="", title="{{'ADMIN.WEBHOOKS.SAVE' | translate}}") a.edit-existing(href="", title="{{'ADMIN.WEBHOOKS.SAVE' | translate}}")
a.cancel-existing.icon.icon-delete(href="", title="{{'ADMIN.WEBHOOKS.CANCEL' | translate}}") svg.icon.icon-save
use(xlink:href="#icon-save")
a.cancel-existing(href="", title="{{'ADMIN.WEBHOOKS.CANCEL' | translate}}")
svg.icon.icon-close
use(xlink:href="#icon-close")
div.visualization-mode div.visualization-mode
div.row div.row
@ -48,9 +65,15 @@ div.wrapper.roles(ng-controller="WebhooksController as ctrl",
div.webhook-options div.webhook-options
div.webhook-options-wrapper div.webhook-options-wrapper
a.test-webhook.icon.icon-check-square(href="", title="{{'ADMIN.WEBHOOKS.TEST' | translate}}") a.test-webhook(href="", title="{{'ADMIN.WEBHOOKS.TEST' | translate}}")
a.edit-webhook.icon.icon-edit(href="", title="{{'ADMIN.WEBHOOKS.EDIT' | translate}}") svg.icon.icon-check-empty
a.delete-webhook.icon.icon-delete(href="", title="{{'ADMIN.WEBHOOKS.DELETE' | translate}}") use(xlink:href="#icon-check-empty")
a.edit-webhook(href="", title="{{'ADMIN.WEBHOOKS.EDIT' | translate}}")
svg.icon.icon-edit
use(xlink:href="#icon-edit")
a.delete-webhook(href="", title="{{'ADMIN.WEBHOOKS.DELETE' | translate}}")
svg.icon.icon-trash
use(xlink:href="#icon-trash")
div.webhooks-history(ng-show="webhook.logs") div.webhooks-history(ng-show="webhook.logs")
div.history-single-wrapper(ng-repeat="log in webhook.logs") div.history-single-wrapper(ng-repeat="log in webhook.logs")
@ -58,13 +81,15 @@ div.wrapper.roles(ng-controller="WebhooksController as ctrl",
div div
span.history-response-icon(ng-class="log.validStatus ? 'history-success' : 'history-error'", title="{{log.status}}") span.history-response-icon(ng-class="log.validStatus ? 'history-success' : 'history-error'", title="{{log.status}}")
span.history-date(ng-bind="log.prettyDate") span.history-date(ng-bind="log.prettyDate")
span.toggle-log.icon.icon-arrow-bottom svg.toggle-log.icon.icon-arrow-down
use(xlink:href="#icon-arrow-down")
div.history-single-response div.history-single-response
div.history-single-request-header div.history-single-request-header
span(translate="ADMIN.WEBHOOKS.REQUEST") span(translate="ADMIN.WEBHOOKS.REQUEST")
a.resend-request(href="", title="{{'ADMIN.WEBHOOKS.RESEND_REQUEST' | translate}}", data-log="{{log.id}}") a.resend-request(href="", title="{{'ADMIN.WEBHOOKS.RESEND_REQUEST' | translate}}", data-log="{{log.id}}")
span.icon.icon-reload svg.icon.icon-reload
use(xlink:href="#icon-reload")
span(translate="ADMIN.WEBHOOKS.RESEND_REQUEST") span(translate="ADMIN.WEBHOOKS.RESEND_REQUEST")
div.history-single-request-body div.history-single-request-body
div.response-container div.response-container
@ -91,9 +116,14 @@ div.wrapper.roles(ng-controller="WebhooksController as ctrl",
fieldset fieldset
input(type="text", name="key", placeholder="{{'ADMIN.WEBHOOKS.TYPE_SERVICE_SECRET' | translate}}", data-required="true", ng-model="newValue.key") input(type="text", name="key", placeholder="{{'ADMIN.WEBHOOKS.TYPE_SERVICE_SECRET' | translate}}", data-required="true", ng-model="newValue.key")
div.webhook-options div.webhook-options
a.add-new.icon.icon-floppy(href="", title="{{'ADMIN.WEBHOOKS.SAVE' | translate}}") a.add-new(href="", title="{{'ADMIN.WEBHOOKS.SAVE' | translate}}")
a.cancel-new.icon.icon-delete(href="", title="{{'ADMIN.WEBHOOKS.CANCEL' | translate}}") svg.icon.icon-save
use(xlink:href="#icon-save")
a.cancel-new(href="", title="{{'ADMIN.WEBHOOKS.CANCEL' | translate}}")
svg.icon.icon-close
use(xlink:href="#icon-close")
a.help-button(href="https://taiga.io/support/webhooks/", target="_blank") a.help-button(href="https://taiga.io/support/webhooks/", target="_blank")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="ADMIN.HELP") span(translate="ADMIN.HELP")

View File

@ -10,11 +10,14 @@ section.project-csv(tg-select-input-text)
input(type="text", placeholder="{{'ADMIN.CSV.URL_FIELD_PLACEHOLDER' | translate}}", input(type="text", placeholder="{{'ADMIN.CSV.URL_FIELD_PLACEHOLDER' | translate}}",
readonly, ng-model="csvUrl") readonly, ng-model="csvUrl")
div.option-wrapper.select-input-content div.option-wrapper.select-input-content
div.icon.icon-copy svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
a(href="", title="{{'ADMIN.CSV.TITLE_REGENERATE_URL' | translate}}", ng-click="ctrl.regenerateUuid()") a(href="", title="{{'ADMIN.CSV.TITLE_REGENERATE_URL' | translate}}", ng-click="ctrl.regenerateUuid()")
span.icon.icon-plus(ng-hide="csvUrl") svg.icon.icon-add(ng-hide="csvUrl")
use(xlink:href="#icon-add")
span(ng-hide="csvUrl", translate="ADMIN.CSV.ACTION_GENERATE_URL") span(ng-hide="csvUrl", translate="ADMIN.CSV.ACTION_GENERATE_URL")
span.icon.icon-reload(ng-Show="csvUrl") svg.icon.icon-reload(ng-Show="csvUrl")
use(xlink:href="#icon-reload")
span(ng-Show="csvUrl", translate="ADMIN.CSV.ACTION_REGENERATE") span(ng-Show="csvUrl", translate="ADMIN.CSV.ACTION_REGENERATE")

View File

@ -12,8 +12,8 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl",
include ../includes/components/summary include ../includes/components/summary
div.empty-burndown(ng-if="showGraphPlaceholder") div.empty-burndown(ng-if="showGraphPlaceholder")
div.graph-icon svg.icon.icon-graph
include ../../svg/graph.svg use(xlink:href="#icon-graph")
div.empty-text div.empty-text
p.title(translate="BACKLOG.CUSTOMIZE_GRAPH") p.title(translate="BACKLOG.CUSTOMIZE_GRAPH")
p {{'BACKLOG.CUSTOMIZE_GRAPH_TEXT' | translate}} #[a(href="", tg-nav="project-admin-project-profile-details:project=project.slug", title="{{'BACKLOG.CUSTOMIZE_GRAPH_TITLE' | translate}}") {{'BACKLOG.CUSTOMIZE_GRAPH_ADMIN' | translate}}] p {{'BACKLOG.CUSTOMIZE_GRAPH_TEXT' | translate}} #[a(href="", tg-nav="project-admin-project-profile-details:project=project.slug", title="{{'BACKLOG.CUSTOMIZE_GRAPH_TITLE' | translate}}") {{'BACKLOG.CUSTOMIZE_GRAPH_ADMIN' | translate}}]
@ -30,7 +30,8 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl",
title="{{'BACKLOG.MOVE_US_TO_CURRENT_SPRINT' | translate}}" title="{{'BACKLOG.MOVE_US_TO_CURRENT_SPRINT' | translate}}"
id="move-to-current-sprint" id="move-to-current-sprint"
) )
span.icon.icon-move svg.icon.icon-move
use(xlink:href="#icon-move")
span.text(translate="BACKLOG.MOVE_US_TO_CURRENT_SPRINT") span.text(translate="BACKLOG.MOVE_US_TO_CURRENT_SPRINT")
a.trans-button.move-to-latest-sprint.move-to-sprint( a.trans-button.move-to-latest-sprint.move-to-sprint(
ng-if="!currentSprint" ng-if="!currentSprint"
@ -38,7 +39,8 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl",
title="{{'BACKLOG.MOVE_US_TO_LATEST_SPRINT' | translate}}" title="{{'BACKLOG.MOVE_US_TO_LATEST_SPRINT' | translate}}"
id="move-to-latest-sprint" id="move-to-latest-sprint"
) )
span.icon.icon-move svg.icon.icon-move
use(xlink:href="#icon-move")
span.text(translate="BACKLOG.MOVE_US_TO_LATEST_SPRINT") span.text(translate="BACKLOG.MOVE_US_TO_LATEST_SPRINT")
a.trans-button( a.trans-button(
ng-if="userstories.length" ng-if="userstories.length"

View File

@ -2,5 +2,6 @@
a.single-filter.selected(data-type!="<%- f.type %>", data-id!="<%- f.id %>") a.single-filter.selected(data-type!="<%- f.type %>", data-id!="<%- f.id %>")
span.name(style!="<%- f.style %>") span.name(style!="<%- f.style %>")
| <%- f.name %> | <%- f.name %>
span.icon.icon-delete svg.icon.icon-close.remove-filter
use(xlink:href="#icon-close")
<% }) %> <% }) %>

View File

@ -1,9 +1,12 @@
.sprint-name .sprint-name
a.icon.icon-arrow-up(href="", title="{{'BACKLOG.COMPACT_SPRINT' | translate}}") a.compact-sprint(href="", title="{{'BACKLOG.COMPACT_SPRINT' | translate}}")
svg.icon.icon-arrow-right
use(xlink:href="#icon-arrow-right")
a(ng-if="::isVisible", href="{{::taskboardUrl}}", title="{{'BACKLOG.GO_TO_TASKBOARD' | translate}}") a(ng-if="::isVisible", href="{{::taskboardUrl}}", title="{{'BACKLOG.GO_TO_TASKBOARD' | translate}}")
span {{::name}} span {{::name}}
a.icon.icon-edit(ng-if="::isEditable", href="", title="{{'BACKLOG.EDIT_SPRINT' | translate}}") svg.icon.icon-edit.edit-sprint(ng-if="::isEditable", href="", title="{{'BACKLOG.EDIT_SPRINT' | translate}}")
use(xlink:href="#icon-edit")
.sprint-summary .sprint-summary
.sprint-date {{::estimatedDateRange}} .sprint-date {{::estimatedDateRange}}

View File

@ -1,4 +1,5 @@
a.add-button( a.add-button(
href="" href=""
) )
include ../../../svg/add.svg svg.icon.icon-add
use(xlink:href="#icon-add")

View File

@ -2,7 +2,8 @@
img(src!="<%- photo %>", alt!="<%- fullName %>") img(src!="<%- photo %>", alt!="<%- fullName %>")
<% if (isIocaine) { %> <% if (isIocaine) { %>
.iocaine-symbol(title="{{ 'TASK.TITLE_ACTION_IOCAINE' | translate }}") .iocaine-symbol(title="{{ 'TASK.TITLE_ACTION_IOCAINE' | translate }}")
include ../../../svg/iocaine.svg svg.icon.icon-iocaine
use(xlink:href="#icon-iocaine")
<% }; %> <% }; %>
.assigned-to .assigned-to
@ -23,7 +24,8 @@
<%- fullName %> <%- fullName %>
<% }; %> <% }; %>
<% if (isEditable && !isUnassigned) { %> <% if (isEditable && !isUnassigned) { %>
span.icon.icon-arrow-bottom svg.icon.icon-arrow-down
use(xlink:href="#icon-arrow-down")
<% }; %> <% }; %>
<% if (isEditable && isUnassigned) { %> <% if (isEditable && isUnassigned) { %>
@ -37,8 +39,9 @@
<% }; %> <% }; %>
<% if (isEditable && !isUnassigned) { %> <% if (isEditable && !isUnassigned) { %>
a.icon.icon-delete( svg.icon.icon-close.remove-user(
href="" href=""
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"
) )
use(xlink:href="#icon-close")
<% } %> <% } %>

View File

@ -2,9 +2,11 @@ a.button-gray.item-block(
href="" href=""
title="{{ 'COMMON.BLOCK_TITLE' | translate }}" title="{{ 'COMMON.BLOCK_TITLE' | translate }}"
) )
include ../../../svg/lock.svg svg.icon.icon-lock
use(xlink:href="#icon-lock")
a.button-red.item-unblock( a.button-red.item-unblock(
href="" href=""
title="{{ 'COMMON.UNBLOCK_TITLE' | translate }}" title="{{ 'COMMON.UNBLOCK_TITLE' | translate }}"
) )
include ../../../svg/unlock.svg svg.icon.icon-lock
use(xlink:href="#icon-unlock")

View File

@ -2,4 +2,5 @@ a.button-red.button-delete(
href="" href=""
title="{{ 'COMMON.DELETE' | translate }}" title="{{ 'COMMON.DELETE' | translate }}"
) )
include ../../../svg/trash.svg svg.icon.icon-trash
use(xlink:href="#icon-trash")

View File

@ -2,10 +2,12 @@ include wysiwyg.jade
.view-description .view-description
section.us-content.wysiwyg(tg-bind-html="item.description_html || noDescriptionMsg") section.us-content.wysiwyg(tg-bind-html="item.description_html || noDescriptionMsg")
span.edit.icon.icon-edit svg.icon.icon-edit.edit
use(xlink:href="#icon-edit")
.edit-description .edit-description
textarea(ng-attr-placeholder="{{'COMMON.DESCRIPTION.EMPTY' | translate}}", ng-model="item.description", tg-markitup="tg-markitup") textarea(ng-attr-placeholder="{{'COMMON.DESCRIPTION.EMPTY' | translate}}", ng-model="item.description", tg-markitup="tg-markitup")
+wysihelp +wysihelp
span.save-container span.save-container
a.save.icon.icon-floppy(href="", title="{{'COMMON.SAVE' | translate}}") svg.save.icon.icon-save(title="{{'COMMON.SAVE' | translate}}")
use(xlink:href="#icon-save")

View File

@ -1,7 +1,9 @@
.view-subject .view-subject
| {{ item.subject }} | {{ item.subject }}
a.edit.icon.icon-edit(href="" title="{{'COMMON.EDIT' | translate}}") svg.edit.icon.icon-edit(href="" title="{{'COMMON.EDIT' | translate}}")
use(xlink:href="#icon-edit")
.edit-subject .edit-subject
input(type="text", ng-model="item.subject", data-required="true", data-maxlength="500", ng-model-options="{ debounce: 200 }") input(type="text", ng-model="item.subject", data-required="true", data-maxlength="500", ng-model-options="{ debounce: 200 }")
span.save-container span.save-container
a.save.icon.icon-floppy(href="", title="{{'COMMON.SAVE' | translate}}") svg.save.icon.icon-save(href="", title="{{'COMMON.SAVE' | translate}}")
use(xlink:href="#icon-save")

View File

@ -10,11 +10,11 @@
span <%- watcher.full_name_display %> span <%- watcher.full_name_display %>
<% if(isEditable){ %> <% if(isEditable){ %>
a.icon.icon-delete.js-delete-watcher( svg.icon.icon-trash.js-delete-watcher.delete-watcher(
href=""
data-watcher-id!="<%- watcher.id %>" data-watcher-id!="<%- watcher.id %>"
title="{{'COMMON.WATCHERS.DELETE' | translate}}" title="{{'COMMON.WATCHERS.DELETE' | translate}}"
) )
use(xlink:href="#icon-trash")
<% }; %> <% }; %>
<% } %> <% } %>
<% }); %> <% }); %>

View File

@ -2,5 +2,6 @@ mixin wysihelp
div.wysiwyg-help div.wysiwyg-help
span.drag-drop-help Attach files by dragging & dropping on the textarea above. span.drag-drop-help Attach files by dragging & dropping on the textarea above.
a.help-markdown(href="https://taiga.io/support/taiga-markdown-syntax/", target="_blank", title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}") a.help-markdown(href="https://taiga.io/support/taiga-markdown-syntax/", target="_blank", title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}")
span.icon.icon-help svg.icon.icon-question
use(xlink:href="#icon-question")
span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") span(translate="COMMON.WYSIWYG.MARKDOWN_HELP")

View File

@ -3,7 +3,8 @@ ul.points-per-role
li.ticket-role-points.total(class!="<% if(editable){ %>clickable<% } %>", data-role-id!="<%- role.id %>", title!="<%- role.name %>") li.ticket-role-points.total(class!="<% if(editable){ %>clickable<% } %>", data-role-id!="<%- role.id %>", title!="<%- role.name %>")
span.points span.points
<%- role.points %> <%- role.points %>
span.icon-arrow-bottom svg.icon.icon-arrow-down
use(xlink:href="#icon-arrow-down")
span.role span.role
<%- role.name %> <%- role.name %>
<% }); %> <% }); %>

View File

@ -1,5 +1,6 @@
a.us-points(href="", title!="<%= title %>", class!="<% if (!editable) { %>not-clickable<% } %>") a.us-points(href="", title!="<%= title %>", class!="<% if (!editable) { %>not-clickable<% } %>")
span.points-value <%= text %> span.points-value <%= text %>
<% if (editable) { %> <% if (editable) { %>
span.icon.icon-arrow-bottom(tg-check-permission="modify_us") svg.icon.icon-arrow-down(tg-check-permission="modify_us")
use(xlink:href="#icon-arrow-down")
<% } %> <% } %>

View File

@ -1,4 +1,4 @@
div(class!="activity-single <%- mode %>") .activity-single(class!="<%- mode %>")
.activity-user .activity-user
a.avatar(href!="<%- userProfileUrl %>", title!="<%- userFullName %>") a.avatar(href!="<%- userProfileUrl %>", title!="<%- userFullName %>")
img(src!="<%- avatar %>", alt!="<%- userFullName %>") img(src!="<%- avatar %>", alt!="<%- userFullName %>")
@ -18,11 +18,11 @@ div(class!="activity-single <%- mode %>")
.comment.wysiwyg(ng-non-bindable) .comment.wysiwyg(ng-non-bindable)
| <%= comment %> | <%= comment %>
<% if (!deleteCommentDate && mode !== "activity" && canDeleteComment) { %> <% if (!deleteCommentDate && mode !== "activity" && canDeleteComment) { %>
a.icon.icon-delete.comment-delete( svg.icon.icon-trash.comment-delete(
href=""
data-activity-id!="<%- activityId %>" data-activity-id!="<%- activityId %>"
title!="<%- deleteCommentActionTitle %>" title!="<%- deleteCommentActionTitle %>"
) )
use(xlink:href="#icon-trash")
<% } %> <% } %>
<% } %> <% } %>
@ -31,7 +31,8 @@ div(class!="activity-single <%- mode %>")
<% if (mode != "activity") { %> <% if (mode != "activity") { %>
a.changes-title(href="", title="{{'ACTIVITY.SHOW_ACTIVITY' | translate}}") a.changes-title(href="", title="{{'ACTIVITY.SHOW_ACTIVITY' | translate}}")
span <%- changesText %> span <%- changesText %>
span.icon.icon-arrow-up svg.icon.icon-arrow-right
use(xlink:href="#icon-arrow-right")
<% } %> <% } %>
<% _.each(changes, function(change) { %> <% _.each(changes, function(change) { %>
| <%= change %> | <%= change %>

View File

@ -6,13 +6,15 @@ section.history
<% if (commentsVisible) { %> <% if (commentsVisible) { %>
li li
a(href="#", class="active", data-section-class="history-comments") a(href="#", class="active", data-section-class="history-comments")
span.icon.icon-comment svg.icon.icon-writer
use(xlink:href="#icon-writer")
span.tab-title(translate="COMMENTS.TITLE") span.tab-title(translate="COMMENTS.TITLE")
<% } %> <% } %>
<% if (historyVisible) { %> <% if (historyVisible) { %>
li li
a(href="#", data-section-class="history-activity") a(href="#", data-section-class="history-activity")
span.icon.icon-issues svg.icon.icon-timeline
use(xlink:href="#icon-timeline")
span.tab-title(translate="ACTIVITY.TITLE") span.tab-title(translate="ACTIVITY.TITLE")
<% } %> <% } %>
<% } %> <% } %>

View File

@ -13,6 +13,7 @@
data-activity-id!="<%- activityId %>" data-activity-id!="<%- activityId %>"
title="{{ 'COMMENTS.RESTORE' | translate }}" title="{{ 'COMMENTS.RESTORE' | translate }}"
) )
span.icon.icon-reload svg.icon.icon-reload
use(xlink:href="#icon-reload")
span(translate="COMMENTS.RESTORE") span(translate="COMMENTS.RESTORE")
<% } %> <% } %>

View File

@ -1,5 +1,5 @@
a.close(href="", title="{{'COMMON.CLOSE' | translate}}") svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
span.icon.icon-delete use(xlink:href="#icon-close")
form form
h2.title(translate="LIGHTBOX.FEEDBACK.TITLE") h2.title(translate="LIGHTBOX.FEEDBACK.TITLE")
fieldset fieldset

View File

@ -11,10 +11,11 @@
title!="<%- selected.full_name_display %>" title!="<%- selected.full_name_display %>"
) )
| <%-selected.full_name_display %> | <%-selected.full_name_display %>
a.icon-delete.remove-assigned-to( svg.icon.icon-close.remove-assigned-to(
href="" href=""
title="{{'COMMON.ASSIGNED_TO.REMOVE_ASSIGNED' | translate}}" title="{{'COMMON.ASSIGNED_TO.REMOVE_ASSIGNED' | translate}}"
) )
use(xlink:href="#icon-close")
<% } %> <% } %>
<% _.each(users, function(user) { %> <% _.each(users, function(user) { %>

View File

@ -1,5 +1,6 @@
a.close(href="", title="close") svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
span.icon.icon-delete use(xlink:href="#icon-close")
div.form div.form
h2.title(translate="LIGHTBOX.ASSIGNED_TO.SELECT") h2.title(translate="LIGHTBOX.ASSIGNED_TO.SELECT")
fieldset fieldset

View File

@ -1,6 +1,6 @@
.attachment-preview .attachment-preview
a.close(href="", title="{{'COMMON.CLOSE' | translate}}") svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
span.icon.icon-delete use(xlink:href="#icon-close")
a(href="{{::file.get('url')}}", title="{{::file.get('description')}}", target="_blank", download="{{::file.get('name')}}") a(href="{{::file.get('url')}}", title="{{::file.get('description')}}", target="_blank", download="{{::file.get('name')}}")
img(src="{{::file.get('url')}}") img(src="{{::file.get('url')}}")

View File

@ -1,5 +1,5 @@
a.close(href="", title="{{'COMMON.CLOSE' | translate}}") svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
span.icon.icon-delete use(xlink:href="#icon-close")
div.form div.form
h2.title h2.title
fieldset fieldset

View File

@ -1,5 +1,5 @@
a.close(href="", title="{{'COMMON.CLOSE' | translate}}") svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
span.icon.icon-delete use(xlink:href="#icon-close")
div.form div.form
h2.title(translate="COMMON.WATCHERS.ADD") h2.title(translate="COMMON.WATCHERS.ADD")
fieldset fieldset

Some files were not shown because too many files have changed in this diff Show More