Merge branch 'develop' of github.com:martini/zammad into develop
This commit is contained in:
commit
0740ffdb5d
8 changed files with 156 additions and 56 deletions
|
@ -1,4 +1,7 @@
|
|||
class App.OnlineNotificationWidget extends App.Controller
|
||||
elements:
|
||||
'.js-toggleNavigation': 'toggle'
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
|
||||
|
@ -38,10 +41,10 @@ class App.OnlineNotificationWidget extends App.Controller
|
|||
@el.find('.activity-counter').remove()
|
||||
return
|
||||
|
||||
if @el.find('.logo .activity-counter')[0]
|
||||
@el.find('.logo .activity-counter').html(count)
|
||||
if @el.find('.js-toggleNavigation .activity-counter')[0]
|
||||
@el.find('.js-toggleNavigation .activity-counter').html(count)
|
||||
else
|
||||
@el.find('.logo').append('<div class="activity-counter">' + count.toString() + '</div>')
|
||||
@toggle.append('<div class="activity-counter">' + count.toString() + '</div>')
|
||||
|
||||
markAllAsSeen: () =>
|
||||
@ajax(
|
||||
|
@ -56,9 +59,35 @@ class App.OnlineNotificationWidget extends App.Controller
|
|||
fail: =>
|
||||
)
|
||||
|
||||
removeClickCatcher: () =>
|
||||
return if !@clickCatcher
|
||||
@clickCatcher.remove()
|
||||
@clickCatcher = null
|
||||
|
||||
onShow: =>
|
||||
# show frontend times
|
||||
$('#markAllAsSeen').bind('click', (e) =>
|
||||
e.preventDefault()
|
||||
@markAllAsSeen()
|
||||
)
|
||||
@frontendTimeUpdate()
|
||||
|
||||
# add clickCatcher
|
||||
@clickCatcher = new App.clickCatcher
|
||||
holder: @el.offsetParent()
|
||||
callback: @hidePopover
|
||||
zIndexScale: 4
|
||||
|
||||
onHide: =>
|
||||
$('#markAllAsSeen').unbind('click')
|
||||
@removeClickCatcher()
|
||||
|
||||
hidePopover: =>
|
||||
@toggle.popover('hide')
|
||||
|
||||
stop: =>
|
||||
@counterUpdate(0)
|
||||
@el.find('.logo').popover('destroy')
|
||||
@toggle.popover('destroy')
|
||||
|
||||
start: =>
|
||||
@stop()
|
||||
|
@ -73,28 +102,21 @@ class App.OnlineNotificationWidget extends App.Controller
|
|||
|
||||
items = @prepareForObjectList(items)
|
||||
|
||||
@el.find('.logo').popover(
|
||||
@toggle.popover
|
||||
trigger: 'click'
|
||||
container: 'body'
|
||||
html: true
|
||||
delay: { show: 100, hide: 0 }
|
||||
placement: 'right'
|
||||
viewport: { "selector": "#app", "padding": 10 }
|
||||
template: App.view('widget/online_notification')()
|
||||
title: ->
|
||||
App.i18n.translateInline( 'Notifications' ) + " <span>#{counter}</span>"
|
||||
App.i18n.translateInline( 'Notifications' ) + " <span class='popover-notificationsCounter'>#{counter}</span>"
|
||||
content: =>
|
||||
# insert data
|
||||
$( App.view('widget/online_notification')(items: items))
|
||||
).on('shown.bs.popover', =>
|
||||
|
||||
# show frontend times
|
||||
$('#markAllAsSeen').bind('click', (e) =>
|
||||
e.preventDefault()
|
||||
@markAllAsSeen()
|
||||
);
|
||||
@frontendTimeUpdate()
|
||||
).on('hide.bs.popover', =>
|
||||
$('#markAllAsSeen').unbind('click')
|
||||
)
|
||||
$( App.view('widget/online_notification_content')(items: items) )
|
||||
.on
|
||||
'shown.bs.popover': @onShow
|
||||
'hide.bs.popover': @onHide
|
||||
|
||||
fetch: =>
|
||||
load = (items) =>
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
/* from here http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/ */
|
||||
/*
|
||||
|
||||
Makes the popover stay when hovered over it
|
||||
|
||||
from here http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/
|
||||
|
||||
*/
|
||||
|
||||
var originalLeave = $.fn.popover.Constructor.prototype.leave;
|
||||
|
||||
$.fn.popover.Constructor.prototype.leave = function(obj){
|
||||
var self = obj instanceof this.constructor ?
|
||||
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
||||
|
|
|
@ -8,6 +8,15 @@
|
|||
* ======================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Modified 19-01-2014 by Felix
|
||||
|
||||
add tooltip height desctriction to 100% viewport height - 18px padding
|
||||
line 260-263
|
||||
|
||||
*/
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
|
@ -176,8 +185,8 @@
|
|||
|
||||
$tip
|
||||
.detach()
|
||||
.css({ top: 0, left: 0, display: 'block' })
|
||||
.addClass(placement)
|
||||
.css({ top: 0, left: 0 })
|
||||
.addClass(placement + ' is-visible')
|
||||
.data('bs.' + this.type, this)
|
||||
|
||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||
|
@ -249,6 +258,10 @@
|
|||
}
|
||||
}, offset), 0)
|
||||
|
||||
var maxHeight = $('#app').height() - 18
|
||||
if(height > maxHeight)
|
||||
$tip.height(maxHeight)
|
||||
|
||||
$tip.addClass('in')
|
||||
|
||||
// check to see if placing tip in new offset caused the tip to resize itself
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div class="white close icon"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="logo" title="<%- @C( 'product_name' ) %>"></div>
|
||||
<div class="logo js-toggleNavigation"></div>
|
||||
<ul id="global-search-result" class="custom-dropdown-menu" role="menu"></ul>
|
||||
</form>
|
||||
|
||||
|
|
|
@ -1,22 +1,8 @@
|
|||
<% if @items.length: %>
|
||||
<a href="#" id="markAllAsSeen"><%- @T( 'Mark all as seen.' ) %></a>
|
||||
<% for item in @items: %>
|
||||
<div class="activity-entry horizontal">
|
||||
<a class="activity-avatar user-popover" data-id="<%= item.created_by_id %>" href="<%- item.created_by.uiUrl() %>">
|
||||
<%- item.created_by.avatar() %>
|
||||
</a>
|
||||
<a href="<%- item.link %>" class="activity-body flex horizontal">
|
||||
<span class="activity-message flex">
|
||||
<span class="activity-text <% if item.seen: %>inactive<% end %>">
|
||||
<%= item.created_by.displayName() %> <%- @T( item.type ) %> <%- @T( item.object_name ) %><% if item.title: %> (<%= item.title %>)<% end %>
|
||||
</span>
|
||||
<span class="activity-time <% if item.seen: %>inactive<% end %> humanTimeFromNow" data-time="<%- item.created_at %>">?</span>
|
||||
</span>
|
||||
</a>
|
||||
<div class="popover popover--notifications" role="tooltip">
|
||||
<div class="arrow"></div>
|
||||
<div class="popover-notificationsHeader">
|
||||
<span class="popover-title"></span>
|
||||
<a class="popover-notificationsMarkRead" id="markAllAsSeen"><%- @T( 'Mark all as read' ) %></a>
|
||||
</div>
|
||||
<div class="popover-content"></div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% else: %>
|
||||
<h3 class="u-textTruncate" title="<%- @Ti( 'Name') %>">
|
||||
<%- @T("No unread Notifications for you. :) ") %>
|
||||
</h3>
|
||||
<% end %>
|
|
@ -0,0 +1,21 @@
|
|||
<% if @items.length: %>
|
||||
<% for item in @items: %>
|
||||
<div class="activity-entry horizontal">
|
||||
<a class="activity-avatar user-popover" data-id="<%= item.created_by_id %>" href="<%- item.created_by.uiUrl() %>">
|
||||
<%- item.created_by.avatar() %>
|
||||
</a>
|
||||
<a href="<%- item.link %>" class="activity-body flex horizontal">
|
||||
<span class="activity-message flex">
|
||||
<span class="activity-text <% if item.seen: %>inactive<% end %>">
|
||||
<%= item.created_by.displayName() %> <%- @T( item.type ) %> <%- @T( item.object_name ) %><% if item.title: %> (<%= item.title %>)<% end %>
|
||||
</span>
|
||||
<span class="activity-time <% if item.seen: %>inactive<% end %> humanTimeFromNow" data-time="<%- item.created_at %>">?</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<% end %>
|
||||
<% else: %>
|
||||
<div class="label u-textTruncate" title="<%- @Ti( 'Name') %>">
|
||||
<%- @T("No unread Notifications for you. :) ") %>
|
||||
</div>
|
||||
<% end %>
|
|
@ -0,0 +1,5 @@
|
|||
<span class="popover-notificationsTitle">
|
||||
<%- @T( 'Notifications' ) %>
|
||||
<span class="popover-notificationsCounter"><%= @counter %></span>
|
||||
<a class="popover-notificationsMarkRead" id="markAllAsSeen"><%- @T( 'Mark all as read' ) %></a>
|
||||
</span>
|
|
@ -571,7 +571,8 @@ h5 {
|
|||
}
|
||||
|
||||
label,
|
||||
.checkbox.form-group label {
|
||||
.checkbox.form-group label,
|
||||
.label {
|
||||
text-transform: uppercase;
|
||||
color: hsl(0,0%,60%);
|
||||
display: block;
|
||||
|
@ -579,6 +580,8 @@ label,
|
|||
font-weight: normal;
|
||||
letter-spacing: 0.1em;
|
||||
margin-bottom: 4px;
|
||||
text-align: left;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
|
@ -2091,8 +2094,13 @@ footer {
|
|||
margin-top: -3px;
|
||||
|
||||
&.loading {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 100%;
|
||||
position: relative;
|
||||
&:after {
|
||||
@extend .priority.icon:after;
|
||||
}
|
||||
}
|
||||
|
||||
&.error {
|
||||
|
@ -2202,12 +2210,12 @@ footer {
|
|||
}
|
||||
|
||||
.search {
|
||||
padding: 14px 15px 10px 10px;
|
||||
padding: 14px 2px 10px 10px;
|
||||
border-bottom: 1px solid rgba(240, 250, 255, .05);
|
||||
}
|
||||
|
||||
.search-holder {
|
||||
margin-right: 15px;
|
||||
margin-right: 2px;
|
||||
position: relative;
|
||||
transition: 240ms;
|
||||
}
|
||||
|
@ -2249,12 +2257,13 @@ footer {
|
|||
}
|
||||
|
||||
.search .logo {
|
||||
width: 41px;
|
||||
width: 67px;
|
||||
height: 36px;
|
||||
background: image_url("/assets/images/logo.svg");
|
||||
background: image_url("/assets/images/logo.svg") no-repeat center;
|
||||
transition: 240ms;
|
||||
position: relative;
|
||||
@extend .u-clickable;
|
||||
@extend .zIndex-5;
|
||||
}
|
||||
|
||||
.logo .activity-counter {
|
||||
|
@ -2627,18 +2636,18 @@ footer {
|
|||
border: none;
|
||||
z-index: 1110;
|
||||
box-shadow: 0 1px 14px rgba(0,8,14,.25);
|
||||
// max-height: calc(100vh - 20px);
|
||||
}
|
||||
|
||||
.popover-title {
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 20px 17px 4px;
|
||||
padding: 21px 17px 4px;
|
||||
}
|
||||
|
||||
.popover-content {
|
||||
padding: 0 17px 10px;
|
||||
max-height: 600px;
|
||||
overflow-y: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.popover.right { margin-left: 4px; }
|
||||
|
@ -2697,6 +2706,43 @@ footer {
|
|||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.popover--notifications {
|
||||
@extend .zIndex-5;
|
||||
|
||||
&.is-visible {
|
||||
@extend .vertical;
|
||||
}
|
||||
}
|
||||
|
||||
.popover-notificationsHeader {
|
||||
@extend .horizontal;
|
||||
@extend .end;
|
||||
@extend .popover-title;
|
||||
padding-bottom: 29px;
|
||||
|
||||
.popover-title {
|
||||
@extend h1;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.popover-notificationsCounter {
|
||||
color: #e25253;
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
.popover-notificationsMarkRead {
|
||||
@extend .btn;
|
||||
@extend .btn--subtle;
|
||||
@extend .align-right;
|
||||
padding: 5px 0 0;
|
||||
|
||||
&:hover {
|
||||
padding: 5px 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.stat-widgets {
|
||||
margin: 0 -7px 20px;
|
||||
}
|
||||
|
@ -3200,14 +3246,14 @@ footer {
|
|||
right: 0;
|
||||
top: -30px;
|
||||
height: 30px;
|
||||
background: linear-gradient(transparent, white);
|
||||
background: linear-gradient(rgba(255,255,255,0), white);
|
||||
}
|
||||
}
|
||||
|
||||
.customer .textBubble-overflowContainer {
|
||||
background: #e5f0f5;
|
||||
&:before {
|
||||
background: linear-gradient(transparent, #e5f0f5);
|
||||
background: linear-gradient(hsla(199,44%,93%,0), hsl(199,44%,93%));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue