refactor svg icons

stable
Juanfran 2016-03-30 08:27:34 +02:00
parent 384383ed98
commit 0ed5a1428a
221 changed files with 1560 additions and 1446 deletions

View File

@ -240,7 +240,7 @@ module.directive("tgMemberships", ["$tgTemplate", "$compile", MembershipsDirecti
## Member Avatar Directive
#############################################################################
MembershipsRowAvatarDirective = ($log, $template, $translate) ->
MembershipsRowAvatarDirective = ($log, $template, $translate, $compile) ->
template = $template.get("admin/memberships-row-avatar.html", true)
link = ($scope, $el, $attrs) ->
@ -255,6 +255,8 @@ MembershipsRowAvatarDirective = ($log, $template, $translate) ->
}
html = template(ctx)
html = $compile(html)($scope)
$el.html(html)
if not $attrs.tgMembershipsRowAvatar?
@ -269,7 +271,7 @@ MembershipsRowAvatarDirective = ($log, $template, $translate) ->
return {link: link}
module.directive("tgMembershipsRowAvatar", ["$log", "$tgTemplate", '$translate', MembershipsRowAvatarDirective])
module.directive("tgMembershipsRowAvatar", ["$log", "$tgTemplate", '$translate', "$compile", MembershipsRowAvatarDirective])
#############################################################################
@ -393,9 +395,7 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
</div>
<a class="delete" href=""
title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}">
<svg class="icon icon-trash">
<use xlink:href="#icon-trash">
</svg>
<tg-svg svg-icon="icon-trash"></tg-svg>
</a>
"""
@ -406,9 +406,7 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
</a>
<a class="delete" href=""
title="{{ 'ADMIN.MEMBERSHIP.DELETE_MEMBER' | translate }}">
<svg class="icon icon-trash">
<use xlink:href="#icon-trash">
</svg>
<tg-svg svg-icon="icon-trash"></tg-svg>
</a>
"""

View File

@ -228,7 +228,7 @@ ProjectModulesDirective = ($repo, $confirm, $loading, projectService) ->
event.preventDefault()
submit()
$el.on "click", ".icon-save", (event) ->
$el.on "click", ".save", (event) ->
event.preventDefault()
submit()

View File

@ -292,9 +292,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) ->
title="{{ '<%- permission.name %>' | translate }}"></div>
<% }) %>
</div>
<svg class="icon icon-arrow-right">
<use xlink:href="#icon-arrow-right">
</svg>
<tg-svg svg-icon="icon-arrow-right"></tg-svg>
""")
categoryTemplate = _.template("""

View File

