Improved ctrl+alt+y shortcut (2 times + subject, 3 times + subject and url).

This commit is contained in:
Martin Edenhofer 2016-05-23 15:23:18 +02:00
parent 5e090a8976
commit 075db8873a
5 changed files with 81 additions and 23 deletions

View file

@ -5,10 +5,10 @@ class App.TicketZoomTitle extends App.ObserverController
title: true
events:
'blur .ticket-title-update': 'update'
'blur .js-objectTitle': 'update'
renderPost: (object) =>
@$('.ticket-title-update').ce({
@$('.js-objectTitle').ce({
mode: 'textonly'
multiline: false
maxlength: 250

View file

@ -24,6 +24,12 @@ class App.KeyboardShortcutWidget extends Spine.Module
constructor: ->
@observerKeys()
@lastKey = undefined
$(document).keyup((e) =>
return if e.keyCode isnt 27
@lastKey = undefined
)
observerKeys: =>
navigationHotkeys = 'alt+ctrl'
@ -41,9 +47,17 @@ class App.KeyboardShortcutWidget extends Spine.Module
modifier += shortcut.key
if shortcut.callback
@log 'debug', 'bind for', modifier
$(document).bind('keydown', modifier, (e) ->
$(document).bind('keydown', modifier, (e) =>
e.preventDefault()
shortcut.callback()
if @lastKey && @lastKey.modifier is modifier && @lastKey.time + 5500 > new Date().getTime()
@lastKey.count += 1
@lastKey.time = new Date().getTime()
else
@lastKey =
modifier: modifier
count: 1
time: new Date().getTime()
shortcut.callback(shortcut, @lastKey, modifier)
)
App.Event.bind('global-shortcut', (e) ->
@ -51,7 +65,7 @@ class App.KeyboardShortcutWidget extends Spine.Module
for item in area.content
for shortcut in item.shortcuts
if shortcut.globalEvent is e
shortcut.callback()
shortcut.callback(shortcut)
)
App.Config.set('keyboard_shortcuts', App.KeyboardShortcutWidget, 'Widgets')
@ -247,10 +261,38 @@ App.Config.set(
key: 'y'
hotkeys: true
description: 'Copy current object number (e. g. Ticket#) into clipboard'
callback: ->
callback: (shortcut, lastKey, modifier) ->
App.Event.trigger('keyboard_shortcuts_close')
text = $('.active.content .js-objectNumber').data('number') || ''
clipboard.copy(text)
text = $('.active.content .js-objectNumber').first().data('number') || ''
if lastKey && lastKey.count is 1
clipboard.copy(text)
return
title = $('.active.content .js-objectTitle').first().text()
if lastKey && lastKey.count is 2
if title
text += ": #{title}"
clipboard.copy(text)
return
url = window.location.toString()
if lastKey && lastKey.count is 3
clipboard.copy(
'text/plain': "#{text}: #{title}\n#{url}",
'text/html': "<a href=\"#{url}\">#{text}</a>: #{title}"
)
}
{
keyPrefix: '2x'
key: 'y'
hotkeys: true
description: '...add object title'
}
{
keyPrefix: '3x'
key: 'y'
hotkeys: true
description: '...add object link url'
}
]
}

View file

@ -6,8 +6,16 @@
<% for item in area.content: %>
<% if item.where: %><p><i><%- @T(item.where) %></i></p><% end %>
<% for shortcut in item.shortcuts: %>
<% if shortcut.hotkeys: %><kbd>ctrl</kbd> <kbd>alt</kbd> <% end %>
<% if _.isArray(shortcut.key): %><% for key in shortcut.key: %> <kbd><%- key %></kbd><% end %>
<% if shortcut.hotkeys: %>
<kbd>ctrl</kbd> <kbd>alt</kbd>
<% end %>
<% if shortcut.keyPrefix: %>
<%= shortcut.keyPrefix %>
<% end %>
<% if _.isArray(shortcut.key): %>
<% for key in shortcut.key: %>
<kbd><%- key %></kbd>
<% end %>
<% else: %>
<kbd><%- shortcut.key %></kbd>
<% end %>
@ -24,8 +32,16 @@
<% for item in area.content: %>
<% if item.where: %><p><i><%- @T(item.where) %></i></p><% end %>
<% for shortcut in item.shortcuts: %>
<% if shortcut.hotkeys: %><kbd>ctrl</kbd> <kbd>alt</kbd> <% end %>
<% if _.isArray(shortcut.key): %><% for key in shortcut.key: %> <kbd><%- key %></kbd><% end %>
<% if shortcut.hotkeys: %>
<kbd>ctrl</kbd> <kbd>alt</kbd>
<% end %>
<% if shortcut.keyPrefix: %>
<%= shortcut.keyPrefix %>
<% end %>
<% if _.isArray(shortcut.key): %>
<% for key in shortcut.key: %>
<kbd><%- key %></kbd>
<% end %>
<% else: %>
<kbd><%- shortcut.key %></kbd>
<% end %>

View file

@ -1 +1 @@
<div contenteditable="true" class="ticket-title-update" data-placeholder="<%- @Ti('Enter Title...') %>"><%= @object.title %></div>
<div contenteditable="true" class="ticket-title-update js-objectTitle" data-placeholder="<%- @Ti('Enter Title...') %>"><%= @object.title %></div>

View file

@ -1808,28 +1808,28 @@ wait untill text in selector disabppears
data = params[:data]
if data[:title]
#element = instance.find_elements(:css => '.content.active .ticketZoom-header .ticket-title-update')[0]
#element = instance.find_elements(:css => '.content.active .ticketZoom-header .js-objectTitle')[0]
#element.clear
#sleep 0.5
#element = instance.find_elements(:css => '.content.active .ticketZoom-header .ticket-title-update')[0]
#element = instance.find_elements(:css => '.content.active .ticketZoom-header .js-objectTitle')[0]
#element.send_keys(data[:title])
#sleep 0.5
#element.send_keys(:tab)
instance.execute_script('$(".content.active .ticketZoom-header .ticket-title-update").focus()')
instance.execute_script('$(".content.active .ticketZoom-header .ticket-title-update").text("' + data[:title] + '")')
instance.execute_script('$(".content.active .ticketZoom-header .ticket-title-update").blur()')
instance.execute_script('$(".content.active .ticketZoom-header .ticket-title-update").trigger("blur")')
instance.execute_script('$(".content.active .ticketZoom-header .js-objectTitle").focus()')
instance.execute_script('$(".content.active .ticketZoom-header .js-objectTitle").text("' + data[:title] + '")')
instance.execute_script('$(".content.active .ticketZoom-header .js-objectTitle").blur()')
instance.execute_script('$(".content.active .ticketZoom-header .js-objectTitle").trigger("blur")')
# {
# :where => :instance2,
# :execute => 'sendkey',
# :css => '.content.active .ticketZoom-header .ticket-title-update',
# :css => '.content.active .ticketZoom-header .js-objectTitle',
# :value => 'TTT',
# },
# {
# :where => :instance2,
# :execute => 'sendkey',
# :css => '.content.active .ticketZoom-header .ticket-title-update',
# :css => '.content.active .ticketZoom-header .js-objectTitle',
# :value => :tab,
# },
end
@ -2007,7 +2007,7 @@ wait untill text in selector disabppears
data = params[:data]
if data[:title]
title = instance.find_elements(css: '.content.active .ticketZoom-header .ticket-title-update')[0].text.strip
title = instance.find_elements(css: '.content.active .ticketZoom-header .js-objectTitle')[0].text.strip
if title =~ /#{data[:title]}/i
assert(true, "matching '#{data[:title]}' in title '#{title}'")
else
@ -2136,7 +2136,7 @@ wait untill text in selector disabppears
#instance.find_element(partial_link_text: params[:title] } ).click
instance.execute_script("$(\"#global-search-result a:contains('#{params[:title]}') .nav-tab-icon\").click()")
sleep 1
title = instance.find_elements(css: '.active .ticketZoom-header .ticket-title-update')[0].text
title = instance.find_elements(css: '.active .ticketZoom-header .js-objectTitle')[0].text
if title !~ /#{params[:title]}/
screenshot(browser: instance, comment: 'ticket_open_by_title_failed')
raise "unable to search/find ticket #{params[:title]}!"