Style for like, vote and watch functionalities and refactor of tiket detail pages

stable
Xavier Julián 2015-10-23 17:00:01 +02:00 committed by David Barragán Merino
parent 9d218fc2cb
commit c4614644b4
53 changed files with 1125 additions and 602 deletions

View File

@ -611,7 +611,7 @@ init = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $na
projectService.setSection(next.section)
if next.params.pslug
projectService.setProject(next.params.pslug)
projectService.setProjectBySlug(next.params.pslug)
else
projectService.cleanProject()

View File

@ -402,9 +402,9 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
defaultMsg = $translate.instant("ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE", {email: member.email})
message = if member.user then member.full_name else defaultMsg
$confirm.askOnDelete(title, message).then (finish) ->
onSuccess = ->
finish()
$confirm.askOnDelete(title, message).then (askResponse) ->
onSuccess = =>
askResponse.finish()
if $scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy
$ctrl.selectFilter("page", $scope.page - 1)
@ -414,8 +414,8 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla
text = $translate.instant("ADMIN.MEMBERSHIP.SUCCESS_DELETE")
$confirm.notify("success", null, text)
onError = ->
finish(false)
onError = =>
askResponse.finish(false)
text = $translate.instant("ADMIN.MEMBERSHIP.ERROR_DELETE", {message: message})
$confirm.notify("error", null, text)

View File

@ -177,13 +177,13 @@ WebhookDirective = ($rs, $repo, $confirm, $loading, $translate) ->
title = $translate.instant("ADMIN.WEBHOOKS.DELETE")
message = $translate.instant("ADMIN.WEBHOOKS.WEBHOOK_NAME", {name: webhook.name})
$confirm.askOnDelete(title, message).then (finish) =>
$confirm.askOnDelete(title, message).then (askResponse) =>
onSucces = ->
finish()
askResponse.finish()
$scope.$emit("webhooks:reload")
onError = ->
finish(false)
askResponse.finish(false)
$confirm.notify("error")
$repo.remove(webhook).then(onSucces, onError)

View File

@ -96,15 +96,15 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading,
title = $translate.instant("LIGHTBOX.DELETE_SPRINT.TITLE")
message = $scope.sprint.name
$confirm.askOnDelete(title, message).then (finish) =>
$confirm.askOnDelete(title, message).then (askResponse) =>
onSuccess = ->
finish()
askResponse.finish()
$scope.milestonesCounter -= 1
lightboxService.close($el)
$rootscope.$broadcast("sprintform:remove:success", $scope.sprint)
onError = ->
finish(false)
askResponse.finish(false)
$confirm.notify("error")
$repo.remove($scope.sprint).then(onSuccess, onError)

View File

@ -546,15 +546,15 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
message = us.subject
@confirm.askOnDelete(title, message).then (finish) =>
@confirm.askOnDelete(title, message).then (askResponse) =>
# We modify the userstories in scope so the user doesn't see the removed US for a while
@scope.userstories = _.without(@scope.userstories, us)
promise = @.repo.remove(us)
promise.then =>
finish()
askResponse.finish()
@.loadBacklog()
promise.then null, =>
finish(false)
askResponse.finish(false)
@confirm.notify("error")
addNewUs: (type) ->

View File

@ -136,16 +136,16 @@ class AttachmentsController extends taiga.Controller
title = @translate.instant("ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT")
message = @translate.instant("ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT", {fileName: attachment.name})
return @confirm.askOnDelete(title, message).then (finish) =>
return @confirm.askOnDelete(title, message).then (askResponse) =>
onSuccess = =>
finish()
askResponse.finish()
index = @.attachments.indexOf(attachment)
@.attachments.splice(index, 1)
@.updateCounters()
@rootscope.$broadcast("attachment:delete")
onError = =>
finish(false)
askResponse.finish(false)
message = @translate.instant("ATTACHMENT.ERROR_DELETE_ATTACHMENT", {errorMessage: message})
@confirm.notify("error", null, message)
return @q.reject()

View File

@ -223,11 +223,7 @@ WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile,
html = $compile(template(ctx))($scope)
$el.html(html)
if isEditable() and watchers.length == 0
$el.find(".title").text("Add watchers")
$el.find(".watchers-header").addClass("no-watchers")
$el.on "click", ".icon-delete", (event) ->
$el.on "click", ".js-delete-watcher", (event) ->
event.preventDefault()
return if not isEditable()
target = angular.element(event.currentTarget)
@ -236,15 +232,15 @@ WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile,
title = $translate.instant("COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER")
message = $scope.usersById[watcherId].full_name_display
$confirm.askOnDelete(title, message).then (finish) =>
finish()
$confirm.askOnDelete(title, message).then (askResponse) =>
askResponse.finish()
watcherIds = _.clone($model.$modelValue.watchers, false)
watcherIds = _.pull(watcherIds, watcherId)
deleteWatcher(watcherIds)
$el.on "click", ".add-watcher", (event) ->
$el.on "click", ".js-add-watcher", (event) ->
event.preventDefault()
return if not isEditable()
$scope.$apply ->
@ -420,14 +416,14 @@ DeleteButtonDirective = ($log, $repo, $confirm, $location, $template) ->
title = $attrs.onDeleteTitle
subtitle = $model.$modelValue.subject
$confirm.askOnDelete(title, subtitle).then (finish) =>
$confirm.askOnDelete(title, subtitle).then (askResponse) =>
promise = $repo.remove($model.$modelValue)
promise.then =>
finish()
askResponse.finish()
url = $scope.$eval($attrs.onDeleteGoToUrl)
$location.path(url)
promise.then null, =>
finish(false)
askResponse.finish(false)
$confirm.notify("error")
$scope.$on "$destroy", ->

View File

@ -478,7 +478,7 @@ AssignedToLightboxDirective = (lightboxService, lightboxKeyboardNavigationServic
html = usersTemplate(ctx)
html = $compile(html)($scope)
$el.find("div.watchers").html(html)
$el.find(".assigned-to-list").html(html)
closeLightbox = () ->
lightboxKeyboardNavigationService.stop()
@ -499,7 +499,7 @@ AssignedToLightboxDirective = (lightboxService, lightboxKeyboardNavigationServic
render(selectedUser, searchingText)
$el.find('input').focus()
$el.on "click", ".watcher-single", (event) ->
$el.on "click", ".assigned-to-single", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
@ -573,7 +573,7 @@ WatchersLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationS
html = usersTemplate(ctx)
html = $compile(html)($scope)
$el.find("div.watchers").html(html)
$el.find(".ticket-watchers").html(html)
closeLightbox = () ->
lightboxKeyboardNavigationService.stop()
@ -597,7 +597,7 @@ WatchersLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationS
render(users)
$el.find("input").focus()
$el.on "click", ".watcher-single", debounce 2000, (event) ->
$el.on "click", ".user-list-single", debounce 2000, (event) ->
closeLightbox()
event.preventDefault()

View File

@ -21,19 +21,29 @@
module = angular.module("taigaCommon")
TgLoadingService = ->
TgLoadingService = ($compile) ->
spinner = "<img class='loading-spinner' src='/svg/spinner-circle.svg' alt='loading...' />"
return () ->
service = {
settings: {
target: null,
scope: null,
classes: []
timeout: 0
timeout: 0,
template: null
},
target: (target) ->
service.settings.target = target
return service
scope: (scope) ->
service.settings.scope = scope
return service
template: (template) ->
service.settings.template = template
return service
removeClasses: (classess...) ->
service.settings.classes = classess
@ -51,9 +61,11 @@ TgLoadingService = ->
# The loader is shown after that quantity of milliseconds
timeoutId = setTimeout (->
if not target.hasClass('loading')
service.settings.oldContent = target.html()
if !service.settings.template
service.settings.template = target.html()
target.addClass('loading')
target.html(spinner)
), service.settings.timeout
@ -71,25 +83,35 @@ TgLoadingService = ->
removeClasses = service.settings.classes
removeClasses.map (className) -> service.settings.target.addClass(className)
target.html(service.settings.oldContent)
target.html(service.settings.template)
target.removeClass('loading')
if service.settings.scope
$compile(target.contents())(service.settings.scope)
return service
}
return service
TgLoadingService.$inject = [
"$compile"
]
module.factory("$tgLoading", TgLoadingService)
LoadingDirective = ($loading) ->
link = ($scope, $el, attr) ->
currentLoading = null
template = $el.html()
$scope.$watch attr.tgLoading, (showLoading) =>
if showLoading
currentLoading = $loading()
.target($el)
.timeout(50)
.template(template)
.scope($scope)
.start()
else if currentLoading
currentLoading.finish()

View File

@ -620,18 +620,18 @@ IssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $templat
title = $translate.instant("ISSUES.FILTERS.CONFIRM_DELETE.TITLE")
message = $translate.instant("ISSUES.FILTERS.CONFIRM_DELETE.MESSAGE", {customFilterName: customFilterName})
$confirm.askOnDelete(title, message).then (finish) ->
$confirm.askOnDelete(title, message).then (askResponse) ->
promise = $ctrl.deleteMyFilter(customFilterName)
promise.then ->
promise = $ctrl.loadMyFilters()
promise.then (filters) ->
finish()
askResponse.finish()
$scope.filters.myFilters = filters
renderFilters($scope.filters.myFilters)
promise.then null, ->
finish()
askResponse.finish()
promise.then null, ->
finish(false)
askResponse.finish(false)
$confirm.notify("error")

View File

@ -85,14 +85,15 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem
task = $model.$modelValue
message = task.subject
$confirm.askOnDelete(title, message).then (finish) ->
$confirm.askOnDelete(title, message).then (askResponse) ->
promise = $repo.remove(task)
promise.then ->
finish()
askResponse.finish()
$confirm.notify("success")
$scope.$emit("related-tasks:delete")
promise.then null, ->
askResponse.finish(false)
$confirm.notify("error")
$scope.$watch $attrs.ngModel, (val) ->

View File

@ -126,15 +126,15 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin)
title = @translate.instant("WIKI.DELETE_LIGHTBOX_TITLE")
message = @scope.wikiTitle
@confirm.askOnDelete(title, message).then (finish) =>
@confirm.askOnDelete(title, message).then (askResponse) =>
onSuccess = =>
finish()
askResponse.finish()
ctx = {project: @scope.projectSlug}
@location.path(@navUrls.resolve("project-wiki", ctx))
@confirm.notify("success")
onError = =>
finish(false)
askResponse.finish(false)
@confirm.notify("error")
@repo.remove(@scope.wiki).then onSuccess, onError

View File

@ -83,17 +83,17 @@ WikiNavDirective = ($tgrepo, $log, $location, $confirm, $navUrls, $analytics, $l
title = $translate.instant("WIKI.DELETE_LIGHTBOX_TITLE")
message = $scope.wikiLinks[linkId].title
$confirm.askOnDelete(title, message).then (finish) =>
$confirm.askOnDelete(title, message).then (askResponse) =>
promise = $tgrepo.remove($scope.wikiLinks[linkId])
promise.then ->
promise = $ctrl.loadWikiLinks()
promise.then ->
finish()
askResponse.finish()
render($scope.wikiLinks)
promise.then null, ->
finish()
askResponse.finish()
promise.then null, ->
finish(false)
askResponse.finish(false)
$confirm.notify("error")
$el.on "keyup", ".new input", (event) ->

Binary file not shown.

View File

@ -30,34 +30,32 @@
<glyph unicode="&#117;" d="M366 174l0-19c0-2-1-4-3-6-2-2-4-3-6-3l-202 0c-2 0-4 1-6 3-2 2-3 4-3 6l0 19c0 2 1 5 3 6 2 2 4 3 6 3l202 0c2 0 4-1 6-3 2-1 3-4 3-6z m0 73l0-18c0-3-1-5-3-7-2-2-4-3-6-3l-202 0c-2 0-4 1-6 3-2 2-3 4-3 7l0 18c0 3 1 5 3 6 2 2 4 3 6 3l202 0c2 0 4-1 6-3 2-1 3-3 3-6z m-256-174l292 0 0 220-119 0c-7 0-14 2-19 8-5 5-8 11-8 19l0 119-146 0z m183 256l107 0c-2 6-4 10-6 12l-90 89c-2 3-6 5-11 7z m146-9l0-256c0-8-3-14-8-19-5-6-12-8-20-8l-310 0c-8 0-15 2-20 8-5 5-8 11-8 19l0 384c0 8 3 14 8 19 5 6 12 8 20 8l182 0c8 0 16-1 26-5 9-4 16-9 21-14l89-89c6-5 10-13 14-22 4-9 6-17 6-25z"/>
<glyph unicode="&#118;" d="M256 475c40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110 0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29z m37-356l0 54c0 3-1 5-3 7-2 2-4 3-6 3l-55 0c-3 0-5-1-7-3-2-2-3-4-3-7l0-54c0-2 1-5 3-6 2-2 4-3 7-3l55 0c2 0 4 1 6 2 2 2 3 4 3 7z m-1 98l5 178c0 2-1 4-3 5-2 2-4 2-7 2l-62 0c-3 0-5 0-7-2-2-1-3-3-3-5l5-178c0-1 1-3 3-5 1-1 4-2 6-2l53 0c3 0 5 1 7 2 2 2 3 4 3 5z"/>
<glyph unicode="&#119;" d="M512 174l0-55c0-3-1-5-3-7-2-1-4-2-6-2l-393 0 0-55c0-3-1-5-3-7-2-1-4-2-6-2-3 0-5 1-7 3l-91 91c-2 2-3 4-3 6 0 3 1 5 3 7l91 91c2 2 4 3 7 3 2 0 4-1 6-3 2-2 3-4 3-6l0-55 393 0c2 0 4-1 6-3 2-2 3-4 3-6z m0 155c0-3-1-5-3-6l-91-92c-2-2-4-2-7-2-2 0-4 0-6 2-2 2-3 4-3 7l0 55-393 0c-2 0-4 0-6 2-2 2-3 4-3 7l0 55c0 2 1 4 3 6 2 2 4 3 6 3l393 0 0 55c0 2 1 4 3 6 2 2 4 3 6 3 3 0 5-1 7-3l91-91c2-2 3-4 3-7z"/>
<glyph unicode="&#121;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/>
<glyph unicode="&#122;" d="M456 428c3-8 2-15-4-20l-141-141 0-212c0-8-4-14-11-17-3-1-5-1-7-1-6 0-10 1-13 5l-73 73c-4 4-6 8-6 13l0 139-141 141c-6 5-7 12-4 20 4 7 9 11 17 11l366 0c8 0 13-4 17-11z"/>
<glyph unicode="&#66;" d="M293 119l0 55c0 2-1 5-3 6-2 2-4 3-7 3l-54 0c-3 0-5-1-7-3-2-1-3-4-3-6l0-55c0-3 1-5 3-7 2-1 4-2 7-2l54 0c3 0 5 1 7 2 2 2 3 4 3 7z m73 192c0 17-6 32-16 46-11 15-24 26-40 34-16 7-32 11-48 11-47 0-82-20-106-61-3-4-2-8 2-12l38-28c1-1 3-2 5-2 3 0 6 1 7 4 10 13 19 21 25 26 6 4 15 7 24 7 10 0 18-3 25-8 7-5 11-10 11-17 0-7-2-13-6-17-4-4-10-9-20-13-12-5-23-13-33-25-10-11-15-23-15-35l0-11c0-2 1-5 3-6 2-2 4-3 7-3l54 0c3 0 5 1 7 3 2 1 3 4 3 6 0 4 2 9 6 14 4 6 9 11 15 15 6 3 11 6 14 8 4 2 8 5 13 10 6 4 10 9 13 13 3 5 6 11 8 18 3 7 4 14 4 23z m109-55c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#67;" d="M468 210c0-1 0-1 0-2-12-51-38-92-77-124-38-32-84-47-136-47-28 0-55 5-81 15-26 11-49 26-69 45l-37-37c-4-3-8-5-13-5-5 0-9 2-13 5-4 4-5 8-5 13l0 128c0 5 1 9 5 13 4 4 8 5 13 5l128 0c5 0 9-1 13-5 3-4 5-8 5-13 0-5-2-9-5-13l-39-39c13-12 28-22 46-29 17-7 35-10 53-10 26 0 49 6 71 18 23 13 40 30 54 51 2 4 7 15 15 34 1 4 4 6 8 6l55 0c3 0 5 0 7-2 1-2 2-4 2-7z m7 229l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-5 0-9 1-13 5-3 4-5 8-5 13 0 5 2 9 5 13l40 39c-28 26-62 39-100 39-26 0-49-6-71-18-23-13-40-30-54-51-2-4-7-15-15-34-1-4-4-6-8-6l-57 0c-3 0-5 0-7 2-1 2-2 4-2 7l0 2c12 51 38 92 77 124 39 32 85 47 137 47 28 0 55-5 81-15 26-11 50-26 70-45l37 37c4 3 8 5 13 5 5 0 9-2 13-5 4-4 5-8 5-13z"/>
<glyph unicode="&#68;" d="M107 6c-2-7-7-8-14-4-6 3-8 9-8 17 2 35 10 73 26 116-34 53-43 107-27 162 4-11 9-24 17-40 7-16 15-29 22-41 8-12 13-17 17-15 2 1 2 15 0 42-3 27-5 55-6 85-1 30 3 57 13 81 7 15 21 31 41 48 19 17 37 29 53 36-8-16-14-32-17-49-3-16-4-29-2-40 2-10 5-15 11-16 4 0 18 21 43 62 24 40 42 61 54 62 16 1 35-4 58-15 24-11 38-22 42-33 4-8 4-22 0-41-4-18-11-33-20-42-15-15-40-26-75-32-35-6-54-10-58-12-6-4-4-9 6-18 18-16 48-19 90-10-19-27-42-47-70-58-27-12-49-18-67-20-18-1-27-3-28-5-1-8 7-17 25-27 18-11 36-13 52-8-10-19-21-33-32-43-12-9-21-15-28-17-7-3-20-5-39-6-19-1-33-3-43-4 0 0-36-115-36-115"/>
<glyph unicode="&#69;" d="M435 486c8 0 14-2 19-7 4-5 7-11 7-18 0 0 0-435 0-435 0 0-103 0-103 0 0 0 0 435 0 435 0 17 7 25 21 25 0 0 56 0 56 0m-153-153c7 0 13-3 18-8 5-5 7-11 7-18 0 0 0-281 0-281 0 0-102 0-102 0 0 0 0 281 0 281 0 17 7 26 20 26 0 0 57 0 57 0m-154-154c8 0 14-2 18-7 5-6 8-12 8-18 0 0 0-128 0-128 0 0-103 0-103 0 0 0 0 128 0 128 0 17 7 25 21 25 0 0 56 0 56 0"/>
<glyph unicode="&#70;" d="M388 461c0 0 73-80 73-80 0 0 0-279 0-279 0-13-5-25-15-35-10-11-22-16-36-16 0 0-308 0-308 0-13 0-25 5-35 16-11 10-16 22-16 35 0 0 0 308 0 308 0 14 5 26 16 36 10 10 22 15 35 15 0 0 286 0 286 0m-30-154c0 0 0 128 0 128 0 0-204 0-204 0 0 0 0-128 0-128 0-7 2-13 7-18 5-5 11-7 18-7 0 0 154 0 154 0 7 0 13 2 18 7 5 5 7 11 7 18m-25 103c0 0 0-103 0-103 0 0-51 0-51 0 0 0 0 103 0 103 0 0 51 0 51 0"/>
<glyph unicode="&#72;" d="M256 484c-126 0-228-102-228-228 0-126 102-228 228-228 126 0 228 102 228 228 0 126-102 228-228 228z m0-399c-94 0-171 77-171 171 0 94 77 171 171 171 94 0 171-77 171-171 0-94-77-171-171-171z m-2 312c-23-2-40-23-37-46l12-118c2-13 12-24 26-26 16-1 30 10 31 26l13 118c0 3 0 6 0 8-2 23-22 40-45 38z m-21-220c-7-7-11-16-11-25 0-10 4-19 11-26 7-6 16-10 25-10 9 0 19 4 25 10 7 7 11 16 11 26 0 9-4 18-11 25-13 13-37 13-50 0z"/>
<glyph unicode="&#73;" d="M427 491l-363 0c-35 0-64-29-64-64l0-256c0-36 43-43 64-43l0-128 192 128 171 0c35 0 64 29 64 64l0 235c0 35-29 64-64 64z m21-299c0-12-10-21-21-21l-192 0-128-107 0 107-43 0c-12 0-21 9-21 21l0 235c0 11 9 21 21 21l363 0c11 0 21-10 21-21z"/>
<glyph unicode="&#75;" d="M128 384l64 0 0-64-64 0z m0-96l64 0 0-64-64 0z m0-96l64 0 0-64-64 0z m128 0l128 0 0-64-128 0z m224 320l-448 0c-18 0-32-14-32-32l0-448c0-18 14-32 32-32l448 0c18 0 32 14 32 32l0 448c0 18-14 32-32 32z m-32-448l-384 0 0 384 384 0z m-192 224l128 0 0-64-128 0z m0 96l128 0 0-64-128 0z"/>
<glyph unicode="&#77;" d="M385 129l-40 40-89-90-89 90-40-40 129-129z m-258 254l40-40 89 90 89-90 40 40-129 129z"/>
<glyph unicode="&#79;" d="M435 460l-107 0c-10 30-39 52-72 52-33 0-62-22-72-52l-107 0c-28 0-51-22-51-50l0-358c0-29 23-52 51-52l358 0c28 0 51 23 51 52l0 358c0 28-23 50-51 50z m-179 0c14 0 25-11 25-25 0-14-11-25-25-25-14 0-25 11-25 25 0 14 11 25 25 25z m-52-358l-102 102 37 37 65-66 169 168 37-35z"/>
<glyph unicode="&#80;" d="M0 512l0-512 512 0 0 512z m51-49l104 0 0-413-104 0z m158 0l98 0 0-415-98 0z m151-2l101 0 0-410-101 0z"/>
<glyph unicode="&#81;" d="M224 512c-123 0-223-104-223-232 0-128 100-231 223-231 52 0 100 18 137 49l99-98 51 52-101 101c23 37 37 80 37 127 0 128-100 232-223 232z m0-32c107 0 193-89 193-200 0-111-86-200-193-200-107 0-193 89-193 200 0 111 86 200 193 200z"/>
<glyph unicode="&#120;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/>
<glyph unicode="&#121;" d="M456 428c3-8 2-15-4-20l-141-141 0-212c0-8-4-14-11-17-3-1-5-1-7-1-6 0-10 1-13 5l-73 73c-4 4-6 8-6 13l0 139-141 141c-6 5-7 12-4 20 4 7 9 11 17 11l366 0c8 0 13-4 17-11z"/>
<glyph unicode="&#122;" d="M293 119l0 55c0 2-1 5-3 6-2 2-4 3-7 3l-54 0c-3 0-5-1-7-3-2-1-3-4-3-6l0-55c0-3 1-5 3-7 2-1 4-2 7-2l54 0c3 0 5 1 7 2 2 2 3 4 3 7z m73 192c0 17-6 32-16 46-11 15-24 26-40 34-16 7-32 11-48 11-47 0-82-20-106-61-3-4-2-8 2-12l38-28c1-1 3-2 5-2 3 0 6 1 7 4 10 13 19 21 25 26 6 4 15 7 24 7 10 0 18-3 25-8 7-5 11-10 11-17 0-7-2-13-6-17-4-4-10-9-20-13-12-5-23-13-33-25-10-11-15-23-15-35l0-11c0-2 1-5 3-6 2-2 4-3 7-3l54 0c3 0 5 1 7 3 2 1 3 4 3 6 0 4 2 9 6 14 4 6 9 11 15 15 6 3 11 6 14 8 4 2 8 5 13 10 6 4 10 9 13 13 3 5 6 11 8 18 3 7 4 14 4 23z m109-55c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#65;" d="M468 210c0-1 0-1 0-2-12-51-38-92-77-124-38-32-84-47-136-47-28 0-55 5-81 15-26 11-49 26-69 45l-37-37c-4-3-8-5-13-5-5 0-9 2-13 5-4 4-5 8-5 13l0 128c0 5 1 9 5 13 4 4 8 5 13 5l128 0c5 0 9-1 13-5 3-4 5-8 5-13 0-5-2-9-5-13l-39-39c13-12 28-22 46-29 17-7 35-10 53-10 26 0 49 6 71 18 23 13 40 30 54 51 2 4 7 15 15 34 1 4 4 6 8 6l55 0c3 0 5 0 7-2 1-2 2-4 2-7z m7 229l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-5 0-9 1-13 5-3 4-5 8-5 13 0 5 2 9 5 13l40 39c-28 26-62 39-100 39-26 0-49-6-71-18-23-13-40-30-54-51-2-4-7-15-15-34-1-4-4-6-8-6l-57 0c-3 0-5 0-7 2-1 2-2 4-2 7l0 2c12 51 38 92 77 124 39 32 85 47 137 47 28 0 55-5 81-15 26-11 50-26 70-45l37 37c4 3 8 5 13 5 5 0 9-2 13-5 4-4 5-8 5-13z"/>
<glyph unicode="&#66;" d="M107 6c-2-7-7-8-14-4-6 3-8 9-8 17 2 35 10 73 26 116-34 53-43 107-27 162 4-11 9-24 17-40 7-16 15-29 22-41 8-12 13-17 17-15 2 1 2 15 0 42-3 27-5 55-6 85-1 30 3 57 13 81 7 15 21 31 41 48 19 17 37 29 53 36-8-16-14-32-17-49-3-16-4-29-2-40 2-10 5-15 11-16 4 0 18 21 43 62 24 40 42 61 54 62 16 1 35-4 58-15 24-11 38-22 42-33 4-8 4-22 0-41-4-18-11-33-20-42-15-15-40-26-75-32-35-6-54-10-58-12-6-4-4-9 6-18 18-16 48-19 90-10-19-27-42-47-70-58-27-12-49-18-67-20-18-1-27-3-28-5-1-8 7-17 25-27 18-11 36-13 52-8-10-19-21-33-32-43-12-9-21-15-28-17-7-3-20-5-39-6-19-1-33-3-43-4 0 0-36-115-36-115"/>
<glyph unicode="&#67;" d="M435 486c8 0 14-2 19-7 4-5 7-11 7-18 0 0 0-435 0-435 0 0-103 0-103 0 0 0 0 435 0 435 0 17 7 25 21 25 0 0 56 0 56 0m-153-153c7 0 13-3 18-8 5-5 7-11 7-18 0 0 0-281 0-281 0 0-102 0-102 0 0 0 0 281 0 281 0 17 7 26 20 26 0 0 57 0 57 0m-154-154c8 0 14-2 18-7 5-6 8-12 8-18 0 0 0-128 0-128 0 0-103 0-103 0 0 0 0 128 0 128 0 17 7 25 21 25 0 0 56 0 56 0"/>
<glyph unicode="&#68;" d="M388 461c0 0 73-80 73-80 0 0 0-279 0-279 0-13-5-25-15-35-10-11-22-16-36-16 0 0-308 0-308 0-13 0-25 5-35 16-11 10-16 22-16 35 0 0 0 308 0 308 0 14 5 26 16 36 10 10 22 15 35 15 0 0 286 0 286 0m-30-154c0 0 0 128 0 128 0 0-204 0-204 0 0 0 0-128 0-128 0-7 2-13 7-18 5-5 11-7 18-7 0 0 154 0 154 0 7 0 13 2 18 7 5 5 7 11 7 18m-25 103c0 0 0-103 0-103 0 0-51 0-51 0 0 0 0 103 0 103 0 0 51 0 51 0"/>
<glyph unicode="&#69;" d="M256 484c-126 0-228-102-228-228 0-126 102-228 228-228 126 0 228 102 228 228 0 126-102 228-228 228z m0-399c-94 0-171 77-171 171 0 94 77 171 171 171 94 0 171-77 171-171 0-94-77-171-171-171z m-2 312c-23-2-40-23-37-46l12-118c2-13 12-24 26-26 16-1 30 10 31 26l13 118c0 3 0 6 0 8-2 23-22 40-45 38z m-21-220c-7-7-11-16-11-25 0-10 4-19 11-26 7-6 16-10 25-10 9 0 19 4 25 10 7 7 11 16 11 26 0 9-4 18-11 25-13 13-37 13-50 0z"/>
<glyph unicode="&#70;" d="M427 491l-363 0c-35 0-64-29-64-64l0-256c0-36 43-43 64-43l0-128 192 128 171 0c35 0 64 29 64 64l0 235c0 35-29 64-64 64z m21-299c0-12-10-21-21-21l-192 0-128-107 0 107-43 0c-12 0-21 9-21 21l0 235c0 11 9 21 21 21l363 0c11 0 21-10 21-21z"/>
<glyph unicode="&#71;" d="M128 384l64 0 0-64-64 0z m0-96l64 0 0-64-64 0z m0-96l64 0 0-64-64 0z m128 0l128 0 0-64-128 0z m224 320l-448 0c-18 0-32-14-32-32l0-448c0-18 14-32 32-32l448 0c18 0 32 14 32 32l0 448c0 18-14 32-32 32z m-32-448l-384 0 0 384 384 0z m-192 224l128 0 0-64-128 0z m0 96l128 0 0-64-128 0z"/>
<glyph unicode="&#72;" d="M385 129l-40 40-89-90-89 90-40-40 129-129z m-258 254l40-40 89 90 89-90 40 40-129 129z"/>
<glyph unicode="&#73;" d="M435 460l-107 0c-10 30-39 52-72 52-33 0-62-22-72-52l-107 0c-28 0-51-22-51-50l0-358c0-29 23-52 51-52l358 0c28 0 51 23 51 52l0 358c0 28-23 50-51 50z m-179 0c14 0 25-11 25-25 0-14-11-25-25-25-14 0-25 11-25 25 0 14 11 25 25 25z m-52-358l-102 102 37 37 65-66 169 168 37-35z"/>
<glyph unicode="&#74;" d="M0 512l0-512 512 0 0 512z m51-49l104 0 0-413-104 0z m158 0l98 0 0-415-98 0z m151-2l101 0 0-410-101 0z"/>
<glyph unicode="&#75;" d="M224 512c-123 0-223-104-223-232 0-128 100-231 223-231 52 0 100 18 137 49l99-98 51 52-101 101c23 37 37 80 37 127 0 128-100 232-223 232z m0-32c107 0 193-89 193-200 0-111-86-200-193-200-107 0-193 89-193 200 0 111 86 200 193 200z"/>
<glyph unicode="&#76;" d="M0 510l0-508 512 0 0 508z m52-51l409 0 0-408-409 0z m32-86l344 0 0-35-344 0z m0-68l344 0 0-35-344 0z m0-67l344 0 0-36-344 0z m0-68l344 0 0-35-344 0z"/>
<glyph unicode="&#84;" d="M0 455l0-398c0-32 25-57 57-57l398 0c32 0 57 25 57 57l0 398c0 32-25 57-57 57l-398 0c-32 0-57-25-57-57z m341-114c0-47-38-85-85-85-47 0-85 38-85 85 0 48 38 86 85 86 47 0 85-38 85-86z m-256-228c0 58 114 89 171 89 57 0 171-31 171-89l0-28-342 0z"/>
<glyph unicode="&#77;" d="M0 455l0-398c0-32 25-57 57-57l398 0c32 0 57 25 57 57l0 398c0 32-25 57-57 57l-398 0c-32 0-57-25-57-57z m341-114c0-47-38-85-85-85-47 0-85 38-85 85 0 48 38 86 85 86 47 0 85-38 85-86z m-256-228c0 58 114 89 171 89 57 0 171-31 171-89l0-28-342 0z"/>
<glyph unicode="&#78;" d="M112 49l44-45 100 100 100-100 44 45-144 144z m288 414l-44 45-100-100-100 100-44-45 144-144z"/>
<glyph unicode="&#85;" d="M328 511l-284 1c0 0-2-336-2-492l46 0 59 38 43-58 60 97 56-75 57 56c5-5 12-11 19-18 8-8 17-17 25-24 7-7 12-13 17-16l46 0 0 349z m50-386l-16 15-51-51-65 86-59-97-29 39-63-46 0 393 223 1 0-102c0-2 0-3 1-4 1-1 3-1 4-1l95 0 0-277c-21 19-40 44-40 44z"/>
<glyph unicode="&#82;" d="M0 512l0-512 512 0 0 512z m52-51l179 0 0-102-179 0z m230 0l179 0 0-410-179 0z m-230-154l179 0 0-106-179 0z m0-157l179 0 0-99-179 0z"/>
<glyph unicode="&#83;" d="M364 368c-17 6-32 20-36 38l-36 0c5-34 28-61 60-71 21-7 36-27 36-50l0-18-228 0 0-89-36 0 0 107c0 23 15 43 36 50 32 10 55 37 60 71l-36 0c-5-18-19-32-36-38-34-12-59-45-59-83l0-248c0-20 16-37 36-37l261 0 0 1c21 0 37 16 37 36l0 248c0 38-25 71-59 83z m-102-134c28 0 51-22 51-50 0-15-6-28-16-37-1-2-2-3-2-5l0-2c0-2-1-4-2-4-9-6-18-9-28-9l-5 0c-10 0-20 3-28 9-1 0-2 2-2 4l0 2c0 2-1 3-2 5-10 9-16 22-16 37 0 28 22 50 50 50z m64-136c-3 0-6 2-8 4l-31-11 25-10c2 3 6 6 9 6 6 0 11-5 11-11 0-3-2-6-4-7 1-2 1-3 1-5 0-6-5-12-11-12-7 0-12 6-12 12 0 0 0 1 0 1l-43 16-45-16c0 0 0-1 0-1 0-6-6-12-12-12-7 0-12 6-12 12 0 2 1 3 1 5-2 1-3 4-3 7 0 6 5 11 10 11 4 0 7-3 9-6l27 10-27 10c-2-2-4-4-7-4-6 0-10 4-10 10 0 4 3 7 6 8 0 5 4 9 8 9 5 0 8-4 9-8l45-16 51 17c0 5 4 8 8 8 5 0 8-4 8-8 4-2 6-5 6-9 0-5-4-10-9-10z m-154 328l168 0c3 0 5 2 5 5l0 48c0 2-2 4-5 4l-12 0 0 23c0 3-2 6-6 6l-132 0c-4 0-6-3-6-6l0-23-12 0c-3 0-5-2-5-4l0-48c0-3 2-5 5-5z m82-256c0-7-6-13-13-13-8 0-14 6-14 13 0 7 6 13 14 13 7 0 13-6 13-13z m43 0c0-7-6-13-13-13-7 0-13 6-13 13 0 7 6 13 13 13 7 0 13-6 13-13z"/>
<glyph unicode="&#86;" d="M255 435c-87-1-144-38-177-75-32-36-42-74-42-74-1-4-1-9 0-13 0 0 10-39 42-77 33-37 90-74 178-72 88 1 145 38 177 74 32 37 42 75 42 75 1 4 1 8 0 13 0 0-10 39-42 76-32 38-90 75-178 73z m1-52c74 1 113-27 137-55 20-23 26-41 29-48-3-7-9-25-28-47-25-27-65-56-139-57-74-1-113 27-137 55-20 22-26 41-28 48 2 7 8 25 28 47 24 27 64 56 138 57z m186-108c-12 0-22-8-25-19-3-11 1-23 11-30l43-27c8-6 18-7 27-3 8 4 14 13 14 23 1 10-4 19-13 23l-42 28c-5 3-10 5-15 5z m-374 0c-4-1-8-2-11-4l-44-26c-9-5-14-13-14-23 0-10 5-18 14-23 8-5 18-4 27 1l43 26c11 6 16 18 13 30-4 12-15 20-28 19z m295-76c-10 0-19-6-23-14-5-9-4-19 2-27l28-43c8-12 24-15 36-7 12 8 16 25 8 37l-29 42c-5 7-13 12-22 12z m-221 3c-8 0-16-5-21-12l-29-42c-5-8-6-18-2-26 4-9 12-15 22-15 9-1 18 4 24 12l28 42c6 8 6 18 2 27-5 9-14 14-24 14z m112-26c-7 0-13-3-18-8-5-5-7-12-7-19l1-51c0-14 12-26 27-25 14 0 25 12 25 26l-1 51c0 7-3 14-8 19-5 5-12 8-19 7z"/>
<glyph unicode="&#87;" d="M254 381c-88-1-144-38-177-74-32-37-42-75-42-75-1-4-1-9 0-13 0 0 10-39 42-76 33-38 90-75 178-73 88 1 145 38 177 74 32 37 42 75 42 75 1 4 1 9 0 13 0 0-9 39-42 76-32 38-90 75-178 73z m1-52c74 1 113-27 137-55 20-22 26-41 29-48-3-8-9-25-28-47-25-27-65-56-139-57-74-1-113 27-137 55-20 22-26 41-28 48 2 8 8 25 28 47 24 27 64 56 138 57z m0-10c-52 0-94-42-94-94 0-51 42-93 94-93 51 0 93 42 93 93 0 52-42 94-93 94z m0-42c28 0 51-23 51-52 0-28-23-51-51-51-29 0-52 23-52 51 0 29 23 52 52 52z m-231 33c-11 0-20-8-23-19-3-10 1-22 10-28l43-27c12-8 27-5 35 7 8 12 4 27-7 35l-43 27c-4 3-9 5-15 5z m461-2c-5 0-9-1-13-4l-44-26c-9-4-14-13-14-22 0-9 5-17 13-22 8-4 18-4 26 1l44 26c10 5 15 17 12 28-3 11-12 19-24 19z m-367 92c-9 0-18-5-22-13-4-8-4-18 2-26l28-42c8-12 23-15 35-7 11 8 15 23 7 35l-29 42c-4 7-12 11-21 11z m278-3c-8 0-16-4-20-11l-29-42c-5-8-6-17-2-26 3-8 12-13 21-14 9-1 17 4 22 11l29 43c6 7 6 17 2 26-5 8-13 13-23 13z m-143 35c-6-1-13-3-17-8-5-5-7-12-7-18l1-51c0-14 12-25 26-25 14 0 25 12 24 26l-1 51c0 6-3 13-7 18-5 4-12 7-19 7z"/>
<glyph unicode="&#88;" d="M456 343c0 1 0 1 0 1 0 5-2 10-5 13l0 1-40 69c-1 6-6 10-13 10 0 0 0 0-1 0l0 0-283 0 0 0c0 0 0 0 0 0-5 0-9-3-12-7l0 0-42-72 0 0c-3-4-4-9-4-14 0 0 0 0 0-1l0-247c0 0 0 0 0 0 0-12 9-21 20-21 1 0 1 0 1 0l358 0c0 0 0 0 0 0 12 0 21 9 21 21 0 0 0 0 0 0l0 247z m-131-125l-64-90c-1-1-3-2-5-2 0 0 0 0 0 0-2 0-4 1-5 2l-64 90c-1 2-1 4 0 6 1 2 3 3 5 3l30 0 0 81c0 3 3 6 6 6l56 0c3 0 6-3 6-6l0-81 30 0c2 0 4-1 5-3 1-2 1-4 0-6z m-231 147l27 47 270 0 27-47z"/>
<glyph unicode="&#89;" d="M256 352l130-130 41 40-171 171-171-171 41-40z m-171-273l342 0 0 57-342 0z"/>
<glyph unicode="&#90;" d="M171 128l170 0 0 171 114 0-199 199-199-199 114 0z m-114-57l398 0 0-57-398 0z"/>
<glyph unicode="&#65;" d="M201 165c0-8-1-16-3-24-3-8-7-15-13-22-6-6-12-9-20-9-8 0-15 3-21 9-6 7-10 14-12 22-3 8-4 16-4 24 0 7 1 15 4 23 2 8 6 15 12 22 6 6 13 9 21 9 8 0 14-3 20-9 6-7 10-14 13-22 2-8 3-16 3-23z m183 0c0-8-1-16-4-24-2-8-6-15-12-22-6-6-13-9-21-9-8 0-14 3-20 9-6 7-10 14-13 22-2 8-3 16-3 24 0 7 1 15 3 23 3 8 7 15 13 22 6 6 12 9 20 9 8 0 15-3 21-9 6-7 10-14 12-22 3-8 4-16 4-23z m46 0c0 22-7 42-20 58-13 16-31 24-53 24-8 0-27-2-56-6-14-2-29-3-45-3-16 0-31 1-45 3-29 4-47 6-56 6-22 0-40-8-53-24-13-16-20-36-20-58 0-17 3-32 9-44 7-13 14-23 24-30 9-7 21-13 34-17 14-4 28-7 40-8 13-2 27-2 43-2l48 0c16 0 30 0 43 2 12 1 26 4 40 8 13 4 25 10 34 17 10 7 17 17 24 30 6 12 9 27 9 44z m64 50c0-40-6-71-18-95-7-14-17-27-30-38-13-10-26-19-40-24-14-6-30-11-49-14-18-3-34-5-49-6-14-1-30-1-47-1-15 0-29 0-41 0-12 1-26 2-42 4-16 2-31 5-44 9-13 3-26 8-39 14-13 6-24 14-34 23-11 10-19 21-25 33-12 24-18 55-18 95 0 45 13 83 39 113-5 16-8 32-8 49 0 22 5 42 15 62 21 0 39-4 54-11 16-8 34-20 54-36 28 7 58 10 89 10 28 0 54-3 80-9 20 16 37 27 53 35 16 7 34 11 54 11 10-20 15-40 15-62 0-17-3-33-8-48 26-31 39-69 39-114z"/>
<glyph unicode="&#120;" d="M411 167l-182 0 0 0c0 0 0 0 0 0-6 0-11-6-11-12 0 0 0 0 0-1l0-53 0 0c0-6 5-11 11-11l0 0 182 0 0 0c6 0 11 5 11 11l0 53c0 1 0 1 0 1 0 6-5 12-11 12z m-256 0l-54 0c-6 0-11-6-11-12l0-54c0-6 5-11 11-11l54 0c6 0 12 5 12 11l0 54c0 6-6 12-12 12z m256 128l-182 0 0 0c0 0 0 0 0 0-6 0-11-6-11-12 0 0 0 0 0-1l0-53 0 0c0-6 5-11 11-11l0 0 182 0 0 0c6 0 11 5 11 11l0 53c0 1 0 1 0 1 0 6-5 12-11 12z m-256 0l-54 0c-6 0-11-6-11-12l0-54c0-6 5-11 11-11l54 0c6 0 12 5 12 11l0 54c0 6-6 12-12 12z m63 62l0 0c0-6 5-12 11-12l0 0 182 0 0 0c6 0 11 6 11 12l0 53c0 0 0 0 0 1 0 6-5 11-11 11l0 0-182 0 0 0c0 0 0 0 0 0-6 0-11-5-11-11 0-1 0-1 0-1l0-53z m-63 65l-54 0c-6 0-11-5-11-11l0-54c0-6 5-12 11-12l54 0c6 0 12 6 12 12l0 54c0 6-6 11-12 11z"/>
<glyph unicode="&#71;" d="M1 332l369 0 49-182 57 215-378 0 16 27 226 0 21 37 114 0c0 0 17 2 30-15 13-17 0-59 0-59l-72-272-368 0z"/>
<glyph unicode="&#74;" d="M494 327c0-4-3-9-8-14l-103-101 24-143c0-1 0-3 0-5 0-4-1-8-3-10-2-3-4-5-8-5-4 0-8 2-12 4l-128 67-128-67c-4-2-8-4-12-4-4 0-7 2-9 5-2 2-3 6-3 10 0 1 0 3 1 5l24 143-104 101c-4 6-7 10-7 14 0 7 6 12 16 13l144 21 64 130c4 8 8 12 14 12 6 0 10-4 14-12l64-130 144-21c10-1 16-6 16-13z"/>
<glyph unicode="&#48;" d="M343 225l88 85-121 18-54 109-54-109-121-18 88-85-21-120 108 57 108-57z m151 102c0-4-3-9-8-14l-103-101 24-143c0-1 0-3 0-5 0-10-3-15-11-15-4 0-8 2-12 4l-128 67-128-67c-4-2-8-4-12-4-4 0-7 2-9 5-2 2-3 6-3 10 0 1 0 3 1 5l24 143-104 101c-4 6-7 10-7 14 0 7 6 12 16 13l144 21 64 130c4 8 8 12 14 12 6 0 10-4 14-12l64-130 144-21c10-1 16-6 16-13z"/>
<glyph unicode="&#79;" d="M328 511l-284 1c0 0-2-336-2-492l46 0 59 38 43-58 60 97 56-75 57 56c5-5 12-11 19-18 8-8 17-17 25-24 7-7 12-13 17-16l46 0 0 349z m50-386l-16 15-51-51-65 86-59-97-29 39-63-46 0 393 223 1 0-102c0-2 0-3 1-4 1-1 3-1 4-1l95 0 0-277c-21 19-40 44-40 44z"/>
<glyph unicode="&#81;" d="M364 368c-17 6-32 20-36 38l-36 0c5-34 28-61 60-71 21-7 36-27 36-50l0-18-228 0 0-89-36 0 0 107c0 23 15 43 36 50 32 10 55 37 60 71l-36 0c-5-18-19-32-36-38-34-12-59-45-59-83l0-248c0-20 16-37 36-37l261 0 0 1c21 0 37 16 37 36l0 248c0 38-25 71-59 83z m-102-134c28 0 51-22 51-50 0-15-6-28-16-37-1-2-2-3-2-5l0-2c0-2-1-4-2-4-9-6-18-9-28-9l-5 0c-10 0-20 3-28 9-1 0-2 2-2 4l0 2c0 2-1 3-2 5-10 9-16 22-16 37 0 28 22 50 50 50z m64-136c-3 0-6 2-8 4l-31-11 25-10c2 3 6 6 9 6 6 0 11-5 11-11 0-3-2-6-4-7 1-2 1-3 1-5 0-6-5-12-11-12-7 0-12 6-12 12 0 0 0 1 0 1l-43 16-45-16c0 0 0-1 0-1 0-6-6-12-12-12-7 0-12 6-12 12 0 2 1 3 1 5-2 1-3 4-3 7 0 6 5 11 10 11 4 0 7-3 9-6l27 10-27 10c-2-2-4-4-7-4-6 0-10 4-10 10 0 4 3 7 6 8 0 5 4 9 8 9 5 0 8-4 9-8l45-16 51 17c0 5 4 8 8 8 5 0 8-4 8-8 4-2 6-5 6-9 0-5-4-10-9-10z m-154 328l168 0c3 0 5 2 5 5l0 48c0 2-2 4-5 4l-12 0 0 23c0 3-2 6-6 6l-132 0c-4 0-6-3-6-6l0-23-12 0c-3 0-5-2-5-4l0-48c0-3 2-5 5-5z m82-256c0-7-6-13-13-13-8 0-14 6-14 13 0 7 6 13 14 13 7 0 13-6 13-13z m43 0c0-7-6-13-13-13-7 0-13 6-13 13 0 7 6 13 13 13 7 0 13-6 13-13z"/>
<glyph unicode="&#84;" d="M456 343c0 1 0 1 0 1 0 5-2 10-5 13l0 1-40 69c-1 6-6 10-13 10 0 0 0 0-1 0l0 0-283 0 0 0c0 0 0 0 0 0-5 0-9-3-12-7l0 0-42-72 0 0c-3-4-4-9-4-14 0 0 0 0 0-1l0-247c0 0 0 0 0 0 0-12 9-21 20-21 1 0 1 0 1 0l358 0c0 0 0 0 0 0 12 0 21 9 21 21 0 0 0 0 0 0l0 247z m-131-125l-64-90c-1-1-3-2-5-2 0 0 0 0 0 0-2 0-4 1-5 2l-64 90c-1 2-1 4 0 6 1 2 3 3 5 3l30 0 0 81c0 3 3 6 6 6l56 0c3 0 6-3 6-6l0-81 30 0c2 0 4-1 5-3 1-2 1-4 0-6z m-231 147l27 47 270 0 27-47z"/>
<glyph unicode="&#85;" d="M256 352l130-130 41 40-171 171-171-171 41-40z m-171-273l342 0 0 57-342 0z"/>
<glyph unicode="&#86;" d="M171 128l170 0 0 171 114 0-199 199-199-199 114 0z m-114-57l398 0 0-57-398 0z"/>
<glyph unicode="&#87;" d="M201 165c0-8-1-16-3-24-3-8-7-15-13-22-6-6-12-9-20-9-8 0-15 3-21 9-6 7-10 14-12 22-3 8-4 16-4 24 0 7 1 15 4 23 2 8 6 15 12 22 6 6 13 9 21 9 8 0 14-3 20-9 6-7 10-14 13-22 2-8 3-16 3-23z m183 0c0-8-1-16-4-24-2-8-6-15-12-22-6-6-13-9-21-9-8 0-14 3-20 9-6 7-10 14-13 22-2 8-3 16-3 24 0 7 1 15 3 23 3 8 7 15 13 22 6 6 12 9 20 9 8 0 15-3 21-9 6-7 10-14 12-22 3-8 4-16 4-23z m46 0c0 22-7 42-20 58-13 16-31 24-53 24-8 0-27-2-56-6-14-2-29-3-45-3-16 0-31 1-45 3-29 4-47 6-56 6-22 0-40-8-53-24-13-16-20-36-20-58 0-17 3-32 9-44 7-13 14-23 24-30 9-7 21-13 34-17 14-4 28-7 40-8 13-2 27-2 43-2l48 0c16 0 30 0 43 2 12 1 26 4 40 8 13 4 25 10 34 17 10 7 17 17 24 30 6 12 9 27 9 44z m64 50c0-40-6-71-18-95-7-14-17-27-30-38-13-10-26-19-40-24-14-6-30-11-49-14-18-3-34-5-49-6-14-1-30-1-47-1-15 0-29 0-41 0-12 1-26 2-42 4-16 2-31 5-44 9-13 3-26 8-39 14-13 6-24 14-34 23-11 10-19 21-25 33-12 24-18 55-18 95 0 45 13 83 39 113-5 16-8 32-8 49 0 22 5 42 15 62 21 0 39-4 54-11 16-8 34-20 54-36 28 7 58 10 89 10 28 0 54-3 80-9 20 16 37 27 53 35 16 7 34 11 54 11 10-20 15-40 15-62 0-17-3-33-8-48 26-31 39-69 39-114z"/>
<glyph unicode="&#88;" d="M411 167l-182 0 0 0c0 0 0 0 0 0-6 0-11-6-11-12 0 0 0 0 0-1l0-53 0 0c0-6 5-11 11-11l0 0 182 0 0 0c6 0 11 5 11 11l0 53c0 1 0 1 0 1 0 6-5 12-11 12z m-256 0l-54 0c-6 0-11-6-11-12l0-54c0-6 5-11 11-11l54 0c6 0 12 5 12 11l0 54c0 6-6 12-12 12z m256 128l-182 0 0 0c0 0 0 0 0 0-6 0-11-6-11-12 0 0 0 0 0-1l0-53 0 0c0-6 5-11 11-11l0 0 182 0 0 0c6 0 11 5 11 11l0 53c0 1 0 1 0 1 0 6-5 12-11 12z m-256 0l-54 0c-6 0-11-6-11-12l0-54c0-6 5-11 11-11l54 0c6 0 12 5 12 11l0 54c0 6-6 12-12 12z m63 62l0 0c0-6 5-12 11-12l0 0 182 0 0 0c6 0 11 6 11 12l0 53c0 0 0 0 0 1 0 6-5 11-11 11l0 0-182 0 0 0c0 0 0 0 0 0-6 0-11-5-11-11 0-1 0-1 0-1l0-53z m-63 65l-54 0c-6 0-11-5-11-11l0-54c0-6 5-12 11-12l54 0c6 0 12 6 12 12l0 54c0 6-6 11-12 11z"/>
<glyph unicode="&#80;" d="M0 512l0-512 512 0 0 512z m52-51l179 0 0-102-179 0z m230 0l179 0 0-410-179 0z m-230-154l179 0 0-106-179 0z m0-157l179 0 0-99-179 0z"/>
<glyph unicode="&#83;" d="M1 332l369 0 49-182 57 215-378 0 16 27 226 0 21 37 114 0c0 0 17 2 30-15 13-17 0-59 0-59l-72-272-368 0z"/>
<glyph unicode="&#82;" d="M256 80c200 157 192 212 192 256 0 43-36 96-96 96-60 0-96-64-96-64 0 0-36 64-96 64-60 0-96-53-96-96 0-44-7-99 192-256z"/>
<glyph unicode="&#89;" d="M256 399c31 0 62-4 91-12 29-9 53-20 72-32 19-13 36-26 51-40 14-13 25-25 32-36 7-11 10-18 10-23 0-5-3-12-10-23-7-10-18-22-32-36-15-14-32-27-51-40-19-12-43-23-72-32-29-8-60-12-91-12-31 0-62 4-91 12-29 9-53 20-72 32-19 13-36 26-51 40-14 14-25 26-32 36-7 11-10 18-10 23 0 5 3 12 10 23 7 11 18 23 32 36 15 14 32 27 51 40 19 12 43 23 72 32 29 8 60 12 91 12m0-253c31 0 58 11 80 33 23 21 34 47 34 77 0 31-11 57-34 78-22 22-49 33-80 33-31 0-58-11-80-33-23-21-34-47-34-78 0-30 11-56 34-77 22-22 49-33 80-33m0 110c3-3 9-3 19-1 10 2 18 4 26 6 7 1 11 0 12-5 0-15-5-28-17-38-11-11-24-16-40-16-16 0-29 5-40 16-11 10-16 23-16 38 0 16 5 29 16 39 11 11 24 16 40 16 5 0 6-4 5-11-1-8-3-16-6-25-3-8-2-14 1-19"/>
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,18 +1,23 @@
a(href="{{ ::vm.duty.get('url') }}", title="{{ ::duty.get('subject') }}")
a.list-itemtype-ticket(
href="{{ ::vm.duty.get('url') }}"
title="{{ ::duty.get('subject') }}"
)
div.list-itemtype-avatar(ng-if="::vm.duty.get('assigned_to_extra_info')")
img(
ng-src="{{ ::vm.duty.get('assigned_to_extra_info').get('photo') }}"
title="{{ ::vm.duty.get('assigned_to_extra_info').get('full_name_display') }}"
)
div.list-itemtype-avatar(ng-if="::!vm.duty.get('assigned_to_extra_info')")
img(
src="/images/unnamed.png"
title="{{'ACTIVITY.VALUES.UNASSIGNED' | translate}}"
)
div.list-itemtype-ticket-data
p
span.ticket-project {{ ::vm.duty.get('projectName')}}
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') }}
img.avatar(ng-if="::vm.duty.get('assigned_to_extra_info')"
ng-src="{{ ::vm.duty.get('assigned_to_extra_info').get('photo') }}"
title="{{ ::vm.duty.get('assigned_to_extra_info').get('full_name_display') }}")
img.avatar(ng-if="::!vm.duty.get('assigned_to_extra_info')"
src="/images/unnamed.png"
title="{{'ACTIVITY.VALUES.UNASSIGNED' | translate}}")
div.duty-data
div
span.duty-type {{ ::vm.getDutyType() }}
span.duty-status(ng-style="{'color': vm.duty.get('status_extra_info').get('color')}") {{ ::vm.duty.get('status_extra_info').get('name') }}
span.duty-title
span.duty-id(tg-bo-ref="duty.get('ref')")
span.duty-name {{ ::duty.get('subject') }}
div.duty-project {{ ::vm.duty.get('projectName')}}
h2
span.ticket-id(tg-bo-ref="duty.get('ref')")
span.ticket-title {{ ::duty.get('subject') }}

View File

@ -4,55 +4,25 @@
.duty-single {
border-bottom: 1px solid $whitish;
cursor: pointer;
padding: .5rem;
transition: background .2s;
transition-delay: .2s;
&:hover {
background: rgba($primary-light, .1);
}
&:last-child {
border: 0;
}
&.blocked {
background: rgba($red-light, .2);
.duty-type,
.duty-status {
color: $red;
}
color: $red;
}
>a {
align-items: center;
border-bottom: 0;
display: flex;
flex-direction: row;
}
}
.avatar {
flex-basis: 47px;
height: 47px;
margin-right: .5rem;
width: 47px;
}
.duty-data {
flex: 1;
margin-right: .5rem;
}
.duty-type,
.duty-status {
@extend %small;
color: $gray;
margin-right: .3rem;
}
.duty-title {
display: block;
margin-top: .25rem;
}
.duty-id {
color: $gray-light;
margin-right: .3rem;
}
.duty-project {
@extend %small;
align-self: flex-start;
color: $gray-light;
margin-left: auto;
text-align: right;
width: 120px;
}
.see-more {
display: block;
margin: 2rem 30%;

View File

@ -106,7 +106,7 @@ $dropdown-width: 350px;
min-width: $dropdown-width;
position: absolute;
top: 2.4rem;
z-index: 99;
z-index: 999;
}
}

View File

@ -1,7 +1,7 @@
.profile-timeline {
.activity-item {
border-bottom: 1px solid $whitish;
padding: 1rem .5rem;
padding: 1rem .5rem 1rem 0;
position: relative;
p {
margin-bottom: 0;

View File

@ -9,14 +9,14 @@
a(href="" title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}",
class!="user-assigned <% if(isEditable){ %>editable<% }; %>")
span.assigned-name
<% if (assignedTo) { %>
<%- assignedTo.full_name_display %>
<% } else { %>
| {{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }}
<% } %>
<% if(isEditable){ %>
span.icon.icon-arrow-bottom
<% }; %>
<% if (assignedTo) { %>
<%- assignedTo.full_name_display %>
<% } else { %>
| {{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }}
<% } %>
<% if(isEditable){ %>
span.icon.icon-arrow-bottom
<% }; %>
<% if (assignedTo!==null && isEditable) { %>
a.icon.icon-delete(href="" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}")
<% } %>

View File

@ -1,2 +1,2 @@
a(href="", class="button button-red")
a.button-red.button-delete(href="")
span(translate="COMMON.DELETE")

View File

@ -3,5 +3,5 @@ span(translate="COMMON.STATUS.CLOSED")
<% } else { %>
span(translate="COMMON.STATUS.OPEN")
<% } %>
span(class="us-detail-status", style!="color:<%- status.color %>")
span(style!="color:<%- status.color %>")
| <%- status.name %>

View File

@ -1,22 +1,29 @@
<% if(isEditable){ %>
.watchers-header
span.title(translate="COMMON.WATCHERS.TITLE")
a.icon.icon-plus.add-watcher(href="", title="{{'COMMON.WATCHERS.ADD' | translate}}")
<% } else if(watchers.length > 0){ %>
.watchers-header
span.title(translate="COMMON.WATCHERS.TITLE")
<% }; %>
<% _.each(watchers, function(watcher) { %>
<% if(watcher) { %>
.watcher-single
.watcher-avatar
img(src!="<%- watcher.photo %>" alt!="<%- watcher.full_name_display %>")
.watcher-name
.user-list-single
.user-list-avatar
img(
src!="<%- watcher.photo %>"
alt!="<%- watcher.full_name_display %>"
)
.user-list-name
span <%- watcher.full_name_display %>
<% if(isEditable){ %>
a.icon.icon-delete(data-watcher-id!="<%- watcher.id %>" href="" title="{{'COMMON.WATCHERS.DELETE' | translate}}")
a.icon.icon-delete.js-delete-watcher(
href=""
data-watcher-id!="<%- watcher.id %>"
title="{{'COMMON.WATCHERS.DELETE' | translate}}"
)
<% }; %>
<% } %>
<% }); %>
<% if(isEditable){ %>
a.add-watcher.js-add-watcher(
href=""
title="{{'COMMON.WATCHERS.TITLE_ADD' | translate}}"
)
span.icon.icon-plus
span(translate="COMMON.WATCHERS.ADD")
<% }; %>

View File

@ -1,9 +1,9 @@
ul.points-per-role
li.total
li.ticket-role-points.total
span.points <%- totalPoints %>
span.role(translate="US.TOTAL_POINTS")
<% _.each(roles, function(role) { %>
li(class!="total <% if(editable){ %>clickable<% } %>", data-role-id!="<%- role.id %>", title!="<%- role.name %>")
li.ticket-role-points(class!="total <% if(editable){ %>clickable<% } %>", data-role-id!="<%- role.id %>", title!="<%- role.name %>")
span.points <%- role.points %>
span.role <%- role.name %>
<% }); %>

View File

@ -1,23 +1,38 @@
<% if (selected) { %>
.watcher-single.active
.watcher-avatar
a(href="", title="{{'COMMON.ASSIGNED_TO' | translate}}", class="avatar")
.user-list-single.is-active
.user-list-avatar
a(
href=""
title="{{'COMMON.ASSIGNED_TO' | translate}}"
)
img(src!="<%- selected.photo %>")
a(href="", title!="<%- selected.full_name_display %>", class="watcher-name")
a.user-list-name(
href=""
title!="<%- selected.full_name_display %>"
)
| <%-selected.full_name_display %>
a(href="", title="{{'COMMON.ASSIGNED_TO.REMOVE_ASSIGNED' | translate}}", class="icon icon-delete remove-assigned-to")
a.icon-delete.remove-assigned-to(
href=""
title="{{'COMMON.ASSIGNED_TO.REMOVE_ASSIGNED' | translate}}"
)
<% } %>
<% _.each(users, function(user) { %>
.watcher-single(data-user-id!="<%- user.id %>")
.watcher-avatar
a(href="#", title="{{'COMMON.ASSIGNED_TO.TITLE' | translate}}", class="avatar")
.user-list-single(data-user-id!="<%- user.id %>")
.user-list-avatar
a(
href="#"
title="{{'COMMON.ASSIGNED_TO.TITLE' | translate}}"
)
img(src!="<%- user.photo %>")
a(href="", title!="<%- user.full_name_display %>", class="watcher-name")
a.user-list-name(
href=""
title!="<%- user.full_name_display %>"
)
| <%- user.full_name_display %>
<% }) %>
<% if (showMore) { %>
div(class="more-watchers")
.more-watchers
span(translate="COMMON.ASSIGNED_TO.TOO_MANY")
<% } %>

View File

@ -6,4 +6,4 @@ div.form
input(type="text", data-maxlength="500", placeholder="{{'LIGHTBOX.ASSIGNED_TO.SEARCH' | translate}}", ng-model="usersSearch")
//-This block is rendered by the directive
div.watchers
.assigned-to-list

View File

@ -4,5 +4,5 @@ div.form
h2.title(translate="COMMON.WATCHERS.ADD")
fieldset
input(type="text", data-maxlength="500", placeholder="{{'LIGHTBOX.ASSIGNED_TO.SEARCH' | translate}}", ng-model="usersSearch")
div.watchers
div.ticket-watchers
//- The content of this is rendered by directive

View File

@ -6,7 +6,7 @@ form
input(type="text", name="subject", ng-model="us.subject", placeholder="{{'COMMON.FIELDS.SUBJECT' | translate}}",
data-required="true", data-maxlength="500")
fieldset.estimation
fieldset.ticket-estimation
tg-lb-us-estimation(ng-model="us")
fieldset

View File

@ -1,7 +1,7 @@
.button,
%button {
@extend %medium;
@extend %title;
@extend %light;
@extend %small;
background: transparent;
border: 0;
color: $white;

View File

@ -1,30 +1,27 @@
.us-created-by {
.ticket-created-by {
display: flex;
margin-bottom: 1rem;
margin-top: .5rem;
position: relative;
.user-avatar {
flex-basis: 40px;
flex-basis: 3rem;
flex-grow: 0;
margin-right: .5rem;
img {
border-radius: 8%;
width: 100%;
}
}
.created-by {
flex-basis: 70px;
flex-grow: 3;
margin-left: .5rem;
.created-title,
.created-date {
@extend %light;
@extend %small;
color: $gray-light;
color: $gray;
display: block;
line-height: 1.5;
}
.created-user {
@extend %large;
.created-title {
color: $primary;
cursor: default;
&.editable {
cursor: pointer;
}

View File

@ -0,0 +1,66 @@
%estimation {
.points-per-role {
display: flex;
flex-wrap: wrap;
}
.ticket-role-points {
background: rgba($gray-light, .1);
border-radius: 2px;
color: rgba($grayer, .3);
flex-basis: 20%;
flex-grow: 1;
flex-shrink: 0;
margin: .1rem;
padding: .5rem 0 .1rem;
position: relative;
text-align: center;
transition: color .3s linear;
&.active {
background: rgba($primary-light, .9);
color: $whitish;
}
&:first-child {
background: rgba($grayer, .25);
border-radius: 0;
color: $whitish;
}
&:last-child {
border: 0;
}
.points {
@extend %larger;
@extend %text;
display: block;
text-align: center;
}
.role {
@extend %small;
@include ellipsis(90%);
display: inline-block;
text-align: center;
}
}
.popover {
@include popover(200px, $top: 105%, $left: 35%, $arrow-width: 10px, $arrow-top: -5px, $arrow-left: 10px, $arrow-height: 10px);
li {
display: inline-block;
width: 23%;
}
a {
display: block;
text-align: center;
&:hover,
&.active {
background: $primary-light;
color: $white;
}
}
&.fix {
@include popover(200px, $top: 105%, $left: -160px, $arrow-width: 10px, $arrow-top: -5px, $arrow-left: 90%, $arrow-height: 10px);
}
}
}
.ticket-estimation {
@extend %estimation;
}

View File

@ -0,0 +1,104 @@
// Like and Watch number component
// Common styles for all list items
@mixin list-itemtype-common {
@include list-itemtype-track;
border-bottom: 1px solid $whitish;
display: flex;
padding: .5rem;
padding-right: 0;
h2 {
@extend %normal;
@extend %text;
line-height: 1.4;
margin-bottom: 0;
text-transform: none;
}
p {
@extend %light;
margin-bottom: 0;
}
.list-itemtype-avatar {
flex-basis: 3rem;
flex-shrink: 0;
margin-right: .75rem;
min-width: 3rem;
img {
width: 100%;
}
}
}
.list-itemtype-project {
@include list-itemtype-common;
justify-content: space-between;
h2 {
@extend %large;
}
.list-itemtype-project-members {
align-self: flex-end;
display: flex;
flex-direction: row-reverse;
flex-grow: 0;
flex-wrap: wrap-reverse;
margin-top: 1rem;
img {
border-radius: .1rem;
margin-right: .3rem;
width: 2rem;
}
}
.list-itemtype-project-tags {
align-self: flex-end;
display: flex;
flex: 3;
flex-wrap: wrap;
margin-top: .5rem;
}
.tag {
align-self: flex-end;
margin-right: .5rem;
padding: .5rem;
}
}
.list-itemtype-ticket {
@include list-itemtype-common;
h2 {
@extend %medium;
}
.ticket-type,
.ticket-project {
margin-right: .3rem;
}
.ticket-project {
color: $gray-light;
}
.list-itemtype-ticket-data {
flex: 1;
margin-right: 1rem;
}
.ticket-id {
color: $gray-light;
margin-right: .3rem;
}
}
.list-itemtype-user {
@include list-itemtype-common;
h2 {
@extend %large;
}
.extra-info {
@extend %small;
@extend %light;
margin-top: .25rem;
}
}
.list-itemtype-timeline {
@include list-itemtype-common;
}

View File

@ -0,0 +1,176 @@
//////////////////////
//Watch like buttons
//////////////////////
.track-buttons-container {
@extend %small;
position: relative;
}
.track-button {
align-items: stretch;
display: inline-flex;
position: relative;
.track-inner {
align-items: stretch;
background: $whitish;
border-radius: 4px 0 0 4px;
display: inline-flex;
flex: 1;
margin-right: .1rem;
width: 140px;
&:hover {
background: darken($whitish, 5%);
transition: background .3s;
}
span {
align-self: center;
}
}
&:hover {
color: $blackish;
}
&.active {
.track-inner {
background: rgba($primary-light, .2);
}
.track-icon {
path {
fill: $primary;
}
}
}
&.watch-container {
margin-right: 1rem;
position: relative;
}
.track-icon {
padding: .3rem .6rem .3rem .75rem;
svg {
height: 1.1rem;
position: relative;
top: 2px;
width: 1.1rem;
}
path {
fill: $grayer;
}
}
.track-button-counter {
align-items: center;
border: 1px solid $whitish;
display: flex;
justify-content: center;
min-width: 2rem;
}
}
.watch-button,
.like-button {
&.active {
&.is-hover {
.track-inner {
background: $red;
color: $whitish;
transition: background .3s;
}
path {
fill: $red-light;
}
}
}
}
.watch-options {
animation: dropdownFade .2s cubic-bezier(.09, 0, .99, .01) alternate;
background: rgba($black, .9);
border-radius: 4px;
margin: 0;
margin-top: 2.5rem;
min-width: 300px;
padding: 1rem;
position: absolute;
right: 0;
top: 0;
z-index: 99;
&.hidden {
animation: dropdownFade .2s cubic-bezier(.09, 0, .99, .01) reverse;
}
li {
margin: 0;
&:last-child a {
border: 0;
}
}
a {
@extend %light;
border-bottom: 1px solid rgba($gray-light, .3);
color: $white;
display: flex;
justify-content: space-between;
padding: .5rem 0;
&.active {
color: $primary-light;
}
}
.watch-check {
height: 1.25rem;
width: 1.25rem;
path {
fill: $primary-light;
}
}
}
.upvote-btn {
align-content: center;
align-items: stretch;
display: flex;
flex: 0;
flex-basis: 3rem;
justify-content: center;
margin-right: .3rem;
a {
background: $whitish;
color: $gray-light;
display: block;
padding: 1rem;
text-align: center;
&:hover {
background: darken($whitish, 5%);
color: $primary-dark;
transition: background .3s;
path {
fill: $primary-dark;
}
}
&.active {
background: rgba($primary-light, .2);
color: $primary;
transition: all .3s;
path {
fill: $primary;
}
}
&.is-hover {
background: $red;
color: $whitish;
svg {
transform: rotate(180deg);
transition: all .3s;
}
path {
fill: $red-light;
}
}
}
svg {
height: 1rem;
width: 1rem;
}
span {
display: block;
}
path {
fill: $gray-light;
}
}

View File

@ -0,0 +1,84 @@
%user-list {
.user-list-single {
align-content: center;
align-items: center;
background: transparent;
border-bottom: 1px solid $whitish;
display: flex;
padding: .5rem .5rem .3rem;
vertical-align: middle;
&:last-child {
border: 0;
}
}
.user-list-avatar {
flex-basis: 3rem;
margin-right: .25rem;
max-width: 3rem;
img {
width: 100%;
}
}
.user-list-name {
@extend %light;
color: $grayer;
margin-left: .5rem;
}
}
.assigned-to-list {
@extend %user-list;
margin-top: 1rem;
.user-list-single {
&:hover {
background: lighten($primary, 58%);
cursor: pointer;
transition: background .3s linear;
transition-delay: .2s;
}
&.is-active {
background: lighten($primary, 55%);
cursor: pointer;
margin-bottom: 1rem;
position: relative;
transition: background .3s linear;
transition-delay: .1s;
.icon-delete {
opacity: 1;
position: absolute;
right: 1rem;
top: 1.3rem;
transition: opacity .2s ease-in;
}
}
}
}
.ticket-watchers {
@extend %user-list;
margin-top: 1rem;
.user-list-single {
&:hover {
.icon-delete {
opacity: 1;
transition: opacity .2s ease-in;
}
}
}
.user-list-name {
flex: 1;
position: relative;
}
.icon-delete {
opacity: 0;
position: absolute;
right: .5rem;
top: 0;
transition: all .2s ease-in;
&:hover {
color: $red;
transition: color .3s ease-in;
}
}
}

View File

@ -1,66 +0,0 @@
.watchers {
margin-top: 1rem;
.watchers-header {
border-bottom: 2px solid $gray-light;
padding: .5rem;
position: relative;
.title {
@extend %large;
@extend %title;
text-transform: uppercase;
}
.icon {
@extend %large;
position: absolute;
right: 1rem;
}
&.no-watchers {
border-bottom: 0;
}
}
.watcher-single {
align-content: center;
align-items: center;
background: transparent;
border-bottom: 1px solid $gray-light;
display: flex;
justify-content: center;
padding: .5rem 0 .3rem;
vertical-align: middle;
&:last-child {
border: 0;
}
&:hover {
.icon-delete {
opacity: 1;
transition: opacity .2s ease-in;
}
}
}
.watcher-avatar {
flex-basis: 3rem;
max-width: 3rem;
padding-left: .3rem;
img {
width: 100%;
}
}
.watcher-name {
@extend %small;
color: $grayer;
flex-grow: 8;
margin-left: 1rem;
position: relative;
}
.icon-delete {
opacity: 0;
position: absolute;
right: .5rem;
top: 0;
transition: all .2s ease-in;
&:hover {
color: $red;
transition: color .3s ease-in;
}
}
}

View File

@ -1,14 +1,14 @@
// Typography
// Font face
@each $font-face in OpenSans-CondLight, OpenSans-Light, opensans-regular, opensans-semibold, taiga {
@each $font-face in OpenSans-CondLight,
OpenSans-Light,
opensans-regular,
opensans-semibold,
taiga {
@font-face {
font-family: '#{$font-face}';
src: url('../fonts/#{$font-face}.eot?#iefix') format('embedded-opentype'),
url('../fonts/#{$font-face}.woff') format('woff'),
url('../fonts/#{$font-face}.ttf') format('truetype'),
url('../fonts/#{$font-face}.svg#{$font-face}') format('svg');
src: url("../fonts/#{$font-face}.eot?#iefix") format('embedded-opentype'), url("../fonts/#{$font-face}.woff") format('woff'), url("../fonts/#{$font-face}.ttf") format('truetype'), url("../fonts/#{$font-face}.svg#{$font-face}") format('svg');
}
}
@ -21,6 +21,7 @@ h6 {
color: $blackish;
font-weight: normal;
line-height: 1.5;
a {
font-weight: inherit;
}
@ -32,6 +33,7 @@ h1 {
line-height: 1.5;
margin-bottom: 1rem;
text-transform: uppercase;
span {
@extend %xxlarge;
margin-right: .5rem;
@ -39,22 +41,27 @@ h1 {
text-overflow: ellipsis;
vertical-align: bottom;
white-space: nowrap;
&.green,
&:last-child {
flex-shrink: 0;
}
}
.project-name {
display: inline-block;
max-width: 60%;
margin-bottom: 0;
}
.project-name-short {
display: inline-block;
max-width: 40%;
}
.green {
color: $primary;
}
.date {
@include ellipsis(500px);
color: $gray-light;
@ -71,12 +78,16 @@ h2 {
p {
line-height: 1.5;
margin: 0 0 20px;
img {
margin: 0;
}
}
em { font-style: italic; }
em {
font-style: italic;
}
strong {
font-weight: bold;
}
@ -93,14 +104,15 @@ hr {
a,
a:visited {
text-decoration: none;
&:hover {
transition: color .3s linear;
}
}
// Taiga Icons
[data-icon]:before {
// scss-lint:disable ImportantRule
content: attr(data-icon);
font-family: 'taiga' !important;
@ -116,6 +128,7 @@ a:visited {
[class^='icon-']:before,
[class*=' icon-']:before {
// scss-lint:disable ImportantRule
font-family: 'taiga' !important;
-moz-osx-font-smoothing: grayscale;
@ -131,160 +144,203 @@ a:visited {
.icon-bug:before {
content: 'a';
}
.icon-copy:before {
content: 'b';
}
.icon-minimize:before {
content: 'c';
}
.icon-maximize:before {
content: 'd';
}
.icon-comment:before {
content: 'e';
}
.icon-plus:before {
content: 'f';
}
.icon-attachments:before {
content: 'g';
}
.icon-edit:before {
content: 'h';
}
.icon-documents:before {
content: 'i';
}
.icon-delete:before {
content: 'j';
}
.icon-arrow-bottom:before {
content: 'k';
}
.icon-arrow-left:before {
content: 'l';
}
.icon-arrow-right:before {
content: 'm';
}
.icon-arrow-up:before {
content: 'n';
}
.icon-briefcase:before {
content: 'o';
}
.icon-caret-down:before {
content: 'p';
}
.icon-caret-up:before {
content: 'q';
}
.icon-check-square:before {
content: 'r';
}
.icon-notification-error:before {
content: 's';
}
.icon-settings:before {
content: 't';
}
.icon-document:before {
content: 'u';
}
.icon-warning:before {
content: 'v';
}
.icon-move:before {
content: 'w';
}
.icon-drag-v:before {
content: 'x';
}
.icon-filter:before {
content: 'y';
}
.icon-filter:before {
.icon-help:before {
content: 'z';
}
.icon-help:before {
.icon-reload:before {
content: 'A';
}
.icon-writer:before {
content: 'B';
}
.icon-reload:before {
.icon-stats:before {
content: 'C';
}
.icon-writer:before {
.icon-floppy:before {
content: 'D';
}
.icon-stats:before {
.icon-warning-alt:before {
content: 'E';
}
.icon-floppy:before {
.icon-video:before {
content: 'F';
}
.icon-warning-alt:before {
.icon-bulk:before {
content: 'G';
}
.icon-vunfold:before {
content: 'H';
}
.icon-video:before {
.icon-tasks:before {
content: 'I';
}
.icon-bulk:before {
.icon-kanban:before {
content: 'J';
}
.icon-search:before {
content: 'K';
}
.icon-vunfold:before {
content: 'M';
}
.icon-tasks:before {
content: 'O';
}
.icon-kanban:before {
content: 'P';
}
.icon-search:before {
content: 'Q';
}
.icon-wiki:before {
content: 'L';
}
.icon-team:before {
content: 'T';
content: 'M';
}
.icon-vfold:before {
content: 'N';
}
.icon-issues:before {
content: 'O';
}
.icon-iocaine:before {
content: 'Q';
}
.icon-archive:before {
content: 'T';
}
.icon-capslock:before {
content: 'U';
}
.icon-backlog:before,
.icon-scrum:before, {
content: 'R';
}
.icon-iocaine:before {
content: 'S';
}
.icon-closed-eye:before {
.icon-upload:before {
content: 'V';
}
.icon-open-eye:before {
.icon-github:before {
content: 'W';
}
.icon-archive:before {
.icon-timeline:before {
content: 'X';
}
.icon-capslock:before {
.icon-backlog:before {
content: 'P';
}
.icon-project:before {
content: 'S';
}
.icon-heart:before {
content: 'R';
}
.icon-eye:before {
content: 'Y';
}
.icon-upload:before {
content: 'Z';
}
.icon-github:before {
content: 'A';
}
.icon-timeline:before {
content: 'x';
}
.icon-project:before {
content: 'G';
}
.icon-star-fill:before {
content: 'J';
}
.icon-star:before {
content: '0';
}

View File

@ -102,3 +102,34 @@
margin-left: calc(-#{$border-size}px + #{$border-width}px);
}
}
// Mixin for track buttons
@mixin list-itemtype-track {
.list-itemtype-track {
@extend %small;
color: $gray-light;
display: flex;
flex-basis: 150px;
flex-shrink: 0;
justify-content: flex-end;
}
.list-itemtype-track-likers,
.list-itemtype-track-watchers {
display: inline-block;
width: 2.5rem;
&.active {
color: $primary;
path {
fill: currentcolor;
}
}
}
.icon {
svg {
max-width: 1rem;
}
path {
fill: currentcolor;
}
}
}

View File

@ -1,10 +1,17 @@
.us-story-main-data {
margin-bottom: 2rem;
header {
align-content: center;
align-items: stretch;
display: flex;
justify-content: center;
margin-bottom: .5rem;
}
.us-title {
@extend %large;
@extend %text;
background: $whitish;
margin-bottom: .5rem;
flex: 1;
padding: 1rem;
position: relative;
transition: all .2s linear;
@ -234,222 +241,3 @@
.comment-list {
padding: 1rem;
}
.us-detail-status {
@extend %large;
color: $primary;
vertical-align: middle;
}
.us-detail-progress-bar {
background: $grayer;
height: 26px;
margin-bottom: 1rem;
position: relative;
.current-progress {
background: $primary-light;
height: 26px;
left: 0;
position: absolute;
top: 0;
width: 60%;
}
.tasks-completed {
@extend %small;
color: $white;
left: 10px;
position: absolute;
top: 2px;
}
}
.points-per-role {
display: flex;
flex-wrap: wrap;
position: relative;
> li {
background: rgba($gray-light, .1);
border-radius: 2px;
color: rgba($grayer, .3);
flex-basis: 80px;
flex-grow: 1;
flex-shrink: 0;
margin: .1rem;
max-width: 50%;
padding: .5rem 0 .1rem;
position: relative;
text-align: center;
transition: color .3s linear;
&.active {
background: rgba($primary-light, .9);
color: $whitish;
}
&:first-child {
background: rgba($grayer, .5);
color: $whitish;
}
&:last-child {
border: 0;
}
}
.points {
@extend %xlarge;
@extend %title;
display: block;
margin-bottom: .3rem;
text-align: center;
}
.role {
@extend %small;
@include ellipsis(90%);
display: inline-block;
text-align: center;
}
.popover {
@include popover(200px, $top: 105%, $left: 35%, $arrow-width: 10px, $arrow-top: -5px, $arrow-left: 10px, $arrow-height: 10px);
li {
display: inline-block;
width: 23%;
}
a {
display: block;
text-align: center;
&:hover,
&.active {
background: $primary-light;
color: $white;
}
}
&.fix {
@include popover(200px, $top: 105%, $left: -160px, $arrow-width: 10px, $arrow-top: -5px, $arrow-left: 90%, $arrow-height: 10px);
}
}
}
.duty-data-container {
@extend %small;
margin-bottom: 1rem;
.duty-data {
margin-bottom: .5rem;
&:last-child {
margin: 0;
}
div {
background: darken($whitish, 5%);
padding: .5rem;
padding-right: 1rem;
transition: background .2s ease-in;
}
.clickable {
&:hover {
background: darken($whitish, 10%);
transition: background .2s ease-in;
}
}
}
.level {
display: inline-block;
margin-right: .5rem;
vertical-align: top;
}
.level-name {
color: darken($whitish, 20%);
float: right;
text-transform: lowercase;
}
}
.us-detail-settings {
margin-top: 2rem;
.button {
color: $white;
display: block;
margin-bottom: .5rem;
text-align: center;
width: 100%;
}
.button-gray {
background: $gray-light;
&:hover {
background: $gray-light;
}
&.editable {
&:hover {
background: $grayer;
cursor: pointer;
}
}
&.active {
background: $primary;
}
}
.item-block {
&.editable {
&:hover {
background: $red;
cursor: pointer;
}
}
}
.button-red {
&:hover,
&.active {
background: $red;
}
}
label {
&.editable {
cursor: pointer;
}
+input {
display: none;
}
}
span {
&.button-gray,
&.button-gray:hover {
background: $gray-light;
&.active {
background: $gray;
}
}
&.button-red,
&.button-red:hover {
background: $red-light;
&.active {
background: $red;
}
}
}
.loading-spinner {
@extend %loading-spinner;
}
}
.us-status {
.type-data {
position: relative;
.pop-type {
@include popover(150px, '', 30px, '', '');
}
}
.severity-data {
position: relative;
.pop-severity {
@include popover(150px, '', 30px, '', '');
}
}
.priority-data {
position: relative;
.pop-priority {
@include popover(150px, '', 30px, '', '');
}
}
.status-data {
position: relative;
.pop-status {
@include popover(150px, '', 30px, '', '');
}
}
}

View File

@ -10,6 +10,7 @@
}
.row {
@extend %small;
align-items: center;
border-bottom: 1px solid $gray-light;
display: flex;
padding: .5rem 0 .5rem .5rem;
@ -22,6 +23,24 @@
&:hover {
background: transparent;
}
.input {
flex-basis: 25px;
flex-grow: 0;
flex-shrink: 0;
}
.votes {
color: $gray;
flex-basis: 50px;
flex-grow: 0;
flex-shrink: 0;
text-align: center;
&.inactive {
color: $gray-light;
}
&.is-voted {
color: $primary-light;
}
}
.user-stories {
overflow: hidden;
width: 100%;
@ -99,8 +118,8 @@
.backlog-table-header {
.backlog-table-title {
@extend %text;
@extend %medium;
@extend %bold;
border-bottom: 2px solid $gray-light;
flex-wrap: nowrap;
padding-right: 30px;
@ -124,6 +143,7 @@
&:hover {
background: lighten($primary, 60%);
transition: background .2s ease-in;
transition-delay: .2s;
.us-settings,
.icon-drag-v {
opacity: 1;
@ -150,26 +170,25 @@
height: 40px;
width: 100%;
}
.row-selected {
.row-selected,
.is-checked {
background: lighten($primary, 60%);
transition: background .2s ease-in;
}
input {
&:checked {
color: $primary-light;
transition: color .2s ease-in;
}
}
.user-story-name {
align-items: center;
display: flex;
flex-wrap: nowrap;
input {
flex-shrink: 0;
margin-right: 1rem;
vertical-align: super;
&:checked+a {
color: $primary-light;
transition: color .2s ease-in;
}
}
a {
@extend %light;
display: inline-block;
flex-grow: 20;
flex: 1;
max-width: 90%;
overflow: hidden;
text-overflow: ellipsis;

View File

@ -1,6 +1,7 @@
.duty-assigned-to {
.ticket-assigned-to {
align-items: center;
display: flex;
margin-top: 1rem;
margin-bottom: 1rem;
position: relative;
&:hover {
.assigned-to {
@ -17,18 +18,19 @@
max-width: 2rem;
}
.user-avatar {
flex-grow: 1;
flex-basis: 4rem;
flex-shrink: 0;
img {
border-radius: 8%;
width: 100%;
}
}
.assigned-to {
flex-grow: 3;
margin-left: 1rem;
flex-grow: 1;
margin-left: .5rem;
.assigned-title {
@extend %small;
color: $gray-light;
@extend %light;
color: $gray;
display: block;
}
.user-assigned {
@ -40,7 +42,7 @@
cursor: pointer;
}
.icon {
vertical-align: top;
vertical-align: middle;
}
}
.assigned-name {

View File

@ -1,5 +1,9 @@
.lightbox {
@extend %lightbox;
h2 {
@extend %larger;
@extend %text;
}
}
.lightbox-generic-form {
@ -17,9 +21,12 @@
margin-bottom: 1rem;
max-height: 9rem;
min-height: 7rem;
resize: vertical;
}
label {
@extend %xsmall;
background: $whitish;
border: 1px solid $gray-light;
color: $grayer;
cursor: pointer;
@ -38,43 +45,33 @@
}
.settings {
align-content: flex-start;
align-items: stretch;
display: flex;
justify-content: flex-start;
justify-content: center;
margin-bottom: 1rem;
fieldset {
flex-basis: 30%;
flex-grow: 1;
margin-right: .5rem;
text-align: center;
&:hover {
color: $white;
transition: all .2s ease-in;
}
&:last-child {
margin: 0;
}
}
.requirement,
.iocaine {
&:hover {
background: $primary-light;
border: 1px solid $primary;
color: $white;
transition: all .2s ease-in;
}
}
.blocked {
padding: 8px 30px;
&:hover {
background: $red-light;
border: 1px solid $red;
color: $white;
transition: all .2s ease-in;
}
}
.client-requirement,
.team-requirement,
.iocaine-flag {
@ -87,13 +84,16 @@
}
.blocking-flag {
label {
align-self: stretch;
display: block;
}
input:checked+label {
background: $red;
border: 1px solid $red;
color: $white;
}
}
input {
display: none;
}
@ -464,30 +464,12 @@
flex-grow: 0;
width: 600px;
}
.watchers {
margin-top: 1rem;
min-height: 440px;
.watcher-name {
flex-grow: 12;
}
}
.watcher-single {
position: relative;
&:hover,
&.active {
background: lighten($primary, 55%);
cursor: pointer;
}
.user-list-single {
&:hover {
background: lighten($primary, 58%);
cursor: pointer;
transition: background .3s linear;
}
&.active {
.icon {
opacity: 1;
right: 1rem;
top: 1.3rem;
}
transition-delay: .2s;
}
}
.more-watchers {
@ -499,10 +481,12 @@
}
.lb-create-edit-userstory {
.ticket-role-points {
flex-basis: 10%;
flex-grow: 1;
flex-shrink: 1;
}
.points-per-role {
margin-bottom: 1rem;
li {
margin: .5rem .1rem;
}
}
}

View File

@ -0,0 +1,199 @@
.ticket-data {
.ticket-title {
@extend %larger;
@extend %light;
margin: 1.5rem 0 2rem;
text-transform: uppercase;
span {
margin-right: .25rem;
&:last-child {
@extend %large;
}
}
}
.ticket-data-container {
@extend %small;
@extend %normal;
margin-bottom: 1rem;
.icon {
margin-left: .25rem;
}
}
.level {
display: inline-block;
margin-right: .5rem;
vertical-align: top;
}
.level-name {
color: darken($whitish, 20%);
float: right;
text-transform: lowercase;
}
.ticket-estimation {
.ticket-role-points {
&:first-child {
flex-basis: 100%;
max-width: 100%;
}
}
}
}
.ticket-status {
margin-bottom: .5rem;
&:last-child {
margin: 0;
}
div {
background: darken($whitish, 5%);
padding: .5rem;
padding-right: 1rem;
transition: background .2s ease-in;
}
.clickable {
&:hover {
background: darken($whitish, 10%);
transition: background .2s ease-in;
}
}
.type-data {
position: relative;
.pop-type {
@include popover(150px, '', 30px, '', '');
}
}
.severity-data {
position: relative;
.pop-severity {
@include popover(150px, '', 30px, '', '');
}
}
.priority-data {
position: relative;
.pop-priority {
@include popover(150px, '', 30px, '', '');
}
}
.status-data {
position: relative;
.pop-status {
@include popover(150px, '', 30px, '', '');
}
}
}
.ticket-track-buttons {
.track-inner {
@extend %light;
@extend %small;
background: darken($whitish, 5%);
padding: .25rem;
text-transform: uppercase;
transition: background .25s;
&:hover {
background: darken($whitish, 10%);
}
}
.track-button {
width: 100%;
}
.active {
.track-button-counter {
background: rgba($grayer, .5);
}
&:hover {
.track-inner {
background: rgba($primary-light, .2);
}
}
&.is-hover {
.track-inner {
background: $red;
color: $whitish;
transition: background .3s;
}
path {
fill: $red-light;
}
}
}
.track-button-counter {
@extend %large;
background: rgba($grayer, .25);
color: $whitish;
padding: 0 .5rem;
}
.vote-button {
margin-bottom: .3rem;
}
.watch-button {
border-bottom: 0;
}
.ticket-watchers {
margin: .5rem 0;
}
.add-watcher {
display: block;
margin: .5rem;
.icon {
background: rgba($grayer, .25);
color: $whitish;
margin-right: .5rem;
padding: .25rem;
}
&:hover {
.icon {
background: $primary-light;
color: $whitish;
transition: background .3s linear;
}
}
}
}
.ticket-detail-settings {
margin-top: 2rem;
label,
.button {
display: block;
margin-bottom: .5rem;
text-align: center;
&.editable {
cursor: pointer;
}
+input {
display: none;
}
}
.loading-spinner {
@extend %loading-spinner;
}
.button-gray {
background: $gray-light;
&:hover {
background: $gray-light;
}
&.editable {
&:hover {
background: $grayer;
cursor: pointer;
}
}
&.active {
background: $primary;
}
}
.item-block {
&.editable {
&:hover {
background: $red;
cursor: pointer;
}
}
}
.button-red {
display: block;
margin-top: 2rem;
}
}

View File

@ -2,15 +2,35 @@
.single-project-intro {
margin-bottom: 2rem;
}
.intro-options {
align-items: center;
display: flex;
justify-content: space-between;
}
h1 {
color: $primary;
display: inline-block;
line-height: 1.2;
margin: 0;
margin-bottom: 0;
margin-right: 3rem;
vertical-align: middle;
}
.private {
font-size: 1rem;
vertical-align: super;
}
.like-watch-container {
margin-left: auto;
}
.track-buttons-container {
display: flex;
}
.like-button {
margin-right: .75rem;
}
.track-container {
@include list-itemtype-track;
}
.description {
@extend %light;
@extend %medium;

View File

@ -34,6 +34,9 @@
div {
cursor: pointer;
}
.votes {
color: $gray;
}
}
.table-main {
@extend %small;
@ -58,6 +61,19 @@
text-align: center;
width: 75px;
}
.votes {
color: $gray;
flex-basis: 75px;
flex-shrink: 0;
text-align: center;
width: 75px;
&.inactive {
color: $gray-light;
}
&.is-voted {
color: $primary-light;
}
}
.subject {
overflow: hidden;
padding-right: 1rem;

View File

@ -1,4 +1,4 @@
// Shame SCSS decalrations to be refactorized
// Shame SCSS declarations to be refactorized
_:-ms-fullscreen,
:root .taskboard-table-body {

5
app/svg/check.svg Normal file
View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20.681641 20.683598">
<g transform="matrix(.45977 0 0 .45977 -.884 -.962)">
<path d="M18 32.34L9.66 24l-2.83 2.83L18 38l24-24-2.83-2.83z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 222 B

6
app/svg/like.svg Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg viewbox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(94.258 13.08) scale(1.09227)">
<path d="M384 864c399-314 384-425 384-512s-72-192-192-192-192 128-192 128-72-128-192-128S0 265 0 352s-15 198 384 512z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@ -1,18 +1,18 @@
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 134.2 134.3" version="1.1" preserveAspectRatio="xMidYMid meet">
<svg class="logo-nav" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 134.2 134.3" version="1.1" preserveAspectRatio="xMidYMid meet">
<style>
.top {
-webkit-transform-origin: 50% 50%;
transform: rotate(0deg);
}
path{
.logo-nav path{
fill:#fff;
opacity: .6;
}
svg:hover .top {
.logo-nav svg:hover .top {
transform: rotate(90deg);
transition: all .3s ease-in;
}
svg:hover {
.logo-nav svg:hover {
cursor: pointer;
}
@-webkit-keyframes rotate {

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

4
app/svg/unwatch.svg Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 1024 1024">
<path d="M511.9 304.777c111.998 0 202.897 90.9 202.897 202.898 0 26.174-5.276 51.13-14.406 74.058L819.087 700.43c61.275-51.132 109.565-117.276 139.39-192.755C888.073 329.53 715 203.328 511.9 203.328c-56.813 0-111.19 10.145-161.71 28.406l87.65 87.45c22.928-8.928 47.885-14.407 74.06-14.407zM106.1 194.197l92.522 92.522 18.464 18.463C150.13 357.53 97.175 427.125 65.523 507.675 135.726 685.82 309 812.023 511.9 812.023c62.897 0 122.955-12.174 177.94-34.29l17.247 17.246 118.29 118.492 51.738-51.536L157.84 142.46l-51.738 51.738zM330.508 418.4l62.695 62.696c-1.826 8.724-3.043 17.45-3.043 26.58 0 67.16 54.58 121.738 121.74 121.738 9.13 0 17.854-1.217 26.375-3.043l62.696 62.696c-26.985 13.392-57.014 21.508-89.07 21.508-112 0-202.9-90.9-202.9-202.9 0-32.056 8.116-62.085 21.508-89.274zm174.695-31.855L633.03 514.37l.607-6.695c0-67.16-54.58-121.738-121.738-121.738l-6.697.608z"/>
</svg>

After

Width:  |  Height:  |  Size: 1008 B

14
app/svg/upvote.svg Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
viewBox="0 0 1000 1000"
>
<path
d="m 140.67935,787.45652 718.6413,0 L 500,212.54348 Z"
/>
</svg>

After

Width:  |  Height:  |  Size: 423 B

4
app/svg/watch.svg Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" viewBox="0 0 1000 1000" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg">
<path d="m5.1e2 2.1e2c-2e2 0-3.7e2 1.3e2 -4.4e2 3e2 70 1.8e2 2.4e2 3e2 4.4e2 3e2s3.7e2 -1.3e2 4.4e2 -3e2c-60-1.8e2 -2.4e2 -3e2 -4.4e2 -3e2zm0 5.1e2c-1.1e2 0-2e2 -91-2e2 -2e2s91-2e2 2e2 -2e2 2e2 91 2e2 2e2 -91 2e2 -2e2 2e2zm0-3.2e2c-67 0-1.2e2 54-1.2e2 1.2e2 0 67 54 1.2e2 1.2e2 1.2e2 67 0 1.2e2 -54 1.2e2 -1.2e2 0-67-54-1.2e2 -1.2e2 -1.2e2z"/>
</svg>

After

Width:  |  Height:  |  Size: 631 B