@ -275,6 +275,13 @@ LoginDirective = ($auth, $confirm, $location, $config, $routeParams, $navUrls, $
onError = (response) ->
$confirm.notify("light-error", $translate.instant("LOGIN_FORM.ERROR_AUTH_INCORRECT"))
$scope.onKeyUp = (event) ->
target = angular.element(event.currentTarget)
value = target.val()
$scope.iscapsLockActivated = false
if value != value.toLowerCase()
$scope.iscapsLockActivated = true
submit = debounce 2000, (event) =>
event.preventDefault()

View File

@ -38,9 +38,9 @@ module = angular.module("taigaBacklog")
## Issues Filters Directive
#############################################################################
BacklogFiltersDirective = ($q, $log, $location, $templates) ->
template = $templates.get("backlog/filters.html", true)
templateSelected = $templates.get("backlog/filter-selected.html", true)
BacklogFiltersDirective = ($q, $log, $location, $template, $compile) ->
template = $template.get("backlog/filters.html", true)
templateSelected = $template.get("backlog/filter-selected.html", true)
link = ($scope, $el, $attrs) ->
currentFiltersType = ''
@ -78,6 +78,8 @@ BacklogFiltersDirective = ($q, $log, $location, $templates) ->
f.style = "border-left: 3px solid #{f.color}"
html = templateSelected({filters: selectedFilters})
html = $compile(html)($scope)
$el.find(".filters-applied").html(html)
renderFilters = (filters) ->
@ -86,6 +88,7 @@ BacklogFiltersDirective = ($q, $log, $location, $templates) ->
f.style = "border-left: 3px solid #{f.color}"
html = template({filters:filters})
html = $compile(html)($scope)
$el.find(".filter-list").html(html)
getFiltersType = () ->
@ -158,9 +161,9 @@ BacklogFiltersDirective = ($q, $log, $location, $templates) ->
event.preventDefault()
showCategories()
$el.on "click", ".filters-applied a", (event) ->
$el.on "click", ".remove-filter", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
target = angular.element(event.currentTarget).parent()
id = target.data("id")
type = target.data("type")
toggleFilterSelection(type, id)
@ -179,4 +182,4 @@ BacklogFiltersDirective = ($q, $log, $location, $templates) ->
return {link:link}
module.directive("tgBacklogFilters", ["$q", "$log", "$tgLocation", "$tgTemplate", BacklogFiltersDirective])
module.directive("tgBacklogFilters", ["$q", "$log", "$tgLocation", "$tgTemplate", "$compile", BacklogFiltersDirective])

View File

@ -62,7 +62,7 @@ BacklogSprintDirective = ($repo, $rootscope) ->
$el.find(".sprint-table").slideToggle(slideOptions)
$el.on "click", ".sprint-name > .icon-edit", (event) ->
$el.on "click", ".edit-sprint", (event) ->
event.preventDefault()
sprint = $scope.$eval($attrs.tgBacklogSprint)

View File

@ -284,39 +284,52 @@ module.factory("$tgTemplate", ["$templateCache", Template])
## Permission directive, hide elements when necessary
#############################################################################
Capslock = ($translate) ->
link = ($scope, $el, $attrs) ->
open = false
Capslock = () ->
template = """
<tg-svg class="capslock" ng-if="capslockIcon && iscapsLockActivated" svg-icon='icon-capslock' svg-title='COMMON.CAPSLOCK_WARNING'></tg-svg>
"""
return {
template: template
}
warningIcon = "<svg class='icon icon-capslock' title='" + $translate.instant('COMMON.CAPSLOCK_WARNING') + "'><use xlink:href='#icon-capslock'></svg>";
module.directive("tgCapslock", [Capslock])
hideIcon = () ->
$('.icon-capslock').fadeOut () ->
open = false
LightboxClose = () ->
template = """
<a class="close" href="" title="{{'COMMON.CLOSE' | translate}}">
<tg-svg svg-icon="icon-close"></tg-svg>
</a>
"""
$(this).remove()
return {
template: template
}
showIcon = (e) ->
return if open
element = e.currentTarget
$(element).parent().append(warningIcon)
$('.icon-capslock').fadeIn()
module.directive("tgLightboxClose", [LightboxClose])
open = true
Svg = () ->
template = """
<svg class="{{ 'icon ' + svgIcon }}">
<use xlink:href="" ng-attr-xlink:href="{{ '#' + svgIcon }}">
<title ng-if="svgTitle">{{svgTitle}}</title>
<title
ng-if="svgTitleTranslate"
translate="{{svgTitleTranslate}}"
translate-values="{{svgTitleTranslateValues}}"
></title>
</use>
</svg>
"""
$el.on 'blur', (e) ->
hideIcon()
return {
scope: {
svgIcon: "@",
svgTitle: "@",
svgTitleTranslate: "@",
svgTitleTranslateValues: "="
},
template: template
}
$el.on 'keyup.capslock, focus', (e) ->
if $el.val() == $el.val().toLowerCase()
hideIcon(e)
else
showIcon(e)
$scope.$on "$destroy", ->
$el.off('.capslock')
return {link:link}
module.directive("tgCapslock", ["$translate", Capslock])
module.directive("tgSvg", [Svg])

View File

@ -177,9 +177,9 @@ class ConfirmService extends taiga.Service
useSVG.setAttributeNS('http://www.w3.org/1999/xlink','href', '#' + icon.name)
detailImage = document.createElementNS("http://www.w3.org/2000/svg", "svg")
detailImage.classList.add("icon")
detailImage.classList.add("lb-icon")
detailImage.classList.add(icon.name)
taiga.addClass(detailImage, "icon")
taiga.addClass(detailImage, "lb-icon")
taiga.addClass(detailImage, icon.name)
detailImage.appendChild(useSVG)
if detailImage

View File

@ -117,7 +117,7 @@ CustomAttributesValuesDirective = ($templates, $storage) ->
$ctrl.initialize($attrs.type, value.id)
$ctrl.loadCustomAttributesValues()
$el.on "click", ".custom-fields-header .icon", ->
$el.on "click", ".custom-fields-header .collapse", ->
hash = collapsedHash($attrs.type)
collapsed = not($storage.get(hash) or false)
$storage.set(hash, collapsed)

View File

@ -584,20 +584,20 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
unwatchIssues()
# Dom Event Handlers
$el.on "click", ".filters-cats > ul > li > a", (event) ->
$el.on "click", ".filters-cat-single", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
tags = $scope.filters[target.data("type")]
renderFilters(_.reject(tags, "selected"))
showFilters(target.attr("title"), target.data("type"))
$el.on "click", ".filters-inner > .filters-step-cat > .breadcrumb > .back", (event) ->
$el.on "click", ".back", (event) ->
event.preventDefault()
showCategories($el)
$el.on "click", ".filters-applied a", (event) ->
$el.on "click", ".filters-applied .remove-filter", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
target = angular.element(event.currentTarget).parent()
id = target.data("id") or null
type = target.data("type")
@ -617,7 +617,7 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
toggleFilterSelection(type, id)
$el.on "click", ".filter-list .single-filter .remove-filter", (event) ->
$el.on "click", ".filter-list .remove-filter", (event) ->
event.preventDefault()
event.stopPropagation()

View File

@ -426,7 +426,7 @@ KanbanUserstoryDirective = ($rootscope, $loading, $rs, $rs2) ->
else if not us.is_blocked and $el.hasClass("blocked")
$el.removeClass("blocked")
$el.on 'click', '.icon-edit', (event) ->
$el.on 'click', '.edit-us', (event) ->
if $el.find(".icon-edit").hasClass("noclick")
return

View File

@ -151,6 +151,7 @@ RelatedTaskCreateFormDirective = ($repo, $compile, $confirm, $tgmodel, $loading,
return promise
close = () ->
$el.removeClass('active')
$el.off()
$el.html("")
@ -173,7 +174,7 @@ RelatedTaskCreateFormDirective = ($repo, $compile, $confirm, $tgmodel, $loading,
$el.on "click", ".icon-close", (event)->
$scope.$apply () -> close()
$el.on "click", ".icon-save", (event)->
$el.on "click", ".save-task", (event)->
createTask(newTask).then ->
close()

View File

@ -317,16 +317,16 @@ TaskboardTaskDirective = ($rootscope, $loading, $rs, $rs2) ->
else if not task.is_blocked and $el.hasClass("blocked")
$el.removeClass("blocked")
$el.find(".icon-edit").on "click", (event) ->
if $el.find('.icon-edit').hasClass('noclick')
$el.find(".edit-task").on "click", (event) ->
if $el.find('.edit-task').hasClass('noclick')
return
$scope.$apply ->
target = $(event.target)
currentLoading = $loading()
.target(target)
.timeout(200)
.removeClasses("icon-edit")
.start()
task = $scope.task

View File

@ -22,6 +22,12 @@
# File: utils.coffee
###
addClass = (el, className) ->
if (el.classList)
el.classList.add(className)
else
el.className += ' ' + className
nl2br = (str) =>
breakTag = '<br />'
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2')
@ -222,6 +228,7 @@ patch = (oldImmutable, newImmutable) ->
return pathObj
taiga = @.taiga
taiga.addClass = addClass
taiga.nl2br = nl2br
taiga.bindMethods = bindMethods
taiga.bindOnce = bindOnce

View File

@ -1413,6 +1413,7 @@
"PLACEHOLDER_PAGE": "Write your wiki page",
"REMOVE": "Remove this wiki page",
"DELETE_LIGHTBOX_TITLE": "Delete Wiki Page",
"DELETE_LINK_TITLE": "Delete Wiki link",
"NAVIGATION": {
"SECTION_NAME": "Links",
"ACTION_ADD_LINK": "Add link"

View File

@ -51,10 +51,12 @@
opacity: 0;
}
.editable-settings {
display: block;
opacity: 1;
}
svg {
fill: $gray-light;
pointer-events: none;
}
.icon-edit,
.icon-save {

View File

@ -34,5 +34,4 @@
title="{{'COMMON.DELETE' | translate}}"
ng-click="vm.delete()"
)
svg.icon.icon-trash
use(xlink:href="#icon-trash")
tg-svg(svg-icon="icon-trash")

View File

@ -12,8 +12,7 @@ form.single-attachment(
target="_blank"
download="{{::vm.attachment.getIn(['file', 'name'])}}"
)
svg.icon.icon-attachment
use(xlink:href="#icon-attachment")
tg-svg(svg-icon="icon-attachment")
span {{::vm.attachment.getIn(['file', 'name'])}}
.attachment-comments(ng-if="!vm.attachment.get('editable') && vm.attachment.getIn(['file', 'description'])")
@ -52,8 +51,7 @@ form.single-attachment(
title="{{'COMMON.SAVE' | translate}}"
ng-click="vm.save()"
)
svg.drag.icon.icon-save
use(xlink:href="#icon-save")
tg-svg(svg-icon="icon-save")
div
a.editable-settings(
@ -61,8 +59,7 @@ form.single-attachment(
title="{{'COMMON.CANCEL' | translate}}"
ng-click="vm.editMode(false)"
)
svg.drag.icon.icon-close
use(xlink:href="#icon-close")
tg-svg(svg-icon="icon-close")
.attachment-settings(
ng-if="!vm.attachment.get('editable')"
@ -73,18 +70,15 @@ form.single-attachment(
title="{{'COMMON.EDIT' | translate}}"
ng-click="vm.editMode(true)"
)
svg.drag.icon.icon-edit
use(xlink:href="#icon-edit")
tg-svg.drag(svg-icon="icon-edit")
a.settings(
href=""
title="{{'COMMON.DELETE' | translate}}"
ng-click="vm.delete()"
)
svg.drag.icon.icon-trash
use(xlink:href="#icon-trash")
tg-svg.drag(svg-icon="icon-trash")
a.settings(
href=""
title="{{'COMMON.DRAG' | translate}}"
)
svg.drag.icon.icon-drag
use(xlink:href="#icon-drag")
tg-svg.drag(svg-icon="icon-drag")

View File

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

View File

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

View File

@ -7,7 +7,6 @@
a.close(
ng-click="vm.close()"
href=""
title="{{ COMMON.CLOSE | translate }}"
ng-title="COMMON.CLOSE | translate"
)
svg.icon.icon-close
use(xlink:href="#icon-close")
tg-svg(svg-icon="icon-close")

View File

@ -56,13 +56,14 @@
}
}
.close {
height: 2.5rem;
display: block;
position: absolute;
right: 0;
top: 1rem;
width: 2.5rem;
svg {
@include svg-size(2rem);
fill: lighten($tribe-secondary, 15%);
pointer-events: none;
transition: fill .2s;
&:hover {
fill: $tribe-secondary;

View File

@ -2,9 +2,9 @@ nav.menu(
ng-if="vm.project"
ng-class="{'menu-fixed': vm.fixed}",
)
div(class="menu-container")
ul(class="main-nav")
li(id="nav-search")
.menu-container
ul.main-nav
li#nav-search
a(
href=""
ng-click="vm.search()"
@ -12,94 +12,85 @@ nav.menu(
aria-label="{{'PROJECT.SECTION.SEARCH' | translate}}"
tabindex="1"
)
svg.icon.icon-search
use(xlink:href="#icon-search")
tg-svg(svg-icon="icon-search")
span.helper(translate="PROJECT.SECTION.SEARCH")
li(id="nav-timeline")
li#nav-timeline
a(
tg-nav="project:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'project-timeline'}"
aria-label="{{'PROJECT.SECTION.TIMELINE' | translate}}"
tabindex="2"
)
svg.icon.icon-timeline
use(xlink:href="#icon-timeline")
tg-svg(svg-icon="icon-timeline")
span.helper(translate="PROJECT.SECTION.TIMELINE")
li(id="nav-backlog", ng-if="vm.menu.get('backlog')")
li#nav-backlog(ng-if="vm.menu.get('backlog')")
a(
tg-nav="project-backlog:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'backlog'}"
aria-label="{{'PROJECT.SECTION.BACKLOG' | translate}}"
tabindex="2"
)
svg.icon.icon-scrum
use(xlink:href="#icon-scrum")
tg-svg(svg-icon="icon-scrum")
span.helper(translate="PROJECT.SECTION.BACKLOG")
li(id="nav-kanban", ng-if="vm.menu.get('kanban')")
li#nav-kanban(ng-if="vm.menu.get('kanban')")
a(
tg-nav="project-kanban:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'kanban'}"
aria-label="{{'PROJECT.SECTION.KANBAN' | translate}}"
tabindex="3"
)
svg.icon.icon-kanban
use(xlink:href="#icon-kanban")
tg-svg(svg-icon="icon-kanban")
span.helper(translate="PROJECT.SECTION.KANBAN")
li(id="nav-issues", ng-if="vm.menu.get('issues')")
li#nav-issues(ng-if="vm.menu.get('issues')")
a(
tg-nav="project-issues:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'issues'}"
aria-label="{{'PROJECT.SECTION.ISSUES' | translate}}"
tabindex="4"
)
svg.icon.icon-issues
use(xlink:href="#icon-issues")
tg-svg(svg-icon="icon-issues")
span.helper(translate="PROJECT.SECTION.ISSUES")
li(id="nav-wiki", ng-if="vm.menu.get('wiki')")
li#nav-wiki(ng-if="vm.menu.get('wiki')")
a(
tg-nav="project-wiki:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'wiki'}"
aria-label="{{'PROJECT.SECTION.WIKI' | translate}}"
tabindex="5"
)
svg.icon.icon-wiki
use(xlink:href="#icon-wiki")
tg-svg(svg-icon="icon-wiki")
span.helper(translate="PROJECT.SECTION.WIKI")
li(id="nav-team")
li#nav-team
a(
tg-nav="project-team:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'team'}"
aria-label="{{'PROJECT.SECTION.TEAM' | translate}}"
tabindex="6"
)
svg.icon.icon-team
use(xlink:href="#icon-team")
tg-svg(svg-icon="icon-team")
span.helper(translate="PROJECT.SECTION.TEAM")
li(id="nav-video", ng-if="vm.project.get('videoconferenceUrl')")
li#nav-video(ng-if="vm.project.get('videoconferenceUrl')")
a(
ng-href="{{vm.project.get('videoconferenceUrl')}}"
target="_blank"
aria-label="{{'PROJECT.SECTION.MEETUP' | translate}}"
tabindex="7"
)
svg.icon.icon-bubble
use(xlink:href="#icon-bubble")
tg-svg(svg-icon="icon-bubble")
span.helper(translate="PROJECT.SECTION.MEETUP")
li(id="nav-admin", ng-if="vm.project.get('i_am_admin')")
li#nav-admin(ng-if="vm.project.get('i_am_admin')")
a(
tg-nav="project-admin-home:project=vm.project.get('slug')"
ng-class="{active: vm.active == 'admin'}"
aria-label="{{'PROJECT.SECTION.ADMIN' | translate}}"
tabindex="8"
)
svg.icon.icon-settings
use(xlink:href="#icon-settings")
tg-svg(svg-icon="icon-settings")
span.helper(translate="PROJECT.SECTION.ADMIN")

View File

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

View File

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

View File

@ -16,8 +16,7 @@ a.track-button.watch-button.watch-container(
ng-mouseleave="vm.showTextWhenMouseIsLeave()"
)
span.track-inner
svg.icon.icon-watch
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span(
ng-if="!vm.item.is_watcher",
translate="COMMON.WATCH_BUTTON.WATCH"
@ -38,7 +37,6 @@ span.track-button.watch-button.watch-container(
)
span.track-inner
span.track-icon
svg.icon.icon-watch
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span(translate="COMMON.WATCH_BUTTON.WATCHERS")
+counter

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -172,11 +172,6 @@
}
}
}
.look-for-people {
@include svg-size();
fill: $gray-light;
margin-left: .5rem;
}
.project-description {
@extend %small;
color: $gray;

View File

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

View File

@ -1,10 +1,12 @@
.most-liked(ng-if="vm.highlighted.size")
.header
.title-wrapper
svg.icon.icon-like
use(xlink:href="#icon-like")
tg-svg(svg-icon="icon-like")
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(
loading="vm.loading",
highlighted="vm.highlighted"
@ -14,6 +16,5 @@
.empty-highlighted-project(
ng-if="!vm.highlighted.size"
)
svg.icon.icon-like
use(xlink:href="#icon-like")
tg-svg(svg-icon="icon-like")
span {{ 'DISCOVER.MOST_LIKED_EMPTY' | translate }}

View File

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

View File

@ -71,10 +71,6 @@
flex: 1;
vertical-align: middle;
}
.look-for-people {
fill: $gray-light;
margin-left: .5rem;
}
.project-statistics {
display: flex;
flex-basis: 300px;

View File

@ -19,9 +19,12 @@ a.list-itemtype-ticket(
span.ticket-type {{ ::vm.getDutyType() }}
span.ticket-status(ng-style="{'color': vm.duty.get('status_extra_info').get('color')}") {{ ::vm.duty.get('status_extra_info').get('name') }}
svg.icon.icon-blocked-project(ng-if="vm.duty.get('blockedProject')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
ng-if="vm.duty.get('blockedProject')",
svg-icon="icon-blocked-project",
svg-title-translate="PROJECT.BLOCKED_PROJECT.BLOCKED"
)
h2
span.ticket-id(tg-bo-ref="duty.get('ref')")

View File

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

View File

@ -1,6 +1,9 @@
a(href="", title="Projects", tg-nav="projects")
svg.icon.icon-project
use(xlink:href="#icon-project")
a(
href=""
title="Projects"
tg-nav="projects"
)
tg-svg(svg-icon="icon-project")
div.navbar-dropdown.dropdown-project-list
ul
@ -11,9 +14,11 @@ div.navbar-dropdown.dropdown-project-list
ng-class="{'blocked-project': project.get('blocked_code')}"
)
span {{::project.get("name")}}
svg.icon.icon-blocked-project(ng-if="project.get('blocked_code')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
svg-icon="icon-blocked-project"
ng-if="project.get('blocked_code')"
svg-title="PROJECT.BLOCKED_PROJECT.BLOCKED"
)
a.see-more-projects-btn.button-gray(
href="#",
@ -33,6 +38,5 @@ div.navbar-dropdown.dropdown-project-list
href=""
title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}"
)
svg.icon.icon-upload
use(xlink:href="#icon-upload")
tg-svg(svg-icon="icon-upload")
input.import-file.hidden(type="file")

View File

@ -30,21 +30,19 @@ nav.navbar(ng-if="vm.isEnabledHeader")
)
div.nav-right(ng-if="vm.isAuthenticated")
a(tg-nav="home",
ng-class="{active: vm.active}",
title="{{'PROJECT.NAVIGATION.DASHBOARD_TITLE' | translate}}")
svg.icon.icon-dashboard
use(xlink:href="#icon-dashboard")
a(
tg-nav="home"
ng-class="{active: vm.active}"
title="{{'PROJECT.NAVIGATION.DASHBOARD_TITLE' | translate}}"
)
tg-svg(svg-icon="icon-dashboard")
a(
href="#",
tg-nav="discover",
title="{{'PROJECT.NAVIGATION.DISCOVER_TITLE' | translate}}",
)
svg.icon.icon-discover
use(xlink:href="#icon-discover")
tg-svg(svg-icon="icon-discover")
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-user)

View File

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

View File

@ -18,12 +18,18 @@
tg-nav="project:project=vm.item.get('slug')"
title="{{ ::vm.item.get('name') }}"
) {{ ::vm.item.get('name') }}
svg.icon.icon-lock.private(ng-if="::vm.item.get('project_is_private')")
use(xlink:href="#icon-lock")
title {{'PROJECT.PRIVATE' | translate}}"
svg.icon.icon-blocked-project(ng-if="vm.item.get('project_blocked_code')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
ng-if="::vm.item.get('is_private')"
svg-icon="icon-lock"
svg-title-translate="PROJECT.PRIVATE"
)
tg-svg(
ng-if="vm.item.get('blocked_code')"
svg-icon="icon-blocked-project"
svg-title-translate="PROJECT.BLOCKED_PROJECT.BLOCKED"
)
p.list-itemtype-project-description {{ ::vm.item.get('description') }}
.list-itemtype-track
@ -31,14 +37,12 @@
ng-class="{'active': vm.item.get('is_fan')}"
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_fans\")||0}:'messageformat' }}"
)
svg.icon.icon-like
use(xlink:href="#icon-like")
tg-svg(svg-icon="icon-like")
span {{ ::vm.item.get('total_fans') }}
span.list-itemtype-track-watchers(
ng-class="{'active': vm.item.get('is_watcher')}"
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}"
)
svg.icon.icon-watch
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span {{ ::vm.item.get('total_watchers') }}

View File

@ -1,4 +1,4 @@
div.list-itemtype-ticket(ng-class="{'blocked-project': vm.item.get('project_blocked_code')}")
.list-itemtype-ticket(ng-class="{'blocked-project': vm.item.get('project_blocked_code')}")
a.list-itemtype-avatar(
href=""
ng-if="::vm.item.get('assigned_to')"
@ -20,7 +20,7 @@ div.list-itemtype-ticket(ng-class="{'blocked-project': vm.item.get('project_bloc
alt="{{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }}"
)
div.list-itemtype-ticket-data
.list-itemtype-ticket-data
p
span.ticket-project
| {{:: vm.item.get('project_name') }}
@ -36,11 +36,12 @@ div.list-itemtype-ticket(ng-class="{'blocked-project': vm.item.get('project_bloc
ng-if="::vm.item.get('type') === 'issue'"
translate="COMMON.ISSUE"
)
span.ticket-status(ng-style="::{'color': vm.item.get('status_color')}")
| {{:: vm.item.get('status') }}
svg.icon.icon-blocked-project(ng-if="vm.item.get('project_blocked_code')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
span.ticket-status(ng-style="::{'color': vm.item.get('status_color')}") {{:: vm.item.get('status') }}
tg-svg(
ng-if="vm.item.get('project_blocked_code')"
svg-icon="icon-blocked-project"
svgTitleTranslate: "PROJECT.BLOCKED_PROJECT.BLOCKED"
)
h2
span.ticket-id(tg-bo-ref="vm.item.get('ref')")
a.ticket-title(
@ -67,14 +68,12 @@ div.list-itemtype-ticket(ng-class="{'blocked-project': vm.item.get('project_bloc
ng-class="{'active': vm.item.get('is_voter')}",
title="{{ 'COMMON.VOTE_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_voters\")||0}:'messageformat' }}"
)
svg.icon.icon-upvote
use(xlink:href="#icon-upvote")
tg-svg(svg-icon="icon-upvote")
span {{ ::vm.item.get('total_voters') }}
span.list-itemtype-track-watchers(
ng-class="{'active': vm.item.get('is_watcher')}"
title="{{ 'COMMON.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.item.get(\"total_watchers\")||0}:'messageformat' }}"
)
svg.icon.icon-watch
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span {{ ::vm.item.get('total_watchers') }}

View File

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

View File

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

View File

@ -4,8 +4,7 @@ section.profile-projects
img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...")
.empty-tab(ng-if="vm.projects && !vm.projects.size")
svg.icon.icon-unwatch
use(xlink:href="#icon-unwatch")
tg-svg(svg-icon="icon-unwatch")
p(
translate="USER.PROFILE.PROJECTS_EMPTY"
@ -33,9 +32,12 @@ section.profile-projects
tg-nav="project:project=project.get('slug')"
title="{{ ::project.get('name') }}"
) {{::project.get('name')}}
svg.icon.icon-blocked-project(ng-if="project.get('blocked_code')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
ng-if="project.get('blocked_code')",
svg-icon="icon-blocked-project"
svg-title-translate="PROJECT.BLOCKED_PROJECT.BLOCKED"
)
p.project-description {{ ::project.get('description') | limitTo:300 }}
.list-itemtype-project-right
@ -45,16 +47,14 @@ section.profile-projects
ng-class="{'active': project.get('is_fan')}"
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_fans\")||0}:'messageformat' }}"
)
svg.icon.icon-like
use(xlink:href="#icon-like")
tg-svg(svg-icon="icon-like")
span {{ ::project.get('total_fans') }}
span.list-itemtype-track-watchers(
ng-class="{'active': project.get('is_watcher')}"
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:project.get(\"total_watchers\")||0}:'messageformat' }}"
)
svg.icon.icon-watch
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span {{ ::project.get('total_watchers') }}
.list-itemtype-project-members

View File

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

View File

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

View File

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

View File

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

View File

@ -13,8 +13,7 @@
href=""
title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}"
)
svg.icon.icon-upload
use(xlink:href="#icon-upload")
tg-svg(svg-icon="icon-upload")
input.import-file.hidden(type="file")
section.project-list-section
@ -44,23 +43,26 @@
tg-nav="project:project=project.get('slug')"
title="{{ ::project.get('name') }}"
) {{project.get('name')}}
svg.icon.icon-lock.private(ng-if="project.get('is_private')")
use(xlink:href="#icon-lock")
title {{'PROJECT.PRIVATE' | translate}}"
svg.icon.icon-badge(ng-if="project.get('i_am_owner')")
use(xlink:href="#icon-badge")
title(translate="COMMON.OWNER")
svg.icon.icon-blocked-project(ng-if="project.get('blocked_code')")
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
ng-if="project.get('is_private')",
svg-icon="icon-lock",
svg-title-translate="PROJECT.PRIVATE"
)
tg-svg(
ng-if="project.get('i_am_owner')",
svg-icon="icon-badge",
svg-title-translate="COMMON.OWNER"
)
tg-svg(
ng-if="project.get('blocked_code')",
svg-icon="icon-blocked-project",
svg-title-translate="PROJECT.BLOCKED_PROJECT.BLOCKED"
)
p.project-description {{ ::project.get('description') | limitTo:300 }}
span(ng-if="::project.get('description').length > 300") ...
svg.drag.icon.icon-drag
use(xlink:href="#icon-drag")
tg-svg.drag(svg-icon="icon-drag")
aside.help-area
p(translate="PROJECT.HELP")

View File

@ -87,11 +87,13 @@
}
.drag {
align-self: center;
opacity: 0;
svg {
fill: $gray-light;
height: 1.1rem;
margin-right: .5rem;
opacity: 0;
transition: opacity .2s;
width: 1.1rem;
}
}
}

View File

@ -6,9 +6,10 @@
tg-project-logo-small-src="vm.project"
alt="{{::vm.project.get('name')}}"
)
svg.icon.icon-blocked-project
use(xlink:href="#icon-blocked-project")
title(translate="PROJECT.BLOCKED_PROJECT.BLOCKED")
tg-svg(
svg-icon="icon-blocked-project"
svgTitleTranslate: "PROJECT.BLOCKED_PROJECT.BLOCKED"
)
span.project-title {{::vm.project.get("name")}}
.blocked-project-message
h1.project-block-title {{'PROJECT.BLOCKED_PROJECT.BLOCKED' | translate}}

View File

@ -16,10 +16,11 @@ div.wrapper
.intro-title
h1
span.project-name {{::vm.project.get("name")}}
svg.icon.icon-lock.private(ng-if="::vm.project.get('is_private')")
use(xlink:href="#icon-lock")
title {{'PROJECT.PRIVATE' | translate}}"
tg-svg(
ng-if="::vm.project.get('is_private')"
svg-icon="icon-lock"
svgTitleTranslate: "PROJECT.PRIVATE"
)
div.track-buttons-container(ng-if="vm.user")
tg-like-project-button(project="vm.project")
@ -30,15 +31,13 @@ div.wrapper
span.list-itemtype-track-likers(
title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_fans\")||0}:'messageformat' }}"
)
svg.icon.icon-like
use(xlink:href="#icon-like")
tg-svg(svg-icon="icon-like")
span {{ ::vm.project.get('total_fans') }}
span.list-itemtype-track-watchers(
title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}"
)
svg.icon.icon-watche
use(xlink:href="#icon-watch")
tg-svg(svg-icon="icon-watch")
span {{ ::vm.project.get('total_watchers') }}
p.description {{vm.project.get('description')}}
@ -70,6 +69,8 @@ div.wrapper
title="{{::member.get('full_name')}}"
)
img(ng-src="{{::member.get('photo')}}", alt="{{::member.get('full_name')}}")
svg.icon.icon-badge(ng-if="member.get('id') == vm.project.getIn(['owner', 'id'])")
use(xlink:href="#icon-badge")
title(translate="COMMON.OWNER")
tg-svg(
ng-if="member.get('id') == vm.project.getIn(['owner', 'id'])"
svg-icon="icon-badge"
svgTitleTranslate: "COMMON.OWNER"
)

View File

@ -9,12 +9,10 @@
h3.transfer-project-title {{::vm.project.get("name")}}
.transfer-project-statistics
span.transfer-project-private(ng-if="vm.project.get('is_private')")
svg.icon.icon-lock
use(xlink:href="#icon-lock")
tg-svg(svg-icon="icon-lock")
span(translate="ADMIN.PROJECT_TRANSFER.PRIVATE")
span.transfer-project-members
svg.icon.icon-team
use(xlink:href="#icon-team")
tg-svg(svg-icon="icon-team")
span {{::vm.project.get("total_memberships")}}
p(
@ -44,8 +42,10 @@
label.transfer-project-comment-label(
translate="ADMIN.PROJECT_TRANSFER.ADD_COMMENT"
)
svg.icon.icon-close(ng-click="vm.hideComment()")
use(xlink:href="#icon-close")
tg-svg(
svg-icon="icon-close"
ng-click="vm.hideComment()"
)
textarea.transfer-project-comment(
name="reason"
ng-model="vm.reason"
@ -66,4 +66,4 @@
translate="ADMIN.PROJECT_TRANSFER.ACCEPT"
)
div(ng-if="!vm.canBeOwnedByUser.valid", tg-cant-own-project-explanation)
tg-cant-own-project-explanation(ng-if="!vm.canBeOwnedByUser.valid")

View File

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

View File

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

View File

@ -19,8 +19,7 @@ div.wrapper(
form.module-container
.module.module-scrum(ng-class="{true:'active', false:''}[project.is_backlog_activated]")
.module-icon
svg.icon.icon-scrum
use(xlink:href="#icon-scrum")
tg-svg(svg-icon="icon-scrum")
.module-name(translate="ADMIN.MODULES.BACKLOG")
.module-desc
p(translate="ADMIN.MODULES.BACKLOG_DESCRIPTION")
@ -48,8 +47,9 @@ div.wrapper(
ng-model="project.total_story_points"
data-type="digits"
)
svg.icon.icon-save(ng-if="project.is_backlog_activated")
use(xlink:href="#icon-save")
.options
a.save(href="", ng-if="project.is_backlog_activated")
tg-svg(svg-icon="icon-save")
.module-activation.module-direct-active
div.check
input.activate-input(
@ -65,8 +65,7 @@ div.wrapper(
.module.module-kanban(ng-class="{true:'active', false:''}[project.is_kanban_activated]")
.module-icon
svg.icon.icon-kanban
use(xlink:href="#icon-kanban")
tg-svg(svg-icon="icon-kanban")
.module-name(translate="ADMIN.MODULES.KANBAN")
.module-desc(translate="ADMIN.MODULES.KANBAN_DESCRIPTION")
.module-activation.module-direct-active
@ -84,8 +83,7 @@ div.wrapper(
.module.module-issues(ng-class="{true:'active', false:''}[project.is_issues_activated]")
.module-icon
svg.icon.icon-issues
use(xlink:href="#icon-issues")
tg-svg(svg-icon="icon-issues")
.module-name(translate="ADMIN.MODULES.ISSUES")
.module-desc(translate="ADMIN.MODULES.ISSUES_DESCRIPTION")
.module-activation.module-direct-active
@ -103,8 +101,7 @@ div.wrapper(
.module.module-wiki(ng-class="{true:'active', false:''}[project.is_wiki_activated]")
.module-icon
svg.icon.icon-wiki
use(xlink:href="#icon-wiki")
tg-svg(svg-icon="icon-wiki")
.module-name(translate="ADMIN.MODULES.WIKI")
.module-desc(translate="ADMIN.MODULES.WIKI_DESCRIPTION")
.module-activation.module-direct-active
@ -122,8 +119,7 @@ div.wrapper(
.module.module-videoconference(ng-class="{true:'active', false:''}[isVideoconferenceActivated]")
.module-icon
svg.icon.icon-bubble-empty
use(xlink:href="#icon-bubble-empty")
tg-svg(svg-icon="icon-bubble-empty")
.module-name(translate="ADMIN.MODULES.MEETUP")
.module-desc
p(translate="ADMIN.MODULES.MEETUP_DESCRIPTION")
@ -157,8 +153,9 @@ div.wrapper(
data-type="url"
data-required="true"
)
svg.icon.icon-save(ng-if="project.videoconferences")
use(xlink:href="#icon-save")
fieldset.options
a.save(href="", ng-if="project.videoconferences")
tg-svg(svg-icon="icon-save")
.module-activation
div.check

View File

@ -83,7 +83,6 @@ div.wrapper(
owner="project.owner",
project-id="project.id"
)
fieldset(ng-if="project.owner.id == user.id")
tg-admin-project-change-owner.admin-project-profile-owner-actions(
members="project.members.length"
@ -95,9 +94,10 @@ div.wrapper(
fieldset.looking-for-people
.looking-for-people-selector
span {{ 'ADMIN.PROJECT_PROFILE.RECRUITING' | translate }}
svg.icon.icon-recruit
use(xlink:href="#icon-recruit")
title {{ 'ADMIN.PROJECT_PROFILE.RECRUITING_MESSAGE' | translate }}"
tg-svg(
svg-icon="icon-recruit",
svg-title-translate="ADMIN.PROJECT_PROFILE.RECRUITING_MESSAGE"
)
div.check
input(
type="checkbox",
@ -146,9 +146,10 @@ div.wrapper(
href="https://taiga.io/support/whats-the-difference-between-public-and-private-projects/"
target="_blank"
)
svg.icon.icon-question
use(xlink:href="#icon-question")
title {{ 'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }}
tg-svg(
svg-icon="icon-question",
svg-title-translate="ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC"
)
span {{'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC' | translate }}
button.button-green.submit-button(
type="submit"

View File

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

View File

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

View File

@ -24,8 +24,7 @@ div.wrapper.roles(tg-bitbucket-webhooks, ng-controller="BitbucketController as c
.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")
.option-wrapper.select-input-content
svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
tg-svg(svg-icon="icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
fieldset
@ -35,6 +34,5 @@ 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")
a.help-button(href="https://taiga.io/support/bitbucket-integration/", target="_blank")
svg.icon.icon-question
use(xlink:href="#icon-question")
tg-svg(svg-icon="icon-question")
span(translate="ADMIN.HELP")

View File

@ -23,13 +23,11 @@ div.wrapper.roles(tg-github-webhooks, ng-controller="GithubController as ctrl",
.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")
.option-wrapper.select-input-content
svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
tg-svg(svg-icon="icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
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")
svg.icon.icon-question
use(xlink:href="#icon-question")
tg-svg(svg-icon="icon-question")
span(translate="ADMIN.HELP")

View File

@ -23,8 +23,7 @@ div.wrapper.roles(tg-gitlab-webhooks, ng-controller="GitlabController as ctrl",
.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")
.option-wrapper.select-input-content
svg.icon.icon-clipboard
use(xlink:href="#icon-clipboard")
tg-svg(svg-icon="icon-clipboard")
.help-copy(translate="COMMON.COPY_TO_CLIPBOARD")
fieldset
@ -34,6 +33,5 @@ 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")
a.help-button(href="https://taiga.io/support/gitlab-integration/", target="_blank")
svg.icon.icon-question
use(xlink:href="#icon-question")
tg-svg(svg-icon="icon-question")
span(translate="ADMIN.HELP")

View File

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

View File

@ -1,9 +1,4 @@
a.close(
href=""
title="close"
)
svg.icon.icon-close
use(xlink:href="#icon-close")
tg-lightbox-close
.add-member-wrapper
h2.title(translate="LIGHTBOX.ADD_MEMBER.TITLE")
form.add-member-form(ng-submit="vm.submit()")
@ -37,15 +32,13 @@ a.close(
ng-click="vm.addSingleMember()"
ng-if="$last && vm.canAddUsers"
)
svg.icon.icon-add
use(xlink:href="#icon-add")
tg-svg(svg-icon="icon-add")
a.remove-fieldset.ng-animate-disabled(
href=""
ng-click="vm.removeSingleMember($index)"
ng-if="!$last || ($last && !vm.canAddUsers && vm.membersLimit > 1)"
)
svg.icon.icon-trash
use(xlink:href="#icon-trash")
tg-svg(svg-icon="icon-trash")
tg-lightbox-add-members-warning-message(ng-if="vm.showWarningMessage", project="vm.project")

View File

@ -3,9 +3,10 @@ figure.avatar
figcaption
span.name <%- full_name %>
<% if (isOwner) { %>
svg.icon.icon-badge
use(xlink:href="#icon-badge")
title(translate="COMMON.OWNER")
tg-svg(
svg-icon="icon-badge",
svg-title-translate="COMMON.OWNER"
)
<% } %>
div
span.pending <%- pending %>

View File

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

View File

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

View File

@ -1,7 +1,9 @@
<% _.each(filters, function(f) { %>
a.single-filter.selected(data-type!="<%- f.type %>", data-id!="<%- f.id %>")
span.name(style!="<%- f.style %>")
| <%- f.name %>
svg.icon.icon-close.remove-filter
use(xlink:href="#icon-close")
.single-filter.selected(
data-type!="<%- f.type %>"
data-id!="<%- f.id %>"
)
span.name(style!="<%- f.style %>") <%- f.name %>
a.remove-filter(href="")
tg-svg(svg-icon="icon-close")
<% }) %>

View File

@ -1,12 +1,18 @@
.sprint-name
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}}")
tg-svg(svg-icon="icon-arrow-right")
a(
ng-if="::isVisible"
href="{{::taskboardUrl}}"
title="{{'BACKLOG.GO_TO_TASKBOARD' | translate}}"
)
span {{::name}}
svg.icon.icon-edit.edit-sprint(ng-if="::isEditable", href="", title="{{'BACKLOG.EDIT_SPRINT' | translate}}")
use(xlink:href="#icon-edit")
a.edit-sprint(
ng-if="::isEditable"
href=""
title="{{'BACKLOG.EDIT_SPRINT' | translate}}"
)
tg-svg(svg-icon="icon-edit")
.sprint-summary
.sprint-date {{::estimatedDateRange}}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,6 +2,5 @@ mixin wysihelp
div.wysiwyg-help
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}}")
svg.icon.icon-question
use(xlink:href="#icon-question")
tg-svg(svg-icon="icon-question")
span(translate="COMMON.WYSIWYG.MARKDOWN_HELP")

View File

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

View File

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

View File

@ -15,14 +15,16 @@
span(translate="COMMENTS.DELETED_INFO",
translate-values!="{ user: '<%- deleteCommentUser %>', date: '<%- deleteCommentDate %>'}")
<% } %>
.comment.wysiwyg(ng-non-bindable)
.comment.wysiwyg
div(ng-non-bindable)
| <%= comment %>
<% if (!deleteCommentDate && mode !== "activity" && canDeleteComment) { %>
svg.icon.icon-trash.comment-delete(
a.comment-delete(
href="",
title!="<%- deleteCommentActionTitle %>",
data-activity-id!="<%- activityId %>"
title!="<%- deleteCommentActionTitle %>"
)
use(xlink:href="#icon-trash")
tg-svg(svg-icon="icon-trash")
<% } %>
<% } %>
@ -31,8 +33,7 @@
<% if (mode != "activity") { %>
a.changes-title(href="", title="{{'ACTIVITY.SHOW_ACTIVITY' | translate}}")
span <%- changesText %>
svg.icon.icon-arrow-right
use(xlink:href="#icon-arrow-right")
tg-svg(svg-icon="icon-arrow-right")
<% } %>
<% _.each(changes, function(change) { %>
| <%= change %>

View File

@ -4,22 +4,22 @@ section.history
<% if (commentsVisible || historyVisible) { %>
ul.history-tabs
<% if (commentsVisible) { %>
li(
class="active"
li
a(
href="",
class="active",
data-section-class="history-comments"
)
a(href="")
svg.icon.icon-writer
use(xlink:href="#icon-writer")
tg-svg(svg-icon="icon-writer")
span.tab-title(translate="COMMENTS.TITLE")
<% } %>
<% if (historyVisible) { %>
li(
li
a(
href="",
data-section-class="history-activity"
)
a(href="")
svg.icon.icon-timeline
use(xlink:href="#icon-timeline")
tg-svg(svg-icon="icon-timeline")
span.tab-title(translate="ACTIVITY.TITLE")
<% } %>
<% } %>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,4 @@
svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
use(xlink:href="#icon-close")
tg-lightbox-close
.form
h2.title(translate="LIGHTBOX.CHANGE_OWNER.TITLE")
@ -53,12 +52,12 @@ svg.close.icon.icon-close(href="", title="{{'COMMON.CLOSE' | translate}}")
)
fieldset(ng-if="vm.commentOpen")
svg.icon.icon-close(
ng-click="vm.commentOpen = false"
tg-svg(
svg-icon="icon-close",
ng-click="vm.commentOpen = false",
href="",
title="{{'COMMON.CLOSE' | translate}}"
)
use(xlink:href="#icon-close")
label(translate="LIGHTBOX.CHANGE_OWNER.ADD_COMMENT")
textarea(ng-model="vm.comment")

View File

@ -1,9 +1,4 @@
a.close(
href=""
title="{{'COMMON.CLOSE' | translate}}"
)
svg.icon.icon-close
use(xlink:href="#icon-close")
tg-lightbox-close
.content(ng-switch="key")
.private-space(ng-switch-when="private-space")

View File

@ -1,9 +1,7 @@
a.close(href="", title="{{'COMMON.CLOSE' | translate}}")
svg.icon.icon-close(title="{{'COMMON.CLOSE' | translate}}")
use(xlink:href="#icon-close")
tg-lightbox-close
div.content
svg.icon.icon-exclamation
use(xlink:href="#icon-exclamation")
tg-svg(svg-icon="icon-exclamation")
h2.title {{'LIGHTBOX.LEAVE_PROJECT_WARNING.TITLE' | translate}}

View File

@ -1,6 +1,4 @@
a.close(href="", title="{{'COMMON.CLOSE' | translate}}")
svg.icon.icon-close
use(xlink:href="#icon-close")
tg-lightbox-close
.content
h2.title(translate="ADMIN.PROJECT_PROFILE.REQUEST_OWNERSHIP_CONFIRMATION_TITLE")

View File

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

View File

@ -1,6 +1,6 @@
<% _.each(tags, function(tag) { %>
span(class="tag", style!="<%- tag.style %>")
span.tag-name <%- tag.name %>
svg.icon.icon-close.remove-tag(title="{{ 'COMMON.TAGS.DELETE' | translate }}")
use(xlink:href="#icon-close")
a.remove-tag(href="", title="{{'COMMON.TAGS.DELETE' | translate}}")
tg-svg(svg-icon="icon-close")
<% }); %>

View File

@ -4,5 +4,4 @@ input.tag-input(
placeholder="{{'COMMON.TAGS.PLACEHOLDER' | translate}}"
)
span.save.hidden(title="{{'COMMON.SAVE' | translate}}")
svg.icon.icon-save
use(xlink:href="#icon-save")
tg-svg(svg-icon="icon-save")

View File

@ -1,11 +1,9 @@
.tags-container
a(href="#", class="add-tag hidden", title="{{'COMMON.TAGS.ADD' | translate}}")
svg.icon.icon-add
use(xlink:href="#icon-add")
tg-svg(svg-icon="icon-add")
span.add-tag-text(translate="COMMON.TAGS.ADD")
span.add-tag-input
input(type="text", placeholder="{{'COMMON.TAGS.PLACEHOLDER' | translate}}", class="tag-input hidden")
span.save.hidden(title="{{'COMMON.SAVE' | translate}}")
svg.icon.icon-save
use(xlink:href="#icon-save")
tg-svg(svg-icon="icon-save")

View File

@ -2,7 +2,7 @@
span(class="tag", style!="border-left: 5px solid <%- tag.color %>;")
span.tag-name <%- tag.name %>
<% if (isEditable) { %>
svg.icon.icon-close.remove-tag(title="{{ 'COMMON.TAGS.DELETE' | translate }}")
use(xlink:href="#icon-close")
a.remove-tag(href="", title="{{'COMMON.TAGS.DELETE' | translate}}")
tg-svg(svg-icon="icon-close")
<% } %>
<% }); %>

View File

@ -1,6 +1,8 @@
.preview
.actions
svg.edit.icon.icon-edit(title="{{'COMMON.WYSIWYG.EDIT_BUTTON' | translate}}")
use(xlink:href="#icon-edit")
tg-svg.edit(
svg-icon="icon-edit",
svg-title-translate="COMMON.WYSIWYG.EDIT_BUTTON"
)
.content.wysiwyg
| <%= data %>

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