Detach not shown task to deduce dom nodes and increase speed.
This commit is contained in:
parent
41d551ed25
commit
6b81b791ed
65 changed files with 975 additions and 659 deletions
|
@ -645,9 +645,19 @@ class App.ControllerPermanent extends App.Controller
|
||||||
|
|
||||||
super
|
super
|
||||||
|
|
||||||
$('.content').addClass('hide')
|
|
||||||
@navShow()
|
@navShow()
|
||||||
|
|
||||||
|
class App.ControllerSubContent extends App.Controller
|
||||||
|
constructor: ->
|
||||||
|
if @requiredPermission
|
||||||
|
@permissionCheckRedirect(@requiredPermission)
|
||||||
|
|
||||||
|
super
|
||||||
|
|
||||||
|
show: =>
|
||||||
|
return if !@header
|
||||||
|
@title @header, true
|
||||||
|
|
||||||
class App.ControllerContent extends App.Controller
|
class App.ControllerContent extends App.Controller
|
||||||
constructor: ->
|
constructor: ->
|
||||||
if @requiredPermission
|
if @requiredPermission
|
||||||
|
@ -655,10 +665,10 @@ class App.ControllerContent extends App.Controller
|
||||||
|
|
||||||
super
|
super
|
||||||
|
|
||||||
$('.content').addClass('hide')
|
# hide tasks
|
||||||
$('#content').removeClass('hide')
|
|
||||||
@navShow()
|
|
||||||
App.TaskManager.hideAll()
|
App.TaskManager.hideAll()
|
||||||
|
$('#content').removeClass('hide').removeClass('active')
|
||||||
|
@navShow()
|
||||||
|
|
||||||
class App.ControllerModal extends App.Controller
|
class App.ControllerModal extends App.Controller
|
||||||
authenticateRequired: false
|
authenticateRequired: false
|
||||||
|
|
|
@ -373,19 +373,65 @@ class App.ControllerTabs extends App.Controller
|
||||||
@lastActiveTab = $(e.target).attr('href')
|
@lastActiveTab = $(e.target).attr('href')
|
||||||
@Config.set('lastTab', @lastActiveTab)
|
@Config.set('lastTab', @lastActiveTab)
|
||||||
|
|
||||||
class App.ControllerNavSidbar extends App.ControllerContent
|
class App.ControllerNavSidbar extends App.Controller
|
||||||
constructor: (params) ->
|
constructor: (params) ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@navupdate ''
|
|
||||||
|
|
||||||
if @authenticateRequired
|
if @authenticateRequired
|
||||||
@authenticateCheckRedirect()
|
@authenticateCheckRedirect()
|
||||||
|
|
||||||
@params = params
|
@user = App.User.find(App.Session.get('id'))
|
||||||
|
|
||||||
|
@render(true)
|
||||||
|
|
||||||
|
@bind('ui:rerender',
|
||||||
|
=>
|
||||||
|
@render(true)
|
||||||
|
@updateNavigation(true)
|
||||||
|
)
|
||||||
|
|
||||||
|
show: (params) =>
|
||||||
|
@navupdate ''
|
||||||
|
@shown = true
|
||||||
|
for key, value of params
|
||||||
|
if key isnt 'el' && key isnt 'shown' && key isnt 'match'
|
||||||
|
@[key] = value
|
||||||
|
@updateNavigation()
|
||||||
|
if @activeController && _.isFunction(@activeController.show)
|
||||||
|
@activeController.show(params)
|
||||||
|
|
||||||
|
hide: =>
|
||||||
|
@shown = false
|
||||||
|
if @activeController && _.isFunction(@activeController.hide)
|
||||||
|
@activeController.hide()
|
||||||
|
|
||||||
|
render: (force = false) =>
|
||||||
|
groups = @groupsSorted()
|
||||||
|
selectedItem = @selectedItem(groups)
|
||||||
|
|
||||||
|
@html App.view('generic/navbar_level2/index')(
|
||||||
|
className: @configKey
|
||||||
|
)
|
||||||
|
@$('.sidebar').html App.view('generic/navbar_level2/navbar')(
|
||||||
|
groups: groups
|
||||||
|
className: @configKey
|
||||||
|
selectedItem: selectedItem
|
||||||
|
)
|
||||||
|
|
||||||
|
updateNavigation: (force) =>
|
||||||
|
groups = @groupsSorted()
|
||||||
|
selectedItem = @selectedItem(groups)
|
||||||
|
return if !selectedItem
|
||||||
|
return if !force && @lastTarget && selectedItem.target is @lastTarget
|
||||||
|
@lastTarget = selectedItem.target
|
||||||
|
@$('.sidebar li').removeClass('active')
|
||||||
|
@$(".sidebar li a[href=\"#{selectedItem.target}\"]").parent().addClass('active')
|
||||||
|
|
||||||
|
@executeController(selectedItem)
|
||||||
|
|
||||||
|
groupsSorted: =>
|
||||||
|
|
||||||
# get accessable groups
|
# get accessable groups
|
||||||
user = App.User.find(App.Session.get('id'))
|
|
||||||
groups = App.Config.get(@configKey)
|
groups = App.Config.get(@configKey)
|
||||||
groupsUnsorted = []
|
groupsUnsorted = []
|
||||||
for key, item of groups
|
for key, item of groups
|
||||||
|
@ -395,13 +441,15 @@ class App.ControllerNavSidbar extends App.ControllerContent
|
||||||
else
|
else
|
||||||
match = false
|
match = false
|
||||||
for permissionName in item.permission
|
for permissionName in item.permission
|
||||||
if !match && user.permission(permissionName)
|
if !match && @user.permission(permissionName)
|
||||||
match = true
|
match = true
|
||||||
groupsUnsorted.push item
|
groupsUnsorted.push item
|
||||||
@groupsSorted = _.sortBy(groupsUnsorted, (item) -> return item.prio)
|
_.sortBy(groupsUnsorted, (item) -> return item.prio)
|
||||||
|
|
||||||
|
selectedItem: (groups) =>
|
||||||
|
|
||||||
# get items of group
|
# get items of group
|
||||||
for group in @groupsSorted
|
for group in groups
|
||||||
items = App.Config.get(@configKey)
|
items = App.Config.get(@configKey)
|
||||||
itemsUnsorted = []
|
itemsUnsorted = []
|
||||||
for key, item of items
|
for key, item of items
|
||||||
|
@ -412,76 +460,57 @@ class App.ControllerNavSidbar extends App.ControllerContent
|
||||||
else
|
else
|
||||||
match = false
|
match = false
|
||||||
for permissionName in item.permission
|
for permissionName in item.permission
|
||||||
if !match && user && user.permission(permissionName)
|
if !match && @user && @user.permission(permissionName)
|
||||||
match = true
|
match = true
|
||||||
itemsUnsorted.push item
|
itemsUnsorted.push item
|
||||||
|
|
||||||
group.items = _.sortBy(itemsUnsorted, (item) -> return item.prio)
|
group.items = _.sortBy(itemsUnsorted, (item) -> return item.prio)
|
||||||
|
|
||||||
# check last selected item
|
|
||||||
selectedItem = undefined
|
|
||||||
selectedItemMeta = App.Config.get("Runtime::#{@configKey}")
|
|
||||||
keepLastMenuFor = 1000 * 60 * 10
|
|
||||||
if selectedItemMeta && selectedItemMeta.date && new Date < new Date( selectedItemMeta.date.getTime() + keepLastMenuFor )
|
|
||||||
selectedItem = selectedItemMeta.selectedItem
|
|
||||||
|
|
||||||
# set active item
|
# set active item
|
||||||
for group in @groupsSorted
|
selectedItem = undefined
|
||||||
|
for group in groups
|
||||||
if group.items
|
if group.items
|
||||||
for item in group.items
|
for item in group.items
|
||||||
if !@target && !selectedItem
|
if item.target.match("/#{@target}$")
|
||||||
item.active = true
|
|
||||||
selectedItem = item
|
|
||||||
else if @target && item.target is window.location.hash
|
|
||||||
item.active = true
|
|
||||||
selectedItem = item
|
|
||||||
else if @target && window.location.hash.match(item.target)
|
|
||||||
item.active = true
|
item.active = true
|
||||||
selectedItem = item
|
selectedItem = item
|
||||||
else
|
else
|
||||||
item.active = false
|
item.active = false
|
||||||
|
|
||||||
@renderContainer(selectedItem)
|
if !selectedItem
|
||||||
@renderNavBar(selectedItem)
|
for group in groups
|
||||||
|
break if selectedItem
|
||||||
|
if group.items
|
||||||
|
for item in group.items
|
||||||
|
item.active = true
|
||||||
|
selectedItem = item
|
||||||
|
break
|
||||||
|
|
||||||
@bind(
|
selectedItem
|
||||||
'ui:rerender'
|
|
||||||
=>
|
|
||||||
@renderNavBar(selectedItem)
|
|
||||||
)
|
|
||||||
|
|
||||||
renderContainer: =>
|
|
||||||
return if $( ".#{@configKey}" )[0]
|
|
||||||
@html App.view('generic/navbar_level2/index')(
|
|
||||||
className: @configKey
|
|
||||||
)
|
|
||||||
|
|
||||||
renderNavBar: (selectedItem) =>
|
|
||||||
|
|
||||||
# remember latest selected item
|
|
||||||
selectedItemMeta =
|
|
||||||
selectedItem: selectedItem
|
|
||||||
date: new Date
|
|
||||||
App.Config.set("Runtime::#{@configKey}", selectedItemMeta)
|
|
||||||
|
|
||||||
@$('.sidebar').html App.view('generic/navbar_level2/navbar')(
|
|
||||||
groups: @groupsSorted
|
|
||||||
className: @configKey
|
|
||||||
)
|
|
||||||
if selectedItem
|
|
||||||
@$('li').removeClass('active')
|
|
||||||
@$("a[href=\"#{selectedItem.target}\"]").parent().addClass('active')
|
|
||||||
@executeController(selectedItem)
|
|
||||||
|
|
||||||
executeController: (selectedItem) =>
|
executeController: (selectedItem) =>
|
||||||
|
|
||||||
# in case of rerendering
|
if @activeController
|
||||||
if @activeController && @activeController.render
|
@activeController.el.remove()
|
||||||
@activeController.render()
|
@activeController = undefined
|
||||||
return
|
|
||||||
|
|
||||||
@params.el = @$('.main')
|
@$('.main').append('<div>')
|
||||||
@activeController = new selectedItem.controller(@params)
|
@activeController = new selectedItem.controller(
|
||||||
|
el: @$('.main div')
|
||||||
|
)
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
return if @shown
|
||||||
|
return if !position
|
||||||
|
if position.main
|
||||||
|
@$('.main').scrollTop(position.main)
|
||||||
|
if position.main
|
||||||
|
@$('.sidebar').scrollTop(position.sidebar)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
data =
|
||||||
|
main: @$('.main').scrollTop()
|
||||||
|
sidebar: @$('.sidebar').scrollTop()
|
||||||
|
|
||||||
class App.GenericHistory extends App.ControllerModal
|
class App.GenericHistory extends App.ControllerModal
|
||||||
buttonClose: true
|
buttonClose: true
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class App.ChannelChat extends App.ControllerContent
|
class App.ChannelChat extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.channel_chat'
|
requiredPermission: 'admin.channel_chat'
|
||||||
|
header: 'Chat'
|
||||||
events:
|
events:
|
||||||
'change .js-params': 'updateParams'
|
'change .js-params': 'updateParams'
|
||||||
'input .js-params': 'updateParams'
|
'input .js-params': 'updateParams'
|
||||||
|
@ -111,7 +112,6 @@ class App.ChannelChat extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Chat'
|
|
||||||
if @Session.get('email')
|
if @Session.get('email')
|
||||||
@previewUrl = "www.#{@Session.get('email').replace(/^.+?\@/, '')}"
|
@previewUrl = "www.#{@Session.get('email').replace(/^.+?\@/, '')}"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.channel_facebook'
|
requiredPermission: 'admin.channel_facebook'
|
||||||
|
header: 'Facebook'
|
||||||
events:
|
events:
|
||||||
'click .js-new': 'new'
|
'click .js-new': 'new'
|
||||||
'click .js-edit': 'edit'
|
'click .js-edit': 'edit'
|
||||||
|
@ -66,6 +67,11 @@ class Index extends App.ControllerContent
|
||||||
if @channel_id
|
if @channel_id
|
||||||
@edit(undefined, @channel_id)
|
@edit(undefined, @channel_id)
|
||||||
|
|
||||||
|
show: (params) =>
|
||||||
|
for key, value of params
|
||||||
|
if key isnt 'el' && key isnt 'shown' && key isnt 'match'
|
||||||
|
@[key] = value
|
||||||
|
|
||||||
configApp: =>
|
configApp: =>
|
||||||
external_credential = App.ExternalCredential.findByAttribute('name', 'facebook')
|
external_credential = App.ExternalCredential.findByAttribute('name', 'facebook')
|
||||||
contentInline = $(App.view('facebook/app_config')(
|
contentInline = $(App.view('facebook/app_config')(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# coffeelint: disable=no_unnecessary_double_quotes
|
# coffeelint: disable=no_unnecessary_double_quotes
|
||||||
class App.ChannelForm extends App.ControllerContent
|
class App.ChannelForm extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.channel_formular'
|
requiredPermission: 'admin.channel_formular'
|
||||||
|
header: 'Form'
|
||||||
events:
|
events:
|
||||||
'change form.js-params': 'updateParams'
|
'change form.js-params': 'updateParams'
|
||||||
'keyup form.js-params': 'updateParams'
|
'keyup form.js-params': 'updateParams'
|
||||||
|
@ -12,7 +13,6 @@ class App.ChannelForm extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Form'
|
|
||||||
App.Setting.fetchFull(
|
App.Setting.fetchFull(
|
||||||
@render
|
@render
|
||||||
force: false
|
force: false
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.channel_twitter'
|
requiredPermission: 'admin.channel_twitter'
|
||||||
events:
|
events:
|
||||||
'click .js-new': 'new'
|
'click .js-new': 'new'
|
||||||
|
@ -66,6 +66,11 @@ class Index extends App.ControllerContent
|
||||||
if @channel_id
|
if @channel_id
|
||||||
@edit(undefined, @channel_id)
|
@edit(undefined, @channel_id)
|
||||||
|
|
||||||
|
show: (params) =>
|
||||||
|
for key, value of params
|
||||||
|
if key isnt 'el' && key isnt 'shown' && key isnt 'match'
|
||||||
|
@[key] = value
|
||||||
|
|
||||||
configApp: =>
|
configApp: =>
|
||||||
external_credential = App.ExternalCredential.findByAttribute('name', 'twitter')
|
external_credential = App.ExternalCredential.findByAttribute('name', 'twitter')
|
||||||
contentInline = $(App.view('twitter/app_config')(
|
contentInline = $(App.view('twitter/app_config')(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.avatar'
|
requiredPermission: 'user_preferences.avatar'
|
||||||
|
header: 'Avatar'
|
||||||
elements:
|
elements:
|
||||||
'.js-upload': 'fileInput'
|
'.js-upload': 'fileInput'
|
||||||
'.avatar-gallery': 'avatarGallery'
|
'.avatar-gallery': 'avatarGallery'
|
||||||
|
@ -12,7 +13,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Avatar', true
|
|
||||||
@avatars = []
|
@avatars = []
|
||||||
@loadAvatarList()
|
@loadAvatarList()
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class CalendarSubscriptions extends App.ControllerContent
|
class CalendarSubscriptions extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.calendar+ticket.agent'
|
requiredPermission: 'user_preferences.calendar+ticket.agent'
|
||||||
|
header: 'Calendar'
|
||||||
elements:
|
elements:
|
||||||
'input[type=checkbox]': 'options'
|
'input[type=checkbox]': 'options'
|
||||||
'output': 'output'
|
'output': 'output'
|
||||||
|
@ -11,7 +12,6 @@ class CalendarSubscriptions extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Calendar', true
|
|
||||||
|
|
||||||
@translationTable =
|
@translationTable =
|
||||||
new_open: App.i18n.translatePlain('new & open')
|
new_open: App.i18n.translatePlain('new & open')
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.device'
|
requiredPermission: 'user_preferences.device'
|
||||||
|
header: 'Devices'
|
||||||
events:
|
events:
|
||||||
'click [data-type=delete]': 'delete'
|
'click [data-type=delete]': 'delete'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Devices', true
|
|
||||||
@load()
|
@load()
|
||||||
@interval(
|
@interval(
|
||||||
=>
|
=>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.language'
|
requiredPermission: 'user_preferences.language'
|
||||||
|
header: 'Language'
|
||||||
events:
|
events:
|
||||||
'submit form': 'update'
|
'submit form': 'update'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Language', true
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.linked_accounts'
|
requiredPermission: 'user_preferences.linked_accounts'
|
||||||
|
header: 'Linked Accounts'
|
||||||
events:
|
events:
|
||||||
'click .js-remove': 'remove'
|
'click .js-remove': 'remove'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Linked Accounts', true
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.notifications+ticket.agent'
|
requiredPermission: 'user_preferences.notifications+ticket.agent'
|
||||||
|
header: 'Notifications'
|
||||||
events:
|
events:
|
||||||
'submit form': 'update'
|
'submit form': 'update'
|
||||||
'change .js-notificationSound': 'previewSound'
|
'change .js-notificationSound': 'previewSound'
|
||||||
|
@ -45,7 +46,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Notifications', true
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.password'
|
requiredPermission: 'user_preferences.password'
|
||||||
|
header: 'Password'
|
||||||
events:
|
events:
|
||||||
'submit form': 'update'
|
'submit form': 'update'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Password', true
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'user_preferences.access_token'
|
requiredPermission: 'user_preferences.access_token'
|
||||||
|
header: 'Token Access'
|
||||||
events:
|
events:
|
||||||
'click .js-delete': 'delete'
|
'click .js-delete': 'delete'
|
||||||
'click .js-create': 'create'
|
'click .js-create': 'create'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Token Access', true
|
|
||||||
|
|
||||||
@load()
|
@load()
|
||||||
@interval(
|
@interval(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.api'
|
requiredPermission: 'admin.api'
|
||||||
|
header: 'API'
|
||||||
events:
|
events:
|
||||||
'click .action': 'action'
|
'click .action': 'action'
|
||||||
'change .js-TokenAccess input': 'toggleTokenAccess'
|
'change .js-TokenAccess input': 'toggleTokenAccess'
|
||||||
|
@ -12,9 +13,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@title 'API', true
|
|
||||||
|
|
||||||
App.Setting.fetchFull(
|
App.Setting.fetchFull(
|
||||||
@render
|
@render
|
||||||
force: false
|
force: false
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.calendar'
|
requiredPermission: 'admin.calendar'
|
||||||
|
header: 'Calendars'
|
||||||
events:
|
events:
|
||||||
'click .js-new': 'new'
|
'click .js-new': 'new'
|
||||||
'click .js-edit': 'edit'
|
'click .js-edit': 'edit'
|
||||||
|
@ -73,7 +74,7 @@ class Index extends App.ControllerContent
|
||||||
new: =>
|
new: =>
|
||||||
new App.ControllerGenericNew(
|
new App.ControllerGenericNew(
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Calendars'
|
title: @header
|
||||||
object: 'Calendar'
|
object: 'Calendar'
|
||||||
objects: 'Calendars'
|
objects: 'Calendars'
|
||||||
genericObject: 'Calendar'
|
genericObject: 'Calendar'
|
||||||
|
@ -87,7 +88,7 @@ class Index extends App.ControllerContent
|
||||||
new App.ControllerGenericEdit(
|
new App.ControllerGenericEdit(
|
||||||
id: id
|
id: id
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Calendars'
|
title: @header
|
||||||
object: 'Calendar'
|
object: 'Calendar'
|
||||||
objects: 'Calendars'
|
objects: 'Calendars'
|
||||||
genericObject: 'Calendar'
|
genericObject: 'Calendar'
|
||||||
|
|
|
@ -318,6 +318,12 @@ class App.CustomerChat extends App.Controller
|
||||||
@clearDelay(@idleTimeoutId)
|
@clearDelay(@idleTimeoutId)
|
||||||
@idleTimeoutId = undefined
|
@idleTimeoutId = undefined
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.main').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
@$('.main').scrollTop()
|
||||||
|
|
||||||
class CustomerChatRouter extends App.ControllerPermanent
|
class CustomerChatRouter extends App.ControllerPermanent
|
||||||
requiredPermission: 'chat.agent'
|
requiredPermission: 'chat.agent'
|
||||||
constructor: (params) ->
|
constructor: (params) ->
|
||||||
|
|
|
@ -58,6 +58,14 @@ class App.CTI extends App.Controller
|
||||||
'cti_rerender'
|
'cti_rerender'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# after a new websocket connection, load again
|
||||||
|
@bind('spool:sent', =>
|
||||||
|
if @initSpoolSent
|
||||||
|
@load()
|
||||||
|
return
|
||||||
|
@initSpoolSent = true
|
||||||
|
)
|
||||||
|
|
||||||
# fetch data, render view
|
# fetch data, render view
|
||||||
load: ->
|
load: ->
|
||||||
@ajax(
|
@ajax(
|
||||||
|
@ -191,6 +199,12 @@ class App.CTI extends App.Controller
|
||||||
processData: true
|
processData: true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.main').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
@$('.main').scrollTop()
|
||||||
|
|
||||||
class CTIRouter extends App.ControllerPermanent
|
class CTIRouter extends App.ControllerPermanent
|
||||||
requiredPermission: 'cti.agent'
|
requiredPermission: 'cti.agent'
|
||||||
constructor: (params) ->
|
constructor: (params) ->
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.group'
|
requiredPermission: 'admin.group'
|
||||||
|
header: 'Groups'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'Group'
|
genericObject: 'Group'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Groups'
|
|
||||||
home: 'groups'
|
home: 'groups'
|
||||||
object: 'Group'
|
object: 'Group'
|
||||||
objects: 'Groups'
|
objects: 'Groups'
|
||||||
|
|
|
@ -1,37 +1,57 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.integration'
|
requiredPermission: 'admin.integration'
|
||||||
|
header: 'Integrations'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@title 'Integrations', true
|
|
||||||
|
|
||||||
@integrationItems = App.Config.get('NavBarIntegrations')
|
@integrationItems = App.Config.get('NavBarIntegrations')
|
||||||
|
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
||||||
|
|
||||||
|
show: (params) =>
|
||||||
|
return if !params.target && !params.integration if @initRender
|
||||||
|
|
||||||
|
@target = params.target
|
||||||
|
@integration = params.integration
|
||||||
|
if !@initRender
|
||||||
|
@requestedIntegration = true
|
||||||
|
return
|
||||||
|
|
||||||
if !@integration
|
if !@integration
|
||||||
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
if !params.noRender
|
||||||
|
@render()
|
||||||
return
|
return
|
||||||
|
|
||||||
for key, value of @integrationItems
|
for key, value of @integrationItems
|
||||||
if value.target is "#system/#{@target}/#{@integration}"
|
if value.target is "#system/#{params.target}/#{params.integration}"
|
||||||
config = value
|
config = value
|
||||||
break
|
break
|
||||||
|
|
||||||
new config.controller(
|
new config.controller(
|
||||||
el: @el.closest('.main')
|
el: @el
|
||||||
)
|
)
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
return if @initRender && @integration
|
||||||
|
|
||||||
|
@initRender = true
|
||||||
integrations = []
|
integrations = []
|
||||||
for key, value of @integrationItems
|
for key, value of @integrationItems
|
||||||
value.key = key
|
value.key = key
|
||||||
integrations.push value
|
integrations.push value
|
||||||
integrations = _.sortBy(integrations, (item) -> return item.name)
|
integrations = _.sortBy(integrations, (item) -> return item.name)
|
||||||
|
|
||||||
@html App.view('integration/index')(
|
@html App.view('integration/index')(
|
||||||
head: 'Integrations'
|
head: 'Integrations'
|
||||||
integrations: integrations
|
integrations: integrations
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return if !@requestedIntegration
|
||||||
|
@show(
|
||||||
|
target: @target
|
||||||
|
integration: @integration
|
||||||
|
noRender: true
|
||||||
|
)
|
||||||
|
@requestedIntegration = undefined
|
||||||
|
|
||||||
release: =>
|
release: =>
|
||||||
if @subscribeId
|
if @subscribeId
|
||||||
App.Setting.unsubscribe(@subscribeId)
|
App.Setting.unsubscribe(@subscribeId)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.scheduler'
|
requiredPermission: 'admin.scheduler'
|
||||||
|
header: 'Scheduler'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -9,7 +10,6 @@ class Index extends App.ControllerContent
|
||||||
genericObject: 'Job'
|
genericObject: 'Job'
|
||||||
defaultSortBy: 'name'
|
defaultSortBy: 'name'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Scheduler'
|
|
||||||
home: 'Jobs'
|
home: 'Jobs'
|
||||||
object: 'Scheduler'
|
object: 'Scheduler'
|
||||||
objects: 'Schedulers'
|
objects: 'Schedulers'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.macro'
|
requiredPermission: 'admin.macro'
|
||||||
|
header: 'Macros'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'Macro'
|
genericObject: 'Macro'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Macros'
|
|
||||||
home: 'macros'
|
home: 'macros'
|
||||||
object: 'Macro'
|
object: 'Macro'
|
||||||
objects: 'Macros'
|
objects: 'Macros'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.maintenance'
|
requiredPermission: 'admin.maintenance'
|
||||||
|
header: 'Maintenance'
|
||||||
events:
|
events:
|
||||||
'change .js-modeSetting input': 'setMode'
|
'change .js-modeSetting input': 'setMode'
|
||||||
'change .js-loginSetting input': 'setLogin'
|
'change .js-loginSetting input': 'setLogin'
|
||||||
|
@ -12,9 +13,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@title 'Maintenance', true
|
|
||||||
|
|
||||||
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
||||||
|
|
||||||
release: =>
|
release: =>
|
||||||
|
|
|
@ -1,14 +1,31 @@
|
||||||
class IndexRouter extends App.ControllerNavSidbar
|
class App.Manage extends App.ControllerNavSidbar
|
||||||
authenticateRequired: true
|
authenticateRequired: true
|
||||||
configKey: 'NavBarAdmin'
|
configKey: 'NavBarAdmin'
|
||||||
|
|
||||||
App.Config.set('manage', IndexRouter, 'Routes')
|
class ManageRouter extends App.ControllerPermanent
|
||||||
App.Config.set('manage/:target', IndexRouter, 'Routes')
|
requiredPermission: ['admin.*']
|
||||||
App.Config.set('settings/:target', IndexRouter, 'Routes')
|
|
||||||
App.Config.set('channels/:target', IndexRouter, 'Routes')
|
constructor: (params) ->
|
||||||
App.Config.set('channels/:target/:channel_id', IndexRouter, 'Routes')
|
super
|
||||||
App.Config.set('system/:target', IndexRouter, 'Routes')
|
|
||||||
App.Config.set('system/:target/:integration', IndexRouter, 'Routes')
|
# check authentication
|
||||||
|
@authenticateCheckRedirect()
|
||||||
|
|
||||||
|
App.TaskManager.execute(
|
||||||
|
key: 'Manage'
|
||||||
|
controller: 'Manage'
|
||||||
|
params: params
|
||||||
|
show: true
|
||||||
|
persistent: true
|
||||||
|
)
|
||||||
|
|
||||||
|
App.Config.set('manage', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('manage/:target', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('settings/:target', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('channels/:target', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('channels/:target/:channel_id', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('system/:target', ManageRouter, 'Routes')
|
||||||
|
App.Config.set('system/:target/:integration', ManageRouter, 'Routes')
|
||||||
|
|
||||||
App.Config.set('Manage', { prio: 1000, name: 'Manage', target: '#manage', permission: ['admin.*'] }, 'NavBarAdmin')
|
App.Config.set('Manage', { prio: 1000, name: 'Manage', target: '#manage', permission: ['admin.*'] }, 'NavBarAdmin')
|
||||||
App.Config.set('Channels', { prio: 2500, name: 'Channels', target: '#channels', permission: ['admin.*'] }, 'NavBarAdmin')
|
App.Config.set('Channels', { prio: 2500, name: 'Channels', target: '#channels', permission: ['admin.*'] }, 'NavBarAdmin')
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
# coffeelint: disable=duplicate_key
|
# coffeelint: disable=duplicate_key
|
||||||
class Index extends App.ControllerTabs
|
class Index extends App.ControllerTabs
|
||||||
requiredPermission: 'admin.object'
|
requiredPermission: 'admin.object'
|
||||||
header: 'Object Manager'
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@title 'Objects', true
|
|
||||||
|
|
||||||
# get data
|
# get data
|
||||||
@startLoading()
|
@startLoading()
|
||||||
@ajax(
|
@ajax(
|
||||||
|
@ -32,7 +29,8 @@ class Index extends App.ControllerTabs
|
||||||
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
class Items extends App.ControllerContent
|
class Items extends App.ControllerSubContent
|
||||||
|
header: 'Object Manager'
|
||||||
events:
|
events:
|
||||||
'click .js-delete': 'destroy'
|
'click .js-delete': 'destroy'
|
||||||
'click .js-new': 'new'
|
'click .js-new': 'new'
|
||||||
|
|
|
@ -62,6 +62,12 @@ class App.OrganizationProfile extends App.Controller
|
||||||
genericObject: organization
|
genericObject: organization
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.profile').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
@$('.profile').scrollTop()
|
||||||
|
|
||||||
class ActionRow extends App.ObserverController
|
class ActionRow extends App.ObserverController
|
||||||
model: 'Organization'
|
model: 'Organization'
|
||||||
observe:
|
observe:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.organization'
|
requiredPermission: 'admin.organization'
|
||||||
|
header: 'Organizations'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'Organization'
|
genericObject: 'Organization'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Organizations'
|
|
||||||
home: 'organizations'
|
home: 'organizations'
|
||||||
object: 'Organization'
|
object: 'Organization'
|
||||||
objects: 'Organizations'
|
objects: 'Organizations'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.overview'
|
requiredPermission: 'admin.overview'
|
||||||
|
header: 'Overviews'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -10,7 +11,6 @@ class Index extends App.ControllerContent
|
||||||
defaultSortBy: 'prio'
|
defaultSortBy: 'prio'
|
||||||
#groupBy: 'role'
|
#groupBy: 'role'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Overviews'
|
|
||||||
home: 'overviews'
|
home: 'overviews'
|
||||||
object: 'Overview'
|
object: 'Overview'
|
||||||
objects: 'Overviews'
|
objects: 'Overviews'
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.package'
|
requiredPermission: 'admin.package'
|
||||||
|
header: 'Packages'
|
||||||
events:
|
events:
|
||||||
'click .action': 'action'
|
'click .action': 'action'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Packages', true
|
|
||||||
@load()
|
@load()
|
||||||
|
|
||||||
load: ->
|
load: ->
|
||||||
|
|
|
@ -1,9 +1,28 @@
|
||||||
class Index extends App.ControllerNavSidbar
|
class App.Profile extends App.ControllerNavSidbar
|
||||||
authenticateRequired: true
|
authenticateRequired: true
|
||||||
configKey: 'NavBarProfile'
|
configKey: 'NavBarProfile'
|
||||||
|
|
||||||
App.Config.set('profile', Index, 'Routes')
|
class ProfileRouter extends App.ControllerPermanent
|
||||||
App.Config.set('profile/:target', Index, 'Routes')
|
requiredPermission: ['user_preferences.*']
|
||||||
|
|
||||||
|
constructor: (params) ->
|
||||||
|
super
|
||||||
|
|
||||||
|
# check authentication
|
||||||
|
@authenticateCheckRedirect()
|
||||||
|
|
||||||
|
App.TaskManager.execute(
|
||||||
|
key: 'Profile'
|
||||||
|
controller: 'Profile'
|
||||||
|
params: params
|
||||||
|
show: true
|
||||||
|
persistent: true
|
||||||
|
)
|
||||||
|
|
||||||
|
App.Config.set('profile', ProfileRouter, 'Routes')
|
||||||
|
App.Config.set('profile/:target', ProfileRouter, 'Routes')
|
||||||
|
|
||||||
|
App.Config.set('Profile', { controller: 'Profile', permission: ['user_preferences.*'] }, 'permanentTask')
|
||||||
|
|
||||||
App.Config.set('Profile', { prio: 1000, name: 'Profile', target: '#profile' }, 'NavBarProfile')
|
App.Config.set('Profile', { prio: 1000, name: 'Profile', target: '#profile' }, 'NavBarProfile')
|
||||||
App.Config.set('Profile', { prio: 1700, parent: '#current_user', name: 'Profile', target: '#profile', translate: true }, 'NavBarRight')
|
App.Config.set('Profile', { prio: 1700, parent: '#current_user', name: 'Profile', target: '#profile', translate: true }, 'NavBarRight')
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.report_profile'
|
requiredPermission: 'admin.report_profile'
|
||||||
|
header: 'Report Profile'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'ReportProfile'
|
genericObject: 'ReportProfile'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Report Profile'
|
|
||||||
home: 'report_profiles'
|
home: 'report_profiles'
|
||||||
object: 'Report Profile'
|
object: 'Report Profile'
|
||||||
objects: 'Report Profiles'
|
objects: 'Report Profiles'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.role'
|
requiredPermission: 'admin.role'
|
||||||
|
header: 'Roles'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'Role'
|
genericObject: 'Role'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Roles'
|
|
||||||
home: 'roles'
|
home: 'roles'
|
||||||
object: 'Role'
|
object: 'Role'
|
||||||
objects: 'Roles'
|
objects: 'Roles'
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.session'
|
requiredPermission: 'admin.session'
|
||||||
|
header: 'Sessions'
|
||||||
events:
|
events:
|
||||||
'click .js-delete': 'destroy'
|
'click .js-delete': 'destroy'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Sessions', true
|
|
||||||
@load()
|
@load()
|
||||||
@interval(
|
@interval(
|
||||||
=>
|
=>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.sla'
|
requiredPermission: 'admin.sla'
|
||||||
|
header: 'SLAs'
|
||||||
events:
|
events:
|
||||||
'click .js-new': 'new'
|
'click .js-new': 'new'
|
||||||
'click .js-edit': 'edit'
|
'click .js-edit': 'edit'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.tag'
|
requiredPermission: 'admin.tag'
|
||||||
|
header: 'Tags'
|
||||||
events:
|
events:
|
||||||
'change .js-newTagSetting input': 'setTagNew'
|
'change .js-newTagSetting input': 'setTagNew'
|
||||||
'submit .js-create': 'create'
|
'submit .js-create': 'create'
|
||||||
|
@ -9,7 +10,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
@title 'Tags', true
|
|
||||||
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
@subscribeId = App.Setting.subscribe(@render, initFetch: true, clear: false)
|
||||||
|
|
||||||
release: =>
|
release: =>
|
||||||
|
@ -27,7 +27,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
setTagNew: (e) =>
|
setTagNew: (e) =>
|
||||||
value = @tagNewSetting.prop('checked')
|
value = @tagNewSetting.prop('checked')
|
||||||
console.log('aa', value)
|
|
||||||
App.Setting.set('tag_new', value)
|
App.Setting.set('tag_new', value)
|
||||||
|
|
||||||
create: (e) =>
|
create: (e) =>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.text_module'
|
requiredPermission: 'admin.text_module'
|
||||||
|
header: 'TextModules'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -8,7 +9,6 @@ class Index extends App.ControllerContent
|
||||||
id: @id
|
id: @id
|
||||||
genericObject: 'TextModule'
|
genericObject: 'TextModule'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'TextModules'
|
|
||||||
home: 'text_modules'
|
home: 'text_modules'
|
||||||
object: 'TextModule'
|
object: 'TextModule'
|
||||||
objects: 'TextModules'
|
objects: 'TextModules'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class App.TicketOverview extends App.Controller
|
class App.TicketOverview extends App.Controller
|
||||||
className: 'overviews'
|
className: 'overviews'
|
||||||
|
activeFocus: 'nav'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
@ -18,12 +19,22 @@ class App.TicketOverview extends App.Controller
|
||||||
view: @view
|
view: @view
|
||||||
|
|
||||||
@contentController = new Table
|
@contentController = new Table
|
||||||
el: elLocal.find('.overview-table')
|
el: elLocal.find('.overview-table')
|
||||||
view: @view
|
view: @view
|
||||||
|
keyboardOn: @keyboardOn
|
||||||
|
keyboardOff: @keyboardOff
|
||||||
|
|
||||||
@html elLocal
|
@html elLocal
|
||||||
|
|
||||||
|
@el.find('.main').on('click', =>
|
||||||
|
@activeFocus = 'overview'
|
||||||
|
)
|
||||||
|
@el.find('.sidebar').on('click', =>
|
||||||
|
@activeFocus = 'nav'
|
||||||
|
)
|
||||||
|
|
||||||
@bind 'overview:fetch', =>
|
@bind 'overview:fetch', =>
|
||||||
|
return if !@view
|
||||||
update = =>
|
update = =>
|
||||||
App.OverviewListCollection.fetch(@view)
|
App.OverviewListCollection.fetch(@view)
|
||||||
@delay(update, 2800, 'overview:fetch')
|
@delay(update, 2800, 'overview:fetch')
|
||||||
|
@ -36,6 +47,7 @@ class App.TicketOverview extends App.Controller
|
||||||
"#ticket/view/#{@view}"
|
"#ticket/view/#{@view}"
|
||||||
|
|
||||||
show: (params) =>
|
show: (params) =>
|
||||||
|
@keyboardOn()
|
||||||
|
|
||||||
# highlight navbar
|
# highlight navbar
|
||||||
@navupdate '#ticket/view'
|
@navupdate '#ticket/view'
|
||||||
|
@ -70,16 +82,109 @@ class App.TicketOverview extends App.Controller
|
||||||
)
|
)
|
||||||
|
|
||||||
hide: =>
|
hide: =>
|
||||||
|
@keyboardOff()
|
||||||
|
|
||||||
if @navBarController
|
if @navBarController
|
||||||
@navBarController.active(false)
|
@navBarController.active(false)
|
||||||
if @navBarControllerVertical
|
if @navBarControllerVertical
|
||||||
@navBarControllerVertical.active(false)
|
@navBarControllerVertical.active(false)
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.main').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
@$('.main').scrollTop()
|
||||||
|
|
||||||
changed: ->
|
changed: ->
|
||||||
false
|
false
|
||||||
|
|
||||||
release: ->
|
release: ->
|
||||||
# no
|
@keyboardOff()
|
||||||
|
super
|
||||||
|
|
||||||
|
keyboardOn: =>
|
||||||
|
$(window).off 'keydown.overview_navigation'
|
||||||
|
$(window).on 'keydown.overview_navigation', @listNavigate
|
||||||
|
|
||||||
|
keyboardOff: ->
|
||||||
|
$(window).off 'keydown.overview_navigation'
|
||||||
|
|
||||||
|
listNavigate: (e) =>
|
||||||
|
if e.keyCode is 38 # up
|
||||||
|
e.preventDefault()
|
||||||
|
@nudge(e, -1)
|
||||||
|
return
|
||||||
|
else if e.keyCode is 40 # down
|
||||||
|
e.preventDefault()
|
||||||
|
@nudge(e, 1)
|
||||||
|
return
|
||||||
|
else if e.keyCode is 32 # space
|
||||||
|
e.preventDefault()
|
||||||
|
if @activeFocus is 'overview'
|
||||||
|
@$('.table-overview table tbody tr.is-hover td.js-checkbox-field label input').first().click()
|
||||||
|
else if e.keyCode is 9 # tab
|
||||||
|
e.preventDefault()
|
||||||
|
if @activeFocus is 'nav'
|
||||||
|
@activeFocus = 'overview'
|
||||||
|
@nudge(e, 1)
|
||||||
|
else
|
||||||
|
@activeFocus = 'nav'
|
||||||
|
else if e.keyCode is 13 # enter
|
||||||
|
if @activeFocus is 'overview'
|
||||||
|
location = @$('.table-overview table tbody tr.is-hover a').first().attr('href')
|
||||||
|
if location
|
||||||
|
@navigate location
|
||||||
|
|
||||||
|
nudge: (e, position) ->
|
||||||
|
|
||||||
|
if @activeFocus is 'overview'
|
||||||
|
items = @$('.table-overview table tbody')
|
||||||
|
current = items.find('tr.is-hover')
|
||||||
|
|
||||||
|
if !current.size()
|
||||||
|
items.find('tr').first().addClass('is-hover')
|
||||||
|
return
|
||||||
|
|
||||||
|
if position is 1
|
||||||
|
next = current.next('tr')
|
||||||
|
if next.size()
|
||||||
|
current.removeClass('is-hover')
|
||||||
|
next.addClass('is-hover')
|
||||||
|
else
|
||||||
|
prev = current.prev('tr')
|
||||||
|
if prev.size()
|
||||||
|
current.removeClass('is-hover')
|
||||||
|
prev.addClass('is-hover')
|
||||||
|
|
||||||
|
if next
|
||||||
|
@scrollToIfNeeded(next, true)
|
||||||
|
if prev
|
||||||
|
@scrollToIfNeeded(prev, true)
|
||||||
|
|
||||||
|
else
|
||||||
|
# get current
|
||||||
|
items = @$('.sidebar')
|
||||||
|
current = items.find('li.active')
|
||||||
|
|
||||||
|
if !current.size()
|
||||||
|
location = items.find('li a').first().attr('href')
|
||||||
|
if location
|
||||||
|
@navigate location
|
||||||
|
return
|
||||||
|
|
||||||
|
if position is 1
|
||||||
|
next = current.next('li')
|
||||||
|
if next.size()
|
||||||
|
@navigate next.find('a').attr('href')
|
||||||
|
else
|
||||||
|
prev = current.prev('li')
|
||||||
|
if prev.size()
|
||||||
|
@navigate prev.find('a').attr('href')
|
||||||
|
|
||||||
|
if next
|
||||||
|
@scrollToIfNeeded(next, true)
|
||||||
|
if prev
|
||||||
|
@scrollToIfNeeded(prev, true)
|
||||||
|
|
||||||
class Navbar extends App.Controller
|
class Navbar extends App.Controller
|
||||||
elements:
|
elements:
|
||||||
|
@ -204,6 +309,7 @@ class Table extends App.Controller
|
||||||
# rerender view, e. g. on langauge change
|
# rerender view, e. g. on langauge change
|
||||||
@bind 'ui:rerender', =>
|
@bind 'ui:rerender', =>
|
||||||
return if !@authenticateCheck()
|
return if !@authenticateCheck()
|
||||||
|
return if !@view
|
||||||
@render(App.OverviewListCollection.get(@view))
|
@render(App.OverviewListCollection.get(@view))
|
||||||
|
|
||||||
release: =>
|
release: =>
|
||||||
|
@ -380,7 +486,7 @@ class Table extends App.Controller
|
||||||
[ callbackLinkToTicket, callbackTicketTitleAdd ]
|
[ callbackLinkToTicket, callbackTicketTitleAdd ]
|
||||||
bindCheckbox:
|
bindCheckbox:
|
||||||
events:
|
events:
|
||||||
'click': callbackCheckbox
|
'click': callbackCheckbox
|
||||||
)
|
)
|
||||||
|
|
||||||
@setSelected(@selected)
|
@setSelected(@selected)
|
||||||
|
@ -440,10 +546,12 @@ class Table extends App.Controller
|
||||||
|
|
||||||
settings: (e) =>
|
settings: (e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
@keyboardOff()
|
||||||
new App.OverviewSettings(
|
new App.OverviewSettings(
|
||||||
overview_id: @overview.id
|
overview_id: @overview.id
|
||||||
view_mode: @view_mode
|
view_mode: @view_mode
|
||||||
container: @el.closest('.content')
|
container: @el.closest('.content')
|
||||||
|
onCloseCallback: @keyboardOn
|
||||||
)
|
)
|
||||||
|
|
||||||
class BulkForm extends App.Controller
|
class BulkForm extends App.Controller
|
||||||
|
@ -735,6 +843,10 @@ class App.OverviewSettings extends App.ControllerModal
|
||||||
)
|
)
|
||||||
controller.form
|
controller.form
|
||||||
|
|
||||||
|
onClose: =>
|
||||||
|
if @onCloseCallback
|
||||||
|
@onCloseCallback()
|
||||||
|
|
||||||
onSubmit: (e) =>
|
onSubmit: (e) =>
|
||||||
params = @formParam(e.target)
|
params = @formParam(e.target)
|
||||||
|
|
||||||
|
|
|
@ -84,46 +84,10 @@ class App.TicketZoom extends App.Controller
|
||||||
processData: true
|
processData: true
|
||||||
queue: true
|
queue: true
|
||||||
success: (data, status, xhr) =>
|
success: (data, status, xhr) =>
|
||||||
console.log('fetched', ignoreSame)
|
@load(data, ignoreSame)
|
||||||
|
|
||||||
# check if ticket has changed
|
|
||||||
newTicketRaw = data.assets.Ticket[@ticket_id]
|
|
||||||
console.log(newTicketRaw.updated_at)
|
|
||||||
console.log(@ticketUpdatedAtLastCall)
|
|
||||||
|
|
||||||
if @ticketUpdatedAtLastCall
|
|
||||||
|
|
||||||
# ignore if record is already shown
|
|
||||||
if ignoreSame && new Date(newTicketRaw.updated_at).getTime() is new Date(@ticketUpdatedAtLastCall).getTime()
|
|
||||||
console.log('debug no fetched, current ticket already there or requested')
|
|
||||||
return
|
|
||||||
|
|
||||||
# do not render if newer ticket is already requested
|
|
||||||
if new Date(newTicketRaw.updated_at).getTime() < new Date(@ticketUpdatedAtLastCall).getTime()
|
|
||||||
console.log('fetched no fetch, current ticket already newer')
|
|
||||||
return
|
|
||||||
|
|
||||||
# remember current record if newer as requested record
|
|
||||||
if new Date(newTicketRaw.updated_at).getTime() > new Date(@ticketUpdatedAtLastCall).getTime()
|
|
||||||
@ticketUpdatedAtLastCall = newTicketRaw.updated_at
|
|
||||||
else
|
|
||||||
@ticketUpdatedAtLastCall = newTicketRaw.updated_at
|
|
||||||
|
|
||||||
# notify if ticket changed not by my self
|
|
||||||
if @initFetched
|
|
||||||
if newTicketRaw.updated_by_id isnt @Session.get('id')
|
|
||||||
App.TaskManager.notify(@task_key)
|
|
||||||
@initFetched = true
|
|
||||||
|
|
||||||
@load(data)
|
|
||||||
App.SessionStorage.set(@key, data)
|
App.SessionStorage.set(@key, data)
|
||||||
|
|
||||||
if !@doNotLog
|
|
||||||
@doNotLog = 1
|
|
||||||
@recentView('Ticket', @ticket_id)
|
|
||||||
|
|
||||||
error: (xhr) =>
|
error: (xhr) =>
|
||||||
|
|
||||||
statusText = xhr.statusText
|
statusText = xhr.statusText
|
||||||
status = xhr.status
|
status = xhr.status
|
||||||
detail = xhr.responseText
|
detail = xhr.responseText
|
||||||
|
@ -160,7 +124,40 @@ class App.TicketZoom extends App.Controller
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
load: (data) =>
|
load: (data, ignoreSame = false, local = false) =>
|
||||||
|
|
||||||
|
# check if ticket has changed
|
||||||
|
newTicketRaw = data.assets.Ticket[@ticket_id]
|
||||||
|
console.log(newTicketRaw.updated_at)
|
||||||
|
console.log(@ticketUpdatedAtLastCall)
|
||||||
|
|
||||||
|
if @ticketUpdatedAtLastCall
|
||||||
|
|
||||||
|
# ignore if record is already shown
|
||||||
|
if ignoreSame && new Date(newTicketRaw.updated_at).getTime() is new Date(@ticketUpdatedAtLastCall).getTime()
|
||||||
|
console.log('debug no fetched, current ticket already there or requested')
|
||||||
|
return
|
||||||
|
|
||||||
|
# do not render if newer ticket is already requested
|
||||||
|
if new Date(newTicketRaw.updated_at).getTime() < new Date(@ticketUpdatedAtLastCall).getTime()
|
||||||
|
console.log('fetched no fetch, current ticket already newer')
|
||||||
|
return
|
||||||
|
|
||||||
|
# remember current record if newer as requested record
|
||||||
|
if new Date(newTicketRaw.updated_at).getTime() > new Date(@ticketUpdatedAtLastCall).getTime()
|
||||||
|
@ticketUpdatedAtLastCall = newTicketRaw.updated_at
|
||||||
|
else
|
||||||
|
@ticketUpdatedAtLastCall = newTicketRaw.updated_at
|
||||||
|
|
||||||
|
# notify if ticket changed not by my self
|
||||||
|
if @initFetched
|
||||||
|
if newTicketRaw.updated_by_id isnt @Session.get('id')
|
||||||
|
App.TaskManager.notify(@task_key)
|
||||||
|
@initFetched = true
|
||||||
|
|
||||||
|
if !@doNotLog
|
||||||
|
@doNotLog = 1
|
||||||
|
@recentView('Ticket', @ticket_id)
|
||||||
|
|
||||||
# remember article ids
|
# remember article ids
|
||||||
@ticket_article_ids = data.ticket_article_ids
|
@ticket_article_ids = data.ticket_article_ids
|
||||||
|
@ -182,7 +179,7 @@ class App.TicketZoom extends App.Controller
|
||||||
@ticket.article = undefined
|
@ticket.article = undefined
|
||||||
|
|
||||||
# render page
|
# render page
|
||||||
@render()
|
@render(local)
|
||||||
|
|
||||||
meta: =>
|
meta: =>
|
||||||
|
|
||||||
|
@ -217,39 +214,69 @@ class App.TicketZoom extends App.Controller
|
||||||
# set all notifications to seen
|
# set all notifications to seen
|
||||||
App.OnlineNotification.seen('Ticket', @ticket_id)
|
App.OnlineNotification.seen('Ticket', @ticket_id)
|
||||||
|
|
||||||
scrollToPosition = (position, delay) =>
|
|
||||||
scrollToDelay = =>
|
|
||||||
if position is 'article'
|
|
||||||
@scrollToArticle(@last_article_id)
|
|
||||||
return
|
|
||||||
@scrollToBottom()
|
|
||||||
@delay(scrollToDelay, delay, 'scrollToPosition')
|
|
||||||
|
|
||||||
# scroll to article if given
|
|
||||||
if params.article_id && params.article_id isnt @last_article_id
|
|
||||||
@last_article_id = params.article_id
|
|
||||||
scrollToPosition('article', 300)
|
|
||||||
|
|
||||||
# if controller is executed twice, go to latest article (e. g. click on notification)
|
# if controller is executed twice, go to latest article (e. g. click on notification)
|
||||||
if @activeState
|
if @activeState
|
||||||
scrollToPosition('bottom', 300)
|
if @ticket_article_ids
|
||||||
return
|
@shown = false
|
||||||
@activeState = true
|
@activeState = true
|
||||||
|
@pagePosition(params)
|
||||||
# if ticket is shown the first time
|
|
||||||
if !@shown
|
|
||||||
@shown = true
|
|
||||||
|
|
||||||
# trigger shown to article
|
|
||||||
App.Event.trigger('ui::ticket::shown', { ticket_id: @ticket_id })
|
|
||||||
|
|
||||||
# scroll to end of page
|
|
||||||
scrollToPosition('bottom', 100)
|
|
||||||
|
|
||||||
@positionPageHeaderStart()
|
@positionPageHeaderStart()
|
||||||
@autosaveStart()
|
@autosaveStart()
|
||||||
@shortcutNavigationStart()
|
@shortcutNavigationStart()
|
||||||
|
|
||||||
|
pagePosition: (params = {}) =>
|
||||||
|
|
||||||
|
# remember for later
|
||||||
|
return if params.type is 'init' && !@shown
|
||||||
|
|
||||||
|
if params.article_id
|
||||||
|
article_id = params.article_id
|
||||||
|
params.article_id = undefined
|
||||||
|
else if @pagePositionData
|
||||||
|
article_id = @pagePositionData
|
||||||
|
@pagePositionData = undefined
|
||||||
|
|
||||||
|
# scroll to article if given
|
||||||
|
scrollToPosition = (position, delay) =>
|
||||||
|
scrollToDelay = =>
|
||||||
|
if position is 'article'
|
||||||
|
@scrollToArticle(article_id)
|
||||||
|
@positionPageHeaderUpdate()
|
||||||
|
return
|
||||||
|
@scrollToBottom()
|
||||||
|
@positionPageHeaderUpdate()
|
||||||
|
@delay(scrollToDelay, delay, 'scrollToPosition')
|
||||||
|
|
||||||
|
# trigger shown to article
|
||||||
|
if !@shown
|
||||||
|
@shown = true
|
||||||
|
App.Event.trigger('ui::ticket::shown', { ticket_id: @ticket_id })
|
||||||
|
scrollToPosition('bottom', 50)
|
||||||
|
return
|
||||||
|
|
||||||
|
# scroll to article if given
|
||||||
|
if article_id && article_id isnt @last_article_id
|
||||||
|
@last_article_id = article_id
|
||||||
|
scrollToPosition('article', 300)
|
||||||
|
return
|
||||||
|
|
||||||
|
# scroll to end if new article has been added
|
||||||
|
if !@last_ticket_article_ids || !_.isEqual(_.sortBy(@last_ticket_article_ids), _.sortBy(@ticket_article_ids))
|
||||||
|
@last_ticket_article_ids = @ticket_article_ids
|
||||||
|
scrollToPosition('bottom', 100)
|
||||||
|
return
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.main').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
element = @$('.main .ticketZoom')
|
||||||
|
offset = element.offset()
|
||||||
|
if offset
|
||||||
|
position = offset.top
|
||||||
|
Math.abs(position)
|
||||||
|
|
||||||
hide: =>
|
hide: =>
|
||||||
@activeState = false
|
@activeState = false
|
||||||
@positionPageHeaderStop()
|
@positionPageHeaderStop()
|
||||||
|
@ -354,7 +381,7 @@ class App.TicketZoom extends App.Controller
|
||||||
|
|
||||||
@scrollHeaderPos = scroll
|
@scrollHeaderPos = scroll
|
||||||
|
|
||||||
render: =>
|
render: (local) =>
|
||||||
|
|
||||||
# update taskbar with new meta data
|
# update taskbar with new meta data
|
||||||
App.TaskManager.touch(@task_key)
|
App.TaskManager.touch(@task_key)
|
||||||
|
@ -458,28 +485,15 @@ class App.TicketZoom extends App.Controller
|
||||||
if @sidebar.linkWidget
|
if @sidebar.linkWidget
|
||||||
@sidebar.linkWidget.reload(@links)
|
@sidebar.linkWidget.reload(@links)
|
||||||
|
|
||||||
if @shown
|
if !@initDone
|
||||||
|
if @article_id
|
||||||
|
@pagePositionData = @article_id
|
||||||
|
@pagePosition(type: 'init')
|
||||||
|
@initDone = true
|
||||||
|
return
|
||||||
|
|
||||||
# scroll to article if given
|
return if local
|
||||||
if @article_id && @article_id isnt @last_article_id
|
@pagePosition(type: 'init')
|
||||||
@last_article_id = @article_id
|
|
||||||
scrollTo = =>
|
|
||||||
@scrollToArticle(@article_id)
|
|
||||||
@delay(scrollTo, 300)
|
|
||||||
|
|
||||||
# scroll to end if new article has been added
|
|
||||||
if !@last_ticket_article_ids || !_.isEqual(_.sortBy(@last_ticket_article_ids), _.sortBy(@ticket_article_ids))
|
|
||||||
@last_ticket_article_ids = @ticket_article_ids
|
|
||||||
@scrollToBottom()
|
|
||||||
@positionPageHeaderUpdate()
|
|
||||||
|
|
||||||
return if @initDone
|
|
||||||
@initDone = true
|
|
||||||
|
|
||||||
# if shown was before init rendering, start actions again
|
|
||||||
return if !@shown
|
|
||||||
@positionPageHeaderStart()
|
|
||||||
App.Event.trigger('ui::ticket::shown', { ticket_id: @ticket_id })
|
|
||||||
|
|
||||||
scrollToArticle: (article_id) =>
|
scrollToArticle: (article_id) =>
|
||||||
articleContainer = document.getElementById("article-#{article_id}")
|
articleContainer = document.getElementById("article-#{article_id}")
|
||||||
|
@ -499,7 +513,9 @@ class App.TicketZoom extends App.Controller
|
||||||
realContentHeight += @$('.ticket-article').height()
|
realContentHeight += @$('.ticket-article').height()
|
||||||
realContentHeight += @$('.article-new').height()
|
realContentHeight += @$('.article-new').height()
|
||||||
viewableContentHeight = @$('.main').height()
|
viewableContentHeight = @$('.main').height()
|
||||||
return if viewableContentHeight > realContentHeight
|
if viewableContentHeight > realContentHeight
|
||||||
|
@main.scrollTop(0)
|
||||||
|
return
|
||||||
@main.scrollTop( @main.prop('scrollHeight') )
|
@main.scrollTop( @main.prop('scrollHeight') )
|
||||||
|
|
||||||
autosaveStop: =>
|
autosaveStop: =>
|
||||||
|
@ -729,12 +745,8 @@ class App.TicketZoom extends App.Controller
|
||||||
processData: true
|
processData: true
|
||||||
success: (data) =>
|
success: (data) =>
|
||||||
|
|
||||||
# remember current data
|
|
||||||
newTicketRaw = data.assets.Ticket[ticket.id]
|
|
||||||
@ticketUpdatedAtLastCall = newTicketRaw.updated_at
|
|
||||||
|
|
||||||
#App.SessionStorage.set(@key, data)
|
#App.SessionStorage.set(@key, data)
|
||||||
@load(data)
|
@load(data, true, true)
|
||||||
|
|
||||||
# reset article - should not be resubmited on next ticket update
|
# reset article - should not be resubmited on next ticket update
|
||||||
ticket.article = undefined
|
ticket.article = undefined
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.translation'
|
requiredPermission: 'admin.translation'
|
||||||
|
header: 'Translations'
|
||||||
events:
|
events:
|
||||||
'click .js-pushChanges': 'pushChanges'
|
'click .js-pushChanges': 'pushChanges'
|
||||||
'click .js-resetChanges': 'resetChanges'
|
'click .js-resetChanges': 'resetChanges'
|
||||||
|
@ -7,8 +8,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
@title 'Translations', true
|
|
||||||
@locale = App.i18n.get()
|
@locale = App.i18n.get()
|
||||||
@render()
|
@render()
|
||||||
@bind('i18n:translation_update_todo', =>
|
@bind('i18n:translation_update_todo', =>
|
||||||
|
@ -80,7 +79,13 @@ class Index extends App.ControllerContent
|
||||||
@toggleAction()
|
@toggleAction()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hide: =>
|
||||||
|
@rerender()
|
||||||
|
|
||||||
release: =>
|
release: =>
|
||||||
|
@rerender()
|
||||||
|
|
||||||
|
rerender: =>
|
||||||
rerender = ->
|
rerender = ->
|
||||||
App.Event.trigger('ui:rerender')
|
App.Event.trigger('ui:rerender')
|
||||||
if @translationList && @translationList.changes()
|
if @translationList && @translationList.changes()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.trigger'
|
requiredPermission: 'admin.trigger'
|
||||||
|
header: 'Triggers'
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -9,7 +10,6 @@ class Index extends App.ControllerContent
|
||||||
genericObject: 'Trigger'
|
genericObject: 'Trigger'
|
||||||
defaultSortBy: 'name'
|
defaultSortBy: 'name'
|
||||||
pageData:
|
pageData:
|
||||||
title: 'Triggers'
|
|
||||||
home: 'triggers'
|
home: 'triggers'
|
||||||
object: 'Trigger'
|
object: 'Trigger'
|
||||||
objects: 'Triggers'
|
objects: 'Triggers'
|
||||||
|
|
|
@ -63,6 +63,12 @@ class App.UserProfile extends App.Controller
|
||||||
genericObject: user
|
genericObject: user
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setPosition: (position) =>
|
||||||
|
@$('.profile').scrollTop(position)
|
||||||
|
|
||||||
|
currentPosition: =>
|
||||||
|
@$('.profile').scrollTop()
|
||||||
|
|
||||||
class ActionRow extends App.ObserverController
|
class ActionRow extends App.ObserverController
|
||||||
model: 'User'
|
model: 'User'
|
||||||
observe:
|
observe:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class Index extends App.ControllerContent
|
class Index extends App.ControllerSubContent
|
||||||
requiredPermission: 'admin.user'
|
requiredPermission: 'admin.user'
|
||||||
|
header: 'Users'
|
||||||
elements:
|
elements:
|
||||||
'.js-search': 'searchInput'
|
'.js-search': 'searchInput'
|
||||||
events:
|
events:
|
||||||
|
@ -7,10 +8,6 @@ class Index extends App.ControllerContent
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
|
||||||
# set title
|
|
||||||
@title 'Users', true
|
|
||||||
|
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
render: ->
|
render: ->
|
||||||
|
|
|
@ -39,7 +39,7 @@ class _Singleton
|
||||||
# view: view
|
# view: view
|
||||||
# )
|
# )
|
||||||
# return
|
# return
|
||||||
|
throw 'No view to fetch list!' if !view
|
||||||
App.OverviewIndexCollection.fetch()
|
App.OverviewIndexCollection.fetch()
|
||||||
return if @fetchActive[view]
|
return if @fetchActive[view]
|
||||||
@fetchActive[view] = true
|
@fetchActive[view] = true
|
||||||
|
|
|
@ -87,6 +87,8 @@ class _taskManagerSingleton extends App.Controller
|
||||||
App.Interval.set(@taskUpdateLoop, 3000, 'check_update_to_server_pending', 'task')
|
App.Interval.set(@taskUpdateLoop, 3000, 'check_update_to_server_pending', 'task')
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
|
@domStore = {}
|
||||||
|
@shownStore = {}
|
||||||
@workers = {}
|
@workers = {}
|
||||||
@allTasksByKey = {}
|
@allTasksByKey = {}
|
||||||
@tasksToUpdate = {}
|
@tasksToUpdate = {}
|
||||||
|
@ -220,13 +222,6 @@ class _taskManagerSingleton extends App.Controller
|
||||||
if params.show
|
if params.show
|
||||||
@el.find('#content').empty()
|
@el.find('#content').empty()
|
||||||
|
|
||||||
# hide all tasks
|
|
||||||
@el.find('.content').addClass('hide').removeClass('active')
|
|
||||||
|
|
||||||
# create div for task if not exists
|
|
||||||
if !@el.find("##{@domID(params.key)}")[0]
|
|
||||||
@el.append("<div id=\"#{@domID(params.key)}\" class=\"content horizontal flex\"></div>")
|
|
||||||
|
|
||||||
# set all tasks to active false, only new/selected one to active
|
# set all tasks to active false, only new/selected one to active
|
||||||
if params.show
|
if params.show
|
||||||
for key, task of @allTasksByKey
|
for key, task of @allTasksByKey
|
||||||
|
@ -252,8 +247,15 @@ class _taskManagerSingleton extends App.Controller
|
||||||
@log 'debug', 'controller start try...', params
|
@log 'debug', 'controller start try...', params
|
||||||
|
|
||||||
# create clean params
|
# create clean params
|
||||||
params_app = _.clone(params.params)
|
params_app = _.clone(params.params)
|
||||||
params_app['el'] = $("##{@domID(params.key)}")
|
domKey = @domID(params.key)
|
||||||
|
domStoreItem = @domStore[domKey]
|
||||||
|
if domStoreItem
|
||||||
|
el = domStoreItem.el
|
||||||
|
else
|
||||||
|
el = $("<div id=\"#{domKey}\" class=\"content horizontal flex\"></div>")
|
||||||
|
@domStore[domKey] = { el: el }
|
||||||
|
params_app['el'] = el
|
||||||
params_app['task_key'] = params.key
|
params_app['task_key'] = params.key
|
||||||
if !params.show
|
if !params.show
|
||||||
params_app['doNotLog'] = 1
|
params_app['doNotLog'] = 1
|
||||||
|
@ -273,34 +275,62 @@ class _taskManagerSingleton extends App.Controller
|
||||||
@tasksAutoCleanupDelay()
|
@tasksAutoCleanupDelay()
|
||||||
|
|
||||||
showControllerHideOthers: (thisKey, params_app) =>
|
showControllerHideOthers: (thisKey, params_app) =>
|
||||||
|
for key of @workers
|
||||||
|
if key isnt thisKey
|
||||||
|
if @shownStore[key] isnt false
|
||||||
|
@hide(key)
|
||||||
|
$('#content').addClass('hide')
|
||||||
|
|
||||||
for key of @workers
|
for key of @workers
|
||||||
if key is thisKey
|
if key is thisKey
|
||||||
@show(key, params_app)
|
@show(key, params_app)
|
||||||
else
|
|
||||||
@hide(key)
|
|
||||||
|
|
||||||
# show task content
|
# show task content
|
||||||
show: (key, params_app) ->
|
show: (key, params_app) =>
|
||||||
@el.find("##{@domID(key)}").removeClass('hide').addClass('active')
|
|
||||||
|
|
||||||
controller = @workers[ key ]
|
controller = @workers[ key ]
|
||||||
return false if !controller
|
@shownStore[key] = true
|
||||||
|
|
||||||
# set controller state to active
|
domKey = @domID(key)
|
||||||
if controller.active && _.isFunction(controller.active)
|
domStoreItem = @domStore[domKey]
|
||||||
controller.active(true)
|
localEl = domStoreItem.el
|
||||||
|
if !@$("##{domKey}").get(0) && localEl
|
||||||
|
@el.append(localEl)
|
||||||
|
@$("##{domKey}").removeClass('hide').addClass('active')
|
||||||
|
|
||||||
# execute controllers show
|
if controller
|
||||||
if controller.show && _.isFunction(controller.show)
|
|
||||||
controller.show(params_app)
|
# set position of view
|
||||||
|
position = @domStore[@domID(key)].position
|
||||||
|
if position
|
||||||
|
controller.setPosition(position)
|
||||||
|
|
||||||
|
# set controller state to active
|
||||||
|
if controller.active && _.isFunction(controller.active)
|
||||||
|
controller.active(true)
|
||||||
|
|
||||||
|
# execute controllers show
|
||||||
|
if controller.show && _.isFunction(controller.show)
|
||||||
|
controller.show(params_app)
|
||||||
|
|
||||||
true
|
true
|
||||||
|
|
||||||
# hide task content
|
# hide task content
|
||||||
hide: (key) ->
|
hide: (key) =>
|
||||||
@el.find("##{@domID(key)}").addClass('hide').removeClass('active')
|
|
||||||
|
|
||||||
controller = @workers[ key ]
|
controller = @workers[ key ]
|
||||||
|
@shownStore[key] = false
|
||||||
|
|
||||||
|
if @$("##{@domID(key)}").get(0)
|
||||||
|
domKey = @domID(key)
|
||||||
|
domStoreItem = @domStore[domKey]
|
||||||
|
|
||||||
|
if controller && _.isFunction(controller.currentPosition)
|
||||||
|
position = controller.currentPosition()
|
||||||
|
domStoreItem.position = position
|
||||||
|
@$("##{@domID(key)}").addClass('hide').removeClass('active')
|
||||||
|
domStoreItem.el = @$("##{@domID(key)}").detach()
|
||||||
|
else
|
||||||
|
@$("##{@domID(key)}").addClass('hide').removeClass('active')
|
||||||
|
|
||||||
return false if !controller
|
return false if !controller
|
||||||
|
|
||||||
# set controller state to active
|
# set controller state to active
|
||||||
|
@ -311,6 +341,8 @@ class _taskManagerSingleton extends App.Controller
|
||||||
if controller.hide && _.isFunction(controller.hide)
|
if controller.hide && _.isFunction(controller.hide)
|
||||||
controller.hide()
|
controller.hide()
|
||||||
|
|
||||||
|
@anyPopoversDestroy()
|
||||||
|
|
||||||
true
|
true
|
||||||
|
|
||||||
# get task
|
# get task
|
||||||
|
@ -339,7 +371,6 @@ class _taskManagerSingleton extends App.Controller
|
||||||
|
|
||||||
# remove task certain task from tasks
|
# remove task certain task from tasks
|
||||||
remove: (key) =>
|
remove: (key) =>
|
||||||
|
|
||||||
task = @allTasksByKey[key]
|
task = @allTasksByKey[key]
|
||||||
delete @allTasksByKey[key]
|
delete @allTasksByKey[key]
|
||||||
return if !task
|
return if !task
|
||||||
|
@ -386,14 +417,24 @@ class _taskManagerSingleton extends App.Controller
|
||||||
|
|
||||||
# release one task
|
# release one task
|
||||||
release: (key) =>
|
release: (key) =>
|
||||||
|
domKey = @domID(key)
|
||||||
|
localDomStore = @domStore[domKey]
|
||||||
|
if localDomStore
|
||||||
|
if localDomStore.el
|
||||||
|
$('#app').append("<div id=\"#{domKey}_trash\" class=\"hide\"></div>")
|
||||||
|
$("#app ##{domKey}_trash").append(localDomStore.el).remove()
|
||||||
|
localDomStore = undefined
|
||||||
|
delete @domStore[@domID(key)]
|
||||||
|
worker = @workers[key]
|
||||||
|
if worker
|
||||||
|
worker = undefined
|
||||||
|
delete @workers[key]
|
||||||
try
|
try
|
||||||
@el.find("##{@domID(key)}").html('')
|
@$("##{@domID(key)}").html('')
|
||||||
@el.find("##{@domID(key)}").remove()
|
@$("##{@domID(key)}").remove()
|
||||||
catch
|
catch
|
||||||
@log 'notice', "invalid key '#{key}'"
|
@log 'notice', "invalid key '#{key}'"
|
||||||
|
|
||||||
delete @workers[ key ]
|
|
||||||
|
|
||||||
# reset while tasks
|
# reset while tasks
|
||||||
reset: =>
|
reset: =>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
<% if group.items: %>
|
<% if group.items: %>
|
||||||
<% for item in group.items: %>
|
<% for item in group.items: %>
|
||||||
<li <% if item.active: %>class="active"<% end %>><a href="<%= item.target %>"><%- @T(item.name) %></a></li>
|
<li <% if item.active: %>class="active js-item"<% end %>><a href="<%= item.target %>"><%- @T(item.name) %></a></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -55,6 +55,7 @@ test( "taskbar basic tests", function() {
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'", "check active content!")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
// check task history
|
// check task history
|
||||||
equal(App.TaskManager.nextTaskUrl(), '#/some/url/#2')
|
equal(App.TaskManager.nextTaskUrl(), '#/some/url/#2')
|
||||||
|
@ -69,13 +70,29 @@ test( "taskbar basic tests", function() {
|
||||||
show: false,
|
show: false,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 3, "check available active contents")
|
equal($('#taskbars .content').length, 2, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
App.TaskManager.execute({
|
||||||
|
key: 'TestKey3',
|
||||||
|
controller: 'TestController1',
|
||||||
|
params: {
|
||||||
|
message: '#3',
|
||||||
|
},
|
||||||
|
show: true,
|
||||||
|
persistent: false,
|
||||||
|
})
|
||||||
|
equal($('#taskbars .content').length, 3, "check available active contents")
|
||||||
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
|
equal($('#taskbars .content.active').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
|
|
||||||
App.TaskManager.execute({
|
App.TaskManager.execute({
|
||||||
key: 'TestKey4',
|
key: 'TestKey4',
|
||||||
|
@ -86,14 +103,13 @@ test( "taskbar basic tests", function() {
|
||||||
show: false,
|
show: false,
|
||||||
persistent: true,
|
persistent: true,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 4, "check available active contents")
|
equal($('#taskbars .content').length, 3, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#2',show:'true',hide:'false',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
|
||||||
App.TaskManager.execute({
|
App.TaskManager.execute({
|
||||||
key: 'TestKey5',
|
key: 'TestKey5',
|
||||||
|
@ -104,15 +120,14 @@ test( "taskbar basic tests", function() {
|
||||||
show: true,
|
show: true,
|
||||||
persistent: true,
|
persistent: true,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 5, "check available active contents")
|
equal($('#taskbars .content').length, 4, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#5',show:'true',hide:'false',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#5',show:'true',hide:'false',active:'true'")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
|
||||||
App.TaskManager.execute({
|
App.TaskManager.execute({
|
||||||
key: 'TestKey6',
|
key: 'TestKey6',
|
||||||
|
@ -123,28 +138,27 @@ test( "taskbar basic tests", function() {
|
||||||
show: true,
|
show: true,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 6, "check available active contents")
|
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'")
|
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
|
||||||
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'false',hide:'true',active:'false'", "check active content!")
|
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
|
||||||
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
|
||||||
|
|
||||||
|
|
||||||
// remove task#2
|
|
||||||
App.TaskManager.remove('TestKey2')
|
|
||||||
|
|
||||||
equal($('#taskbars .content').length, 5, "check available active contents")
|
equal($('#taskbars .content').length, 5, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey2').text(), "some test controller message:'#2',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey6').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
// remove task#2
|
||||||
|
App.TaskManager.remove('TestKey2')
|
||||||
|
|
||||||
|
equal($('#taskbars .content').length, 4, "check available active contents")
|
||||||
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
|
equal($('#taskbars .content.active').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'")
|
||||||
|
|
||||||
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey6').text(), "some test controller message:'#6',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
// activate task#3
|
// activate task#3
|
||||||
App.TaskManager.execute({
|
App.TaskManager.execute({
|
||||||
|
@ -156,13 +170,14 @@ test( "taskbar basic tests", function() {
|
||||||
show: true,
|
show: true,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 5, "check available active contents")
|
equal($('#taskbars .content').length, 4, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'")
|
||||||
|
|
||||||
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey6').text(), "some test controller message:'#6',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
|
||||||
|
|
||||||
// activate task#1
|
// activate task#1
|
||||||
|
@ -175,19 +190,20 @@ test( "taskbar basic tests", function() {
|
||||||
show: true,
|
show: true,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 5, "check available active contents")
|
equal($('#taskbars .content').length, 4, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#1',show:'true',hide:'true',active:'true'")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#1',show:'true',hide:'true',active:'true'")
|
||||||
|
|
||||||
|
equal($('#taskbars #content_permanent_TestKey1').text(), "some test controller message:'#1',show:'true',hide:'true',active:'true'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey3').text(), "some test controller message:'#3',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
equal($('#taskbars #content_permanent_TestKey4').text(), "some test controller message:'#4',show:'false',hide:'true',active:'false'", "check active content!")
|
|
||||||
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
equal($('#taskbars #content_permanent_TestKey5').text(), "some test controller message:'#5',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
equal($('#taskbars #content_permanent_TestKey6').text(), "some test controller message:'#6',show:'true',hide:'true',active:'false'", "check active content!")
|
||||||
|
|
||||||
// remove task#1
|
// remove task#1
|
||||||
App.TaskManager.remove('TestKey1')
|
App.TaskManager.remove('TestKey1')
|
||||||
|
|
||||||
// verify if task#3 is active
|
// verify if task#3 is active
|
||||||
equal($('#taskbars .content').length, 4, "check available active contents")
|
equal($('#taskbars .content').length, 3, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "")
|
equal($('#taskbars .content.active').text(), "")
|
||||||
|
|
||||||
|
@ -195,7 +211,7 @@ test( "taskbar basic tests", function() {
|
||||||
App.TaskManager.remove('TestKey3')
|
App.TaskManager.remove('TestKey3')
|
||||||
|
|
||||||
// verify if task#5 is active
|
// verify if task#5 is active
|
||||||
equal($('#taskbars .content').length, 3, "check available active contents")
|
equal($('#taskbars .content').length, 2, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "")
|
equal($('#taskbars .content.active').text(), "")
|
||||||
|
|
||||||
|
@ -203,7 +219,7 @@ test( "taskbar basic tests", function() {
|
||||||
App.TaskManager.remove('TestKey5')
|
App.TaskManager.remove('TestKey5')
|
||||||
|
|
||||||
// verify if task#5 is active
|
// verify if task#5 is active
|
||||||
equal($('#taskbars .content').length, 3, "check available active contents")
|
equal($('#taskbars .content').length, 2, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "")
|
equal($('#taskbars .content.active').text(), "")
|
||||||
|
|
||||||
|
@ -217,7 +233,7 @@ test( "taskbar basic tests", function() {
|
||||||
show: true,
|
show: true,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
})
|
})
|
||||||
equal($('#taskbars .content').length, 4, "check available active contents")
|
equal($('#taskbars .content').length, 3, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
equal($('#taskbars .content.active').length, 1, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "some test controller message:'#7',show:'true',hide:'false',active:'true'", "check active content!")
|
equal($('#taskbars .content.active').text(), "some test controller message:'#7',show:'true',hide:'false',active:'true'", "check active content!")
|
||||||
|
|
||||||
|
@ -225,7 +241,7 @@ test( "taskbar basic tests", function() {
|
||||||
App.TaskManager.remove('TestKey7')
|
App.TaskManager.remove('TestKey7')
|
||||||
|
|
||||||
// verify if task#5 is active
|
// verify if task#5 is active
|
||||||
equal($('#taskbars .content').length, 3, "check available active contents")
|
equal($('#taskbars .content').length, 2, "check available active contents")
|
||||||
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
equal($('#taskbars .content.active').length, 0, "check available active contents")
|
||||||
equal($('#taskbars .content.active').text(), "")
|
equal($('#taskbars .content.active').text(), "")
|
||||||
|
|
||||||
|
|
|
@ -175,15 +175,15 @@ class AaaGettingStartedTest < TestCase
|
||||||
css: 'a[href="#manage"]',
|
css: 'a[href="#manage"]',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
css: 'a[href="#settings/branding"]',
|
css: '.content.active a[href="#settings/branding"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content input[name="organization"]',
|
css: '.content.active input[name="organization"]',
|
||||||
value: 'Some Organization',
|
value: 'Some Organization',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
css: 'a[href="#settings/system"]',
|
css: '.content.active a[href="#settings/system"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
fqdn = nil
|
fqdn = nil
|
||||||
|
@ -192,7 +192,7 @@ class AaaGettingStartedTest < TestCase
|
||||||
end
|
end
|
||||||
raise "Unable to get fqdn based on #{browser_url}" if !fqdn
|
raise "Unable to get fqdn based on #{browser_url}" if !fqdn
|
||||||
match(
|
match(
|
||||||
css: '#content input[name="fqdn"]',
|
css: '.content.active input[name="fqdn"]',
|
||||||
value: fqdn,
|
value: fqdn,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,9 +21,9 @@ class AdminChannelEmailTest < TestCase
|
||||||
tasks_close_all()
|
tasks_close_all()
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#channels/email"]')
|
click(css: '.content.active a[href="#channels/email"]')
|
||||||
|
|
||||||
click(css: '#content .js-channelNew')
|
click(css: '.content.active .js-channelNew')
|
||||||
|
|
||||||
modal_ready()
|
modal_ready()
|
||||||
|
|
||||||
|
@ -55,15 +55,15 @@ class AdminChannelEmailTest < TestCase
|
||||||
|
|
||||||
# delete all channels
|
# delete all channels
|
||||||
loop do
|
loop do
|
||||||
break if !@browser.find_elements(css: '#content .js-channelDelete')[0]
|
break if !@browser.find_elements(css: '.content.active .js-channelDelete')[0]
|
||||||
click(css: '#content .js-channelDelete')
|
click(css: '.content.active .js-channelDelete')
|
||||||
sleep 2
|
sleep 2
|
||||||
click(css: '.modal .js-submit')
|
click(css: '.modal .js-submit')
|
||||||
sleep 2
|
sleep 2
|
||||||
end
|
end
|
||||||
|
|
||||||
# re-create
|
# re-create
|
||||||
click(css: '#content .js-channelNew')
|
click(css: '.content.active .js-channelNew')
|
||||||
|
|
||||||
modal_ready()
|
modal_ready()
|
||||||
|
|
||||||
|
@ -93,12 +93,12 @@ class AdminChannelEmailTest < TestCase
|
||||||
exists_not(css: '.modal')
|
exists_not(css: '.modal')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: mailbox_user,
|
value: mailbox_user,
|
||||||
)
|
)
|
||||||
|
|
||||||
# set invalid folder
|
# set invalid folder
|
||||||
click(css: '#content .js-editInbound')
|
click(css: '.content.active .js-editInbound')
|
||||||
|
|
||||||
modal_ready()
|
modal_ready()
|
||||||
|
|
||||||
|
|
|
@ -62,10 +62,10 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
click(css: '#content .tab-pane.active div.js-execute')
|
click(css: '.content.active .tab-pane.active div.js-execute')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal',
|
css: '.modal',
|
||||||
value: 'restart',
|
value: 'restart',
|
||||||
|
@ -76,7 +76,7 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
sleep 5
|
sleep 5
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
)
|
)
|
||||||
|
|
||||||
# create new ticket
|
# create new ticket
|
||||||
|
@ -113,11 +113,11 @@ class AdminObjectManagerTest < TestCase
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#system/object_manager"]')
|
click(css: 'a[href="#system/object_manager"]')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test1',
|
value: 'browser_test1',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
object_manager_attribute_delete(
|
object_manager_attribute_delete(
|
||||||
|
@ -126,14 +126,14 @@ class AdminObjectManagerTest < TestCase
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test1',
|
value: 'browser_test1',
|
||||||
)
|
)
|
||||||
click(css: '#content .tab-pane.active div.js-execute')
|
click(css: '.content.active .tab-pane.active div.js-execute')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal',
|
css: '.modal',
|
||||||
value: 'restart',
|
value: 'restart',
|
||||||
|
@ -144,14 +144,14 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
sleep 5
|
sleep 5
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test1',
|
value: 'browser_test1',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -263,10 +263,10 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
click(css: '#content .tab-pane.active div.js-execute')
|
click(css: '.content.active .tab-pane.active div.js-execute')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal',
|
css: '.modal',
|
||||||
value: 'restart',
|
value: 'restart',
|
||||||
|
@ -277,7 +277,7 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
sleep 5
|
sleep 5
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
)
|
)
|
||||||
|
|
||||||
# create new ticket
|
# create new ticket
|
||||||
|
@ -345,7 +345,7 @@ class AdminObjectManagerTest < TestCase
|
||||||
name: 'browser_test7',
|
name: 'browser_test7',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
click(css: '#content .tab-pane.active div.js-execute')
|
click(css: '.content.active .tab-pane.active div.js-execute')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal',
|
css: '.modal',
|
||||||
value: 'restart',
|
value: 'restart',
|
||||||
|
@ -356,34 +356,34 @@ class AdminObjectManagerTest < TestCase
|
||||||
)
|
)
|
||||||
sleep 5
|
sleep 5
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Database Update required',
|
value: 'Database Update required',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test2',
|
value: 'browser_test2',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test3',
|
value: 'browser_test3',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test4',
|
value: 'browser_test4',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test5',
|
value: 'browser_test5',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test6',
|
value: 'browser_test6',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content table',
|
css: '.content.active table',
|
||||||
value: 'browser_test7',
|
value: 'browser_test7',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -247,12 +247,12 @@ class AgentTicketTagTest < TestCase
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser2,
|
browser: browser2,
|
||||||
css: 'a[href="#manage/tags"]',
|
css: '.content.active a[href="#manage/tags"]',
|
||||||
)
|
)
|
||||||
sleep 3
|
sleep 3
|
||||||
execute(
|
execute(
|
||||||
browser: browser2,
|
browser: browser2,
|
||||||
js: "$('#content .js-name:contains(\"tag3\")').click()",
|
js: "$('.content.active .js-name:contains(\"tag3\")').click()",
|
||||||
)
|
)
|
||||||
sleep 2
|
sleep 2
|
||||||
set(
|
set(
|
||||||
|
@ -301,12 +301,12 @@ class AgentTicketTagTest < TestCase
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser2,
|
browser: browser2,
|
||||||
css: 'a[href="#manage/tags"]',
|
css: '.content.active a[href="#manage/tags"]',
|
||||||
)
|
)
|
||||||
sleep 3
|
sleep 3
|
||||||
execute(
|
execute(
|
||||||
browser: browser2,
|
browser: browser2,
|
||||||
js: "$('#content .js-name:contains(\"tag5\")').closest('tr').find('.js-delete').click()",
|
js: "$('.content.active .js-name:contains(\"tag5\")').closest('tr').find('.js-delete').click()",
|
||||||
)
|
)
|
||||||
sleep 2
|
sleep 2
|
||||||
click(
|
click(
|
||||||
|
@ -357,32 +357,32 @@ class AgentTicketTagTest < TestCase
|
||||||
tasks_close_all()
|
tasks_close_all()
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#manage/tags"]')
|
click(css: '.content.active a[href="#manage/tags"]')
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-newTagSetting',
|
css: '.content.active .js-newTagSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .js-create input[name="name"]',
|
css: '.content.active .js-create input[name="name"]',
|
||||||
value: tag_prefix + ' A',
|
value: tag_prefix + ' A',
|
||||||
)
|
)
|
||||||
click(css: '#content .js-create .js-submit')
|
click(css: '.content.active .js-create .js-submit')
|
||||||
set(
|
set(
|
||||||
css: '#content .js-create input[name="name"]',
|
css: '.content.active .js-create input[name="name"]',
|
||||||
value: tag_prefix + ' a',
|
value: tag_prefix + ' a',
|
||||||
)
|
)
|
||||||
click(css: '#content .js-create .js-submit')
|
click(css: '.content.active .js-create .js-submit')
|
||||||
set(
|
set(
|
||||||
css: '#content .js-create input[name="name"]',
|
css: '.content.active .js-create input[name="name"]',
|
||||||
value: tag_prefix + ' B',
|
value: tag_prefix + ' B',
|
||||||
)
|
)
|
||||||
click(css: '#content .js-create .js-submit')
|
click(css: '.content.active .js-create .js-submit')
|
||||||
set(
|
set(
|
||||||
css: '#content .js-create input[name="name"]',
|
css: '.content.active .js-create input[name="name"]',
|
||||||
value: tag_prefix + ' C',
|
value: tag_prefix + ' C',
|
||||||
)
|
)
|
||||||
click(css: '#content .js-create .js-submit')
|
click(css: '.content.active .js-create .js-submit')
|
||||||
|
|
||||||
# set tag (by tab)
|
# set tag (by tab)
|
||||||
ticket1 = ticket_create(
|
ticket1 = ticket_create(
|
||||||
|
@ -509,9 +509,9 @@ class AgentTicketTagTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#manage/tags"]')
|
click(css: '.content.active a[href="#manage/tags"]')
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-newTagSetting',
|
css: '.content.active .js-newTagSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,11 +23,11 @@ class ChatTest < TestCase
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: 'a[href="#channels/chat"]',
|
css: '.content.active a[href="#channels/chat"]',
|
||||||
)
|
)
|
||||||
switch(
|
switch(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: '#content .js-chatSetting',
|
css: '.content.active .js-chatSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,11 +60,11 @@ class ChatTest < TestCase
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: 'a[href="#channels/chat"]',
|
css: '.content.active a[href="#channels/chat"]',
|
||||||
)
|
)
|
||||||
switch(
|
switch(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: '#content .js-chatSetting',
|
css: '.content.active .js-chatSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
sleep 15 # wait for rerendering
|
sleep 15 # wait for rerendering
|
||||||
|
|
|
@ -112,7 +112,7 @@ class FirstStepsTest < TestCase
|
||||||
click(css: '.active.content a[href="#channels/form"]')
|
click(css: '.active.content a[href="#channels/form"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-formSetting',
|
css: '.content.active .js-formSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
click(css: '#navigation a[href="#dashboard"]')
|
click(css: '#navigation a[href="#dashboard"]')
|
||||||
|
|
|
@ -22,11 +22,11 @@ class FormTest < TestCase
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: 'a[href="#channels/form"]',
|
css: '.content.active a[href="#channels/form"]',
|
||||||
)
|
)
|
||||||
switch(
|
switch(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: '#content .js-formSetting',
|
css: '.content.active .js-formSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ class FormTest < TestCase
|
||||||
)
|
)
|
||||||
switch(
|
switch(
|
||||||
browser: agent,
|
browser: agent,
|
||||||
css: '#content .js-formSetting',
|
css: '.content.active .js-formSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -18,25 +18,25 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/sipgate"]')
|
click(css: 'a[href="#system/integration/sipgate"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main .js-inboundBlockCallerId input[name=caller_id]',
|
css: '.content.active .main .js-inboundBlockCallerId input[name=caller_id]',
|
||||||
value: '041 1234567',
|
value: '041 1234567',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main .js-inboundBlockCallerId input[name=note]',
|
css: '.content.active .main .js-inboundBlockCallerId input[name=note]',
|
||||||
value: 'block spam caller id',
|
value: 'block spam caller id',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-inboundBlockCallerId .js-add')
|
click(css: '.content.active .main .js-inboundBlockCallerId .js-add')
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="0411234567"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: 'a[href="#dashboard"]')
|
click(css: 'a[href="#dashboard"]')
|
||||||
|
@ -45,33 +45,33 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/sipgate"]')
|
click(css: 'a[href="#system/integration/sipgate"]')
|
||||||
|
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="0411234567"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="0411234567"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-inboundBlockCallerId .js-remove')
|
click(css: '.content.active .main .js-inboundBlockCallerId .js-remove')
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
sleep 6
|
sleep 6
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="0411234567"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]',
|
||||||
)
|
)
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -90,35 +90,35 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/slack"]')
|
click(css: 'a[href="#system/integration/slack"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .checkbox-replacement')
|
click(css: '.content.active .main .checkbox-replacement')
|
||||||
select(
|
select(
|
||||||
css: '#content .main select[name="group_id"]',
|
css: '.content.active .main select[name="group_id"]',
|
||||||
value: 'Users',
|
value: 'Users',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="webhook"]',
|
css: '.content.active .main input[name="webhook"]',
|
||||||
value: 'http://some_url/webhook/123',
|
value: 'http://some_url/webhook/123',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="username"]',
|
css: '.content.active .main input[name="username"]',
|
||||||
value: 'someuser',
|
value: 'someuser',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="group_id"]',
|
css: '.content.active .main select[name="group_id"]',
|
||||||
value: 'Users',
|
value: 'Users',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="webhook"]',
|
css: '.content.active .main input[name="webhook"]',
|
||||||
value: 'http://some_url/webhook/123',
|
value: 'http://some_url/webhook/123',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="username"]',
|
css: '.content.active .main input[name="username"]',
|
||||||
value: 'someuser',
|
value: 'someuser',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -128,35 +128,35 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/slack"]')
|
click(css: 'a[href="#system/integration/slack"]')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="group_id"]',
|
css: '.content.active .main select[name="group_id"]',
|
||||||
value: 'Users',
|
value: 'Users',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="webhook"]',
|
css: '.content.active .main input[name="webhook"]',
|
||||||
value: 'http://some_url/webhook/123',
|
value: 'http://some_url/webhook/123',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="username"]',
|
css: '.content.active .main input[name="username"]',
|
||||||
value: 'someuser',
|
value: 'someuser',
|
||||||
)
|
)
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="group_id"]',
|
css: '.content.active .main select[name="group_id"]',
|
||||||
value: 'Users',
|
value: 'Users',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="webhook"]',
|
css: '.content.active .main input[name="webhook"]',
|
||||||
value: 'http://some_url/webhook/123',
|
value: 'http://some_url/webhook/123',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="username"]',
|
css: '.content.active .main input[name="username"]',
|
||||||
value: 'someuser',
|
value: 'someuser',
|
||||||
)
|
)
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -176,23 +176,23 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/clearbit"]')
|
click(css: 'a[href="#system/integration/clearbit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: 'some_api_key',
|
value: 'some_api_key',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main .js-userSync .js-new [name="source"]',
|
css: '.content.active .main .js-userSync .js-new [name="source"]',
|
||||||
value: 'source1',
|
value: 'source1',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main .js-userSync .js-new [name="destination"]',
|
css: '.content.active .main .js-userSync .js-new [name="destination"]',
|
||||||
value: 'destination1',
|
value: 'destination1',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-userSync .js-add')
|
click(css: '.content.active .main .js-userSync .js-add')
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
click(css: 'a[href="#dashboard"]')
|
click(css: 'a[href="#dashboard"]')
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
|
@ -200,54 +200,54 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/clearbit"]')
|
click(css: 'a[href="#system/integration/clearbit"]')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: 'some_api_key',
|
value: 'some_api_key',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="source1"]',
|
css: '.content.active .main .js-userSync [value="source1"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="destination1"]',
|
css: '.content.active .main .js-userSync [value="destination1"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: 'some_api_key',
|
value: 'some_api_key',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="source1"]',
|
css: '.content.active .main .js-userSync [value="source1"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="destination1"]',
|
css: '.content.active .main .js-userSync [value="destination1"]',
|
||||||
)
|
)
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: '-empty-',
|
value: '-empty-',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: 'some_api_key',
|
value: 'some_api_key',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="api_key"]',
|
css: '.content.active .main input[name="api_key"]',
|
||||||
value: '-empty-',
|
value: '-empty-',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="source1"]',
|
css: '.content.active .main .js-userSync [value="source1"]',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .js-userSync [value="destination1"]',
|
css: '.content.active .main .js-userSync [value="destination1"]',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -266,25 +266,25 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/icinga"]')
|
click(css: 'a[href="#system/integration/icinga"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'some@othersender.com',
|
value: 'some@othersender.com',
|
||||||
)
|
)
|
||||||
select(
|
select(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'no',
|
value: 'no',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'some@othersender.com',
|
value: 'some@othersender.com',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'no',
|
value: 'no',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -294,45 +294,45 @@ class IntegrationTest < TestCase
|
||||||
click(css: 'a[href="#system/integration/icinga"]')
|
click(css: 'a[href="#system/integration/icinga"]')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'some@othersender.com',
|
value: 'some@othersender.com',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'no',
|
value: 'no',
|
||||||
)
|
)
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'some@othersender.com',
|
value: 'some@othersender.com',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'no',
|
value: 'no',
|
||||||
)
|
)
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
css: '#content .main .js-switch',
|
css: '.content.active .main .js-switch',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'icinga@monitoring.example.com',
|
value: 'icinga@monitoring.example.com',
|
||||||
)
|
)
|
||||||
select(
|
select(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'yes',
|
value: 'yes',
|
||||||
)
|
)
|
||||||
click(css: '#content .main .js-submit')
|
click(css: '.content.active .main .js-submit')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .main input[name="icinga_sender"]',
|
css: '.content.active .main input[name="icinga_sender"]',
|
||||||
value: 'icinga@monitoring.example.com',
|
value: 'icinga@monitoring.example.com',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content .main select[name="icinga_auto_close"]',
|
css: '.content.active .main select[name="icinga_auto_close"]',
|
||||||
value: 'yes',
|
value: 'yes',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,7 +25,7 @@ class MaintenanceLoginMessageTest < TestCase
|
||||||
message = "test <b>#{string}</b>"
|
message = "test <b>#{string}</b>"
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-loginPreview [data-name="message"]',
|
css: '.content.active .js-loginPreview [data-name="message"]',
|
||||||
value: message,
|
value: message,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
|
@ -45,7 +45,7 @@ class MaintenanceLoginMessageTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-loginSetting',
|
css: '.content.active .js-loginSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ class MaintenanceLoginMessageTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-loginSetting',
|
css: '.content.active .js-loginSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ class MaintenanceModeTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-modeSetting',
|
css: '.content.active .js-modeSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
no_check: true,
|
no_check: true,
|
||||||
)
|
)
|
||||||
|
@ -41,12 +41,12 @@ class MaintenanceModeTest < TestCase
|
||||||
# check warning
|
# check warning
|
||||||
watch_for(
|
watch_for(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .modal .modal-header',
|
css: '.content.active .modal .modal-header',
|
||||||
value: 'confirm',
|
value: 'confirm',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .modal .js-submit',
|
css: '.content.active .modal .js-submit',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
@ -92,7 +92,7 @@ class MaintenanceModeTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-modeSetting',
|
css: '.content.active .js-modeSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ class MaintenanceModeTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-modeSetting',
|
css: '.content.active .js-modeSetting',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
no_check: true,
|
no_check: true,
|
||||||
)
|
)
|
||||||
|
@ -129,12 +129,12 @@ class MaintenanceModeTest < TestCase
|
||||||
# check warning
|
# check warning
|
||||||
watch_for(
|
watch_for(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .modal .modal-header',
|
css: '.content.active .modal .modal-header',
|
||||||
value: 'confirm',
|
value: 'confirm',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .modal .js-submit',
|
css: '.content.active .modal .js-submit',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
@ -148,7 +148,7 @@ class MaintenanceModeTest < TestCase
|
||||||
|
|
||||||
switch(
|
switch(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-modeSetting',
|
css: '.content.active .js-modeSetting',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -36,18 +36,18 @@ class MaintenanceSessionMessageTest < TestCase
|
||||||
|
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message input[name="head"]',
|
css: '.content.active .js-Message input[name="head"]',
|
||||||
value: title_html,
|
value: title_html,
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message .js-textarea[data-name="message"]',
|
css: '.content.active .js-Message .js-textarea[data-name="message"]',
|
||||||
value: message_html,
|
value: message_html,
|
||||||
)
|
)
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message button.js-submit',
|
css: '.content.active .js-Message button.js-submit',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
@ -84,18 +84,18 @@ class MaintenanceSessionMessageTest < TestCase
|
||||||
|
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message input[name="head"]',
|
css: '.content.active .js-Message input[name="head"]',
|
||||||
value: title_html + ' #2',
|
value: title_html + ' #2',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message .js-textarea[data-name="message"]',
|
css: '.content.active .js-Message .js-textarea[data-name="message"]',
|
||||||
value: message_html + ' #2',
|
value: message_html + ' #2',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message button.js-submit',
|
css: '.content.active .js-Message button.js-submit',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
@ -132,21 +132,21 @@ class MaintenanceSessionMessageTest < TestCase
|
||||||
|
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message input[name="head"]',
|
css: '.content.active .js-Message input[name="head"]',
|
||||||
value: title_html + ' #3',
|
value: title_html + ' #3',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message .js-textarea[data-name="message"]',
|
css: '.content.active .js-Message .js-textarea[data-name="message"]',
|
||||||
value: message_html + ' #3',
|
value: message_html + ' #3',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message input[name="reload"] + .icon-checkbox.icon-unchecked',
|
css: '.content.active .js-Message input[name="reload"] + .icon-checkbox.icon-unchecked',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '#content .js-Message button.js-submit',
|
css: '.content.active .js-Message button.js-submit',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
|
|
@ -50,7 +50,7 @@ class PreferencesLanguageTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'Deutsch',
|
value: 'Deutsch',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
value: 'Sprache',
|
value: 'Sprache',
|
||||||
|
@ -163,7 +163,7 @@ class PreferencesLanguageTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'English (United States)',
|
value: 'English (United States)',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
@ -279,7 +279,7 @@ class PreferencesLanguageTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'Deutsch',
|
value: 'Deutsch',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 4
|
sleep 4
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
@ -324,7 +324,7 @@ class PreferencesLanguageTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'English (United States)',
|
value: 'English (United States)',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
|
|
@ -15,48 +15,48 @@ class PreferencesTokenAccessTest < TestCase
|
||||||
click(css: 'a[href="#profile"]')
|
click(css: 'a[href="#profile"]')
|
||||||
click(css: 'a[href="#profile/token_access"]')
|
click(css: 'a[href="#profile/token_access"]')
|
||||||
|
|
||||||
click(css: '#content .js-create')
|
click(css: '.content.active .js-create')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal .modal-title',
|
css: '.modal .modal-title',
|
||||||
value: 'Add a Personal Access Token'
|
value: 'Add a Personal Access Token'
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal .js-input',
|
css: '.content.active .modal .js-input',
|
||||||
value: 'Some App#1',
|
value: 'Some App#1',
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .modal .js-datepicker',
|
css: '.content.active .modal .js-datepicker',
|
||||||
value: '05/15/2022',
|
value: '05/15/2022',
|
||||||
)
|
)
|
||||||
sendkey(value: :tab)
|
sendkey(value: :tab)
|
||||||
click(css: '#content .modal input[value="ticket.agent"] ~ .label-text')
|
click(css: '.content.active .modal input[value="ticket.agent"] ~ .label-text')
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal .modal-title',
|
css: '.modal .modal-title',
|
||||||
value: 'Your New Personal Access Token'
|
value: 'Your New Personal Access Token'
|
||||||
)
|
)
|
||||||
click(css: '.modal .js-submit')
|
click(css: '.modal .js-submit')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-tokenList',
|
css: '.content.active .js-tokenList',
|
||||||
value: 'Some App#1'
|
value: 'Some App#1'
|
||||||
)
|
)
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-tokenList',
|
css: '.content.active .js-tokenList',
|
||||||
value: '05/15/2022'
|
value: '05/15/2022'
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-create')
|
click(css: '.content.active .js-create')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal .modal-title',
|
css: '.modal .modal-title',
|
||||||
value: 'Add a Personal Access Token'
|
value: 'Add a Personal Access Token'
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .modal .js-input',
|
css: '.content.active .modal .js-input',
|
||||||
value: 'Some App#2',
|
value: 'Some App#2',
|
||||||
)
|
)
|
||||||
click(css: '#content .modal input[value="ticket.agent"] ~ .label-text')
|
click(css: '.content.active .modal input[value="ticket.agent"] ~ .label-text')
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '.modal .modal-title',
|
css: '.modal .modal-title',
|
||||||
|
@ -64,20 +64,20 @@ class PreferencesTokenAccessTest < TestCase
|
||||||
)
|
)
|
||||||
click(css: '.modal .js-submit')
|
click(css: '.modal .js-submit')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-tokenList',
|
css: '.content.active .js-tokenList',
|
||||||
value: 'Some App#2'
|
value: 'Some App#2'
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-tokenList a')
|
click(css: '.content.active .js-tokenList a')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal .modal-header',
|
css: '.content.active .modal .modal-header',
|
||||||
value: 'confirm',
|
value: 'confirm',
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
css: '#content .modal .js-submit',
|
css: '.content.active .modal .js-submit',
|
||||||
)
|
)
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
css: '#content .js-tokenList',
|
css: '.content.active .js-tokenList',
|
||||||
value: 'Some App#2'
|
value: 'Some App#2'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class SettingTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'English (United States)',
|
value: 'English (United States)',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
# change settings
|
# change settings
|
||||||
|
@ -28,7 +28,7 @@ class SettingTest < TestCase
|
||||||
click(css: 'a[href="#third_party_auth"]')
|
click(css: 'a[href="#third_party_auth"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-setting[data-name="auth_facebook"]',
|
css: '.content.active .js-setting[data-name="auth_facebook"]',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ class SettingTest < TestCase
|
||||||
|
|
||||||
# set yes
|
# set yes
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-setting[data-name="auth_facebook"]',
|
css: '.content.active .js-setting[data-name="auth_facebook"]',
|
||||||
type: 'on',
|
type: 'on',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ class SettingTest < TestCase
|
||||||
)
|
)
|
||||||
sleep 2
|
sleep 2
|
||||||
switch(
|
switch(
|
||||||
css: '#content .js-setting[data-name="auth_facebook"]',
|
css: '.content.active .js-setting[data-name="auth_facebook"]',
|
||||||
type: 'off',
|
type: 'off',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -12,18 +12,18 @@ class SwitchToUserTest < TestCase
|
||||||
tasks_close_all()
|
tasks_close_all()
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#manage/users"]')
|
click(css: '.content.active a[href="#manage/users"]')
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .js-search',
|
css: '.content.active .js-search',
|
||||||
value: 'nicole',
|
value: 'nicole',
|
||||||
)
|
)
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
@browser.mouse.move_to(@browser.find_elements({ css: '#content .table-overview tbody tr:first-child' } )[0])
|
@browser.mouse.move_to(@browser.find_elements({ css: '.content.active .table-overview tbody tr:first-child' } )[0])
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
click(
|
click(
|
||||||
css: '#content .icon-switchView',
|
css: '.content.active .icon-switchView',
|
||||||
)
|
)
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ class TranslationTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'English (United States)',
|
value: 'English (United States)',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
@ -29,7 +29,7 @@ class TranslationTest < TestCase
|
||||||
click(css: 'a[href="#system/translation"]')
|
click(css: 'a[href="#system/translation"]')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'English is the source language, so we have nothing to translate',
|
value: 'English is the source language, so we have nothing to translate',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class TranslationTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'Deutsch',
|
value: 'Deutsch',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
value: 'Sprache',
|
value: 'Sprache',
|
||||||
|
@ -51,7 +51,7 @@ class TranslationTest < TestCase
|
||||||
|
|
||||||
notify_close(optional: true) # to be not in click area
|
notify_close(optional: true) # to be not in click area
|
||||||
set(
|
set(
|
||||||
css: '#content input.js-Item[data-source="Translations"]',
|
css: '.content.active input.js-Item[data-source="Translations"]',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
sleep 5 # wait until nofify is gone
|
sleep 5 # wait until nofify is gone
|
||||||
|
@ -65,11 +65,11 @@ class TranslationTest < TestCase
|
||||||
click(css: 'a[href="#system/translation"]')
|
click(css: 'a[href="#system/translation"]')
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .sidebar',
|
css: '.content.active .sidebar',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
match(
|
match(
|
||||||
css: '#content input.js-Item[data-source="Translations"]',
|
css: '.content.active input.js-Item[data-source="Translations"]',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -79,11 +79,11 @@ class TranslationTest < TestCase
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content .sidebar',
|
css: '.content.active .sidebar',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content input.js-Item[data-source="Translations"]',
|
css: '.content.active input.js-Item[data-source="Translations"]',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -95,15 +95,15 @@ class TranslationTest < TestCase
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content .sidebar',
|
css: '.content.active .sidebar',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content input.js-Item[data-source="Translations"]',
|
css: '.content.active input.js-Item[data-source="Translations"]',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content .sidebar',
|
css: '.content.active .sidebar',
|
||||||
value: 'Übersetzung2',
|
value: 'Übersetzung2',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ class TranslationTest < TestCase
|
||||||
sleep 4
|
sleep 4
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content input.js-Item[data-source="Overviews"]',
|
css: '.content.active input.js-Item[data-source="Overviews"]',
|
||||||
value: 'Übersichten123',
|
value: 'Übersichten123',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ class TranslationTest < TestCase
|
||||||
css: '.language_item [name="locale"]',
|
css: '.language_item [name="locale"]',
|
||||||
value: 'English (United States)',
|
value: 'English (United States)',
|
||||||
)
|
)
|
||||||
click(css: '.content button[type="submit"]')
|
click(css: '.content.active button[type="submit"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
@ -232,11 +232,11 @@ class TranslationTest < TestCase
|
||||||
sleep 4
|
sleep 4
|
||||||
|
|
||||||
match(
|
match(
|
||||||
css: '#content input.js-Item[data-source="Overviews"]',
|
css: '.content.active input.js-Item[data-source="Overviews"]',
|
||||||
value: 'Overviews123',
|
value: 'Overviews123',
|
||||||
)
|
)
|
||||||
match_not(
|
match_not(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'English is the source language, so we have nothing to translate',
|
value: 'English is the source language, so we have nothing to translate',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ class TranslationTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'English is the source language, so we have nothing to translate',
|
value: 'English is the source language, so we have nothing to translate',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1193,7 +1193,7 @@ class TestCase < Test::Unit::TestCase
|
||||||
|
|
||||||
file_upload(
|
file_upload(
|
||||||
browser: browser1,
|
browser: browser1,
|
||||||
css: '.active .attachmentPlaceholder-inputHolder input'
|
css: '.content.active .attachmentPlaceholder-inputHolder input'
|
||||||
files: ['path/in/home/some_file.ext'], # 'test/fixtures/test1.pdf'
|
files: ['path/in/home/some_file.ext'], # 'test/fixtures/test1.pdf'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1571,12 +1571,12 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/overviews"]',
|
css: '.content.active a[href="#manage/overviews"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '#content a[data-type="new"]',
|
css: '.content.active a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -1669,16 +1669,16 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage"]',
|
css: 'a[href="#manage"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/overviews"]',
|
css: '.content.active a[href="#manage/overviews"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
instance.execute_script("$(\"#content td:contains('#{data[:name]}')\").first().click()")
|
instance.execute_script("$(\".content.active td:contains('#{data[:name]}')\").first().click()")
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
if data[:name]
|
if data[:name]
|
||||||
|
@ -1797,18 +1797,18 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#new"]',
|
css: 'a[href="#new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#ticket/create"]',
|
css: 'a[href="#ticket/create"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
found = false
|
found = false
|
||||||
7.times {
|
7.times {
|
||||||
element = instance.find_elements(css: '.active .newTicket')[0]
|
element = instance.find_elements(css: '.content.active .newTicket')[0]
|
||||||
if element
|
if element
|
||||||
found = true
|
found = true
|
||||||
break
|
break
|
||||||
|
@ -1824,23 +1824,23 @@ wait untill text in selector disabppears
|
||||||
if data[:group] == '-NONE-'
|
if data[:group] == '-NONE-'
|
||||||
|
|
||||||
# check if owner selection exists
|
# check if owner selection exists
|
||||||
count = instance.find_elements(css: '.active .newTicket select[name="group_id"] option').count
|
count = instance.find_elements(css: '.content.active .newTicket select[name="group_id"] option').count
|
||||||
assert_equal(0, count, 'owner selection should not be showm')
|
assert_equal(0, count, 'owner selection should not be showm')
|
||||||
|
|
||||||
# check count of agents, should be only 3 / - selection + master + agent on init screen
|
# check count of agents, should be only 3 / - selection + master + agent on init screen
|
||||||
count = instance.find_elements(css: '.active .newTicket select[name="owner_id"] option').count
|
count = instance.find_elements(css: '.content.active .newTicket select[name="owner_id"] option').count
|
||||||
assert_equal(3, count, 'check if owner selection is - selection + master + agent per default')
|
assert_equal(3, count, 'check if owner selection is - selection + master + agent per default')
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
# check count of agents, should be only 1 / - selection on init screen
|
# check count of agents, should be only 1 / - selection on init screen
|
||||||
if !params[:disable_group_check]
|
if !params[:disable_group_check]
|
||||||
count = instance.find_elements(css: '.active .newTicket select[name="owner_id"] option').count
|
count = instance.find_elements(css: '.content.active .newTicket select[name="owner_id"] option').count
|
||||||
assert_equal(1, count, 'check if owner selection is empty per default')
|
assert_equal(1, count, 'check if owner selection is empty per default')
|
||||||
end
|
end
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket select[name="group_id"]',
|
css: '.content.active .newTicket select[name="group_id"]',
|
||||||
value: data[:group],
|
value: data[:group],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -1850,7 +1850,7 @@ wait untill text in selector disabppears
|
||||||
if data[:priority]
|
if data[:priority]
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket select[name="priority_id"]',
|
css: '.content.active .newTicket select[name="priority_id"]',
|
||||||
value: data[:priority],
|
value: data[:priority],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -1858,7 +1858,7 @@ wait untill text in selector disabppears
|
||||||
if data[:state]
|
if data[:state]
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket select[name="state_id"]',
|
css: '.content.active .newTicket select[name="state_id"]',
|
||||||
value: data[:state],
|
value: data[:state],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -1866,7 +1866,7 @@ wait untill text in selector disabppears
|
||||||
if data[:title]
|
if data[:title]
|
||||||
set(
|
set(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket input[name="title"]',
|
css: '.content.active .newTicket input[name="title"]',
|
||||||
value: data[:title],
|
value: data[:title],
|
||||||
clear: true,
|
clear: true,
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
|
@ -1875,20 +1875,20 @@ wait untill text in selector disabppears
|
||||||
if data[:body]
|
if data[:body]
|
||||||
set(
|
set(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket div[data-name=body]',
|
css: '.content.active .newTicket div[data-name=body]',
|
||||||
value: data[:body],
|
value: data[:body],
|
||||||
clear: true,
|
clear: true,
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
if data[:customer]
|
if data[:customer]
|
||||||
element = instance.find_elements(css: '.active .newTicket input[name="customer_id_completion"]')[0]
|
element = instance.find_elements(css: '.content.active .newTicket input[name="customer_id_completion"]')[0]
|
||||||
element.click
|
element.click
|
||||||
element.clear
|
element.clear
|
||||||
|
|
||||||
# ff issue, sometimes focus event gets dropped
|
# ff issue, sometimes focus event gets dropped
|
||||||
# if drowdown is not open, try it again
|
# if drowdown is not open, try it again
|
||||||
if !instance.find_elements(css: '.active .newTicket .js-recipientDropdown.open')[0]
|
if !instance.find_elements(css: '.content.active .newTicket .js-recipientDropdown.open')[0]
|
||||||
instance.execute_script('$(".active .newTicket .js-recipientDropdown").addClass("open")')
|
instance.execute_script('$(".active .newTicket .js-recipientDropdown").addClass("open")')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1899,8 +1899,8 @@ wait untill text in selector disabppears
|
||||||
sleep 0.4
|
sleep 0.4
|
||||||
# ff issue, sometimes enter event gets dropped
|
# ff issue, sometimes enter event gets dropped
|
||||||
# take user manually
|
# take user manually
|
||||||
if instance.find_elements(css: '.active .newTicket .js-recipientDropdown.open')[0]
|
if instance.find_elements(css: '.content.active .newTicket .js-recipientDropdown.open')[0]
|
||||||
instance.find_elements(css: '.active .newTicket .recipientList-entry.js-user.is-active')[0].click
|
instance.find_elements(css: '.content.active .newTicket .recipientList-entry.js-user.is-active')[0].click
|
||||||
sleep 0.4
|
sleep 0.4
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1909,7 +1909,7 @@ wait untill text in selector disabppears
|
||||||
params[:custom_data_select].each { |local_key, local_value|
|
params[:custom_data_select].each { |local_key, local_value|
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: ".active .newTicket select[name=\"#{local_key}\"]",
|
css: ".content.active .newTicket select[name=\"#{local_key}\"]",
|
||||||
value: local_value,
|
value: local_value,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1918,7 +1918,7 @@ wait untill text in selector disabppears
|
||||||
params[:custom_data_input].each { |local_key, local_value|
|
params[:custom_data_input].each { |local_key, local_value|
|
||||||
set(
|
set(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: ".active .newTicket input[name=\"#{local_key}\"]",
|
css: ".content.active .newTicket input[name=\"#{local_key}\"]",
|
||||||
value: local_value,
|
value: local_value,
|
||||||
clear: true,
|
clear: true,
|
||||||
)
|
)
|
||||||
|
@ -1928,7 +1928,7 @@ wait untill text in selector disabppears
|
||||||
if data[:attachment]
|
if data[:attachment]
|
||||||
file_upload(
|
file_upload(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '#content .text-1',
|
css: '.content.active .text-1',
|
||||||
value: 'some text',
|
value: 'some text',
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -1941,7 +1941,7 @@ wait untill text in selector disabppears
|
||||||
#instance.execute_script('$(".content.active .newTicket form").submit();')
|
#instance.execute_script('$(".content.active .newTicket form").submit();')
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .newTicket button.js-submit',
|
css: '.content.active .newTicket button.js-submit',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1954,7 +1954,7 @@ wait untill text in selector disabppears
|
||||||
id.gsub!(//,)
|
id.gsub!(//,)
|
||||||
id.gsub!(%r{^.+?/(\d+)$}, '\\1')
|
id.gsub!(%r{^.+?/(\d+)$}, '\\1')
|
||||||
|
|
||||||
element = instance.find_elements(css: '.active .ticketZoom-header .ticket-number')[0]
|
element = instance.find_elements(css: '.content.active .ticketZoom-header .ticket-number')[0]
|
||||||
if element
|
if element
|
||||||
number = element.text
|
number = element.text
|
||||||
ticket = {
|
ticket = {
|
||||||
|
@ -2045,10 +2045,10 @@ wait untill text in selector disabppears
|
||||||
if data[:customer]
|
if data[:customer]
|
||||||
|
|
||||||
# select tab
|
# select tab
|
||||||
click(browser: instance, css: '.active .tabsSidebar-tab[data-tab="customer"]')
|
click(browser: instance, css: '.content.active .tabsSidebar-tab[data-tab="customer"]')
|
||||||
|
|
||||||
click(browser: instance, css: '.active div[data-tab="customer"] .js-actions .icon-arrow-down')
|
click(browser: instance, css: '.content.active div[data-tab="customer"] .js-actions .icon-arrow-down')
|
||||||
click(browser: instance, css: '.active div[data-tab="customer"] .js-actions [data-type="customer-change"]')
|
click(browser: instance, css: '.content.active div[data-tab="customer"] .js-actions [data-type="customer-change"]')
|
||||||
watch_for(
|
watch_for(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.modal',
|
css: '.modal',
|
||||||
|
@ -2072,12 +2072,12 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .tabsSidebar',
|
css: '.content.active .tabsSidebar',
|
||||||
value: data[:customer],
|
value: data[:customer],
|
||||||
)
|
)
|
||||||
|
|
||||||
# select tab
|
# select tab
|
||||||
click(browser: instance, css: '.active .tabsSidebar-tab[data-tab="ticket"]')
|
click(browser: instance, css: '.content.active .tabsSidebar-tab[data-tab="ticket"]')
|
||||||
|
|
||||||
end
|
end
|
||||||
if data[:body]
|
if data[:body]
|
||||||
|
@ -2102,17 +2102,17 @@ wait untill text in selector disabppears
|
||||||
if data[:group] == '-NONE-'
|
if data[:group] == '-NONE-'
|
||||||
|
|
||||||
# check if owner selection exists
|
# check if owner selection exists
|
||||||
count = instance.find_elements(css: '.active .sidebar select[name="group_id"] option').count
|
count = instance.find_elements(css: '.content.active .sidebar select[name="group_id"] option').count
|
||||||
assert_equal(0, count, 'owner selection should not be showm')
|
assert_equal(0, count, 'owner selection should not be showm')
|
||||||
|
|
||||||
# check count of agents, should be only 3 / - selection + master + agent on init screen
|
# check count of agents, should be only 3 / - selection + master + agent on init screen
|
||||||
count = instance.find_elements(css: '.active .sidebar select[name="owner_id"] option').count
|
count = instance.find_elements(css: '.content.active .sidebar select[name="owner_id"] option').count
|
||||||
assert_equal(3, count, 'check if owner selection is - selection + master + agent per default')
|
assert_equal(3, count, 'check if owner selection is - selection + master + agent per default')
|
||||||
|
|
||||||
else
|
else
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .sidebar select[name="group_id"]',
|
css: '.content.active .sidebar select[name="group_id"]',
|
||||||
value: data[:group],
|
value: data[:group],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -2123,7 +2123,7 @@ wait untill text in selector disabppears
|
||||||
if data[:priority]
|
if data[:priority]
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .sidebar select[name="priority_id"]',
|
css: '.content.active .sidebar select[name="priority_id"]',
|
||||||
value: data[:priority],
|
value: data[:priority],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -2132,7 +2132,7 @@ wait untill text in selector disabppears
|
||||||
if data[:state]
|
if data[:state]
|
||||||
select(
|
select(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '.active .sidebar select[name="state_id"]',
|
css: '.content.active .sidebar select[name="state_id"]',
|
||||||
value: data[:state],
|
value: data[:state],
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
|
@ -2313,7 +2313,7 @@ wait untill text in selector disabppears
|
||||||
screenshot(browser: instance, comment: 'ticket_open_by_overview_search')
|
screenshot(browser: instance, comment: 'ticket_open_by_overview_search')
|
||||||
instance.find_elements(partial_link_text: params[:number])[0].click
|
instance.find_elements(partial_link_text: params[:number])[0].click
|
||||||
sleep 1
|
sleep 1
|
||||||
number = instance.find_elements(css: '.active .ticketZoom-header .ticket-number')[0].text
|
number = instance.find_elements(css: '.content.active .ticketZoom-header .ticket-number')[0].text
|
||||||
if number !~ /#{params[:number]}/
|
if number !~ /#{params[:number]}/
|
||||||
screenshot(browser: instance, comment: 'ticket_open_by_overview_failed')
|
screenshot(browser: instance, comment: 'ticket_open_by_overview_failed')
|
||||||
raise "unable to search/find ticket #{params[:number]}!"
|
raise "unable to search/find ticket #{params[:number]}!"
|
||||||
|
@ -2359,7 +2359,7 @@ wait untill text in selector disabppears
|
||||||
#instance.find_element(partial_link_text: params[:number] } ).click
|
#instance.find_element(partial_link_text: params[:number] } ).click
|
||||||
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:number]}') .nav-tab-icon\").first().click()")
|
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:number]}') .nav-tab-icon\").first().click()")
|
||||||
sleep 1
|
sleep 1
|
||||||
number = instance.find_elements(css: '.active .ticketZoom-header .ticket-number')[0].text
|
number = instance.find_elements(css: '.content.active .ticketZoom-header .ticket-number')[0].text
|
||||||
if number !~ /#{params[:number]}/
|
if number !~ /#{params[:number]}/
|
||||||
screenshot(browser: instance, comment: 'ticket_open_by_search_failed')
|
screenshot(browser: instance, comment: 'ticket_open_by_search_failed')
|
||||||
raise "unable to search/find ticket #{params[:number]}!"
|
raise "unable to search/find ticket #{params[:number]}!"
|
||||||
|
@ -2395,7 +2395,7 @@ wait untill text in selector disabppears
|
||||||
#instance.find_element(partial_link_text: params[:title] } ).click
|
#instance.find_element(partial_link_text: params[:title] } ).click
|
||||||
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:title]}') .nav-tab-icon\").click()")
|
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:title]}') .nav-tab-icon\").click()")
|
||||||
sleep 1
|
sleep 1
|
||||||
title = instance.find_elements(css: '.active .ticketZoom-header .js-objectTitle')[0].text
|
title = instance.find_elements(css: '.content.active .ticketZoom-header .js-objectTitle')[0].text
|
||||||
if title !~ /#{params[:title]}/
|
if title !~ /#{params[:title]}/
|
||||||
screenshot(browser: instance, comment: 'ticket_open_by_title_failed')
|
screenshot(browser: instance, comment: 'ticket_open_by_title_failed')
|
||||||
raise "unable to search/find ticket #{params[:title]}!"
|
raise "unable to search/find ticket #{params[:title]}!"
|
||||||
|
@ -2483,7 +2483,7 @@ wait untill text in selector disabppears
|
||||||
#instance.find_element(partial_link_text: params[:value] } ).click
|
#instance.find_element(partial_link_text: params[:value] } ).click
|
||||||
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:value]}') .nav-tab-icon\").click()")
|
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:value]}') .nav-tab-icon\").click()")
|
||||||
sleep 1
|
sleep 1
|
||||||
name = instance.find_elements(css: '.active h1')[0].text
|
name = instance.find_elements(css: '.content.active h1')[0].text
|
||||||
if name !~ /#{params[:value]}/
|
if name !~ /#{params[:value]}/
|
||||||
screenshot(browser: instance, comment: 'organization_open_by_search_failed')
|
screenshot(browser: instance, comment: 'organization_open_by_search_failed')
|
||||||
raise "unable to search/find org #{params[:value]}!"
|
raise "unable to search/find org #{params[:value]}!"
|
||||||
|
@ -2518,7 +2518,7 @@ wait untill text in selector disabppears
|
||||||
#instance.find_element(partial_link_text: params[:value]).click
|
#instance.find_element(partial_link_text: params[:value]).click
|
||||||
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:value]}') .nav-tab-icon\").click()")
|
instance.execute_script("$(\".js-global-search-result a:contains('#{params[:value]}') .nav-tab-icon\").click()")
|
||||||
sleep 1
|
sleep 1
|
||||||
name = instance.find_elements(css: '.active h1')[0].text
|
name = instance.find_elements(css: '.content.active h1')[0].text
|
||||||
if name !~ /#{params[:value]}/
|
if name !~ /#{params[:value]}/
|
||||||
screenshot(browser: instance, comment: 'user_open_by_search_failed')
|
screenshot(browser: instance, comment: 'user_open_by_search_failed')
|
||||||
raise "unable to search/find user #{params[:value]}!"
|
raise "unable to search/find user #{params[:value]}!"
|
||||||
|
@ -2557,12 +2557,12 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/users"]',
|
css: '.content.active a[href="#manage/users"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[data-type="new"]',
|
css: '.content.active a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2630,12 +2630,12 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/slas"]',
|
css: '.content.active a[href="#manage/slas"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a.js-new',
|
css: '.content.active a.js-new',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2688,12 +2688,12 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/text_modules"]',
|
css: '.content.active a[href="#manage/text_modules"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[data-type="new"]',
|
css: '.content.active a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2749,23 +2749,23 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage"]',
|
css: 'a[href="#manage"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#channels/email"]',
|
css: '.content.active a[href="#channels/email"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#c-signature"]',
|
css: '.content.active a[href="#c-signature"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
sleep 4
|
sleep 4
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '#content #c-signature a[data-type="new"]',
|
css: '.content.active #c-signature a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2819,17 +2819,17 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage"]',
|
css: 'a[href="#manage"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/groups"]',
|
css: '.content.active a[href="#manage/groups"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[data-type="new"]',
|
css: '.content.active a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2859,14 +2859,14 @@ wait untill text in selector disabppears
|
||||||
data[:member].each { |login|
|
data[:member].each { |login|
|
||||||
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
||||||
sleep 1
|
sleep 1
|
||||||
instance.find_elements(css: 'a[href="#manage/users"]')[0].click
|
instance.find_elements(css: '.content.active a[href="#manage/users"]')[0].click
|
||||||
sleep 3
|
sleep 3
|
||||||
element = instance.find_elements(css: '#content [name="search"]')[0]
|
element = instance.find_elements(css: '.content.active [name="search"]')[0]
|
||||||
element.clear
|
element.clear
|
||||||
element.send_keys(login)
|
element.send_keys(login)
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => '#content table [data-id]')[0].click
|
#instance.find_elements(:css => '.content.active table [data-id]')[0].click
|
||||||
instance.execute_script('$("#content table [data-id] td").first().click()')
|
instance.execute_script('$(".content.active table [data-id] td").first().click()')
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
||||||
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
||||||
|
@ -2915,12 +2915,12 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/roles"]',
|
css: '.content.active a[href="#manage/roles"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[data-type="new"]',
|
css: '.content.active a[data-type="new"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -2961,14 +2961,14 @@ wait untill text in selector disabppears
|
||||||
data[:member].each { |login|
|
data[:member].each { |login|
|
||||||
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
||||||
sleep 1
|
sleep 1
|
||||||
instance.find_elements(css: 'a[href="#manage/users"]')[0].click
|
instance.find_elements(css: '.content.active a[href="#manage/users"]')[0].click
|
||||||
sleep 3
|
sleep 3
|
||||||
element = instance.find_elements(css: '#content [name="search"]')[0]
|
element = instance.find_elements(css: '.content.active [name="search"]')[0]
|
||||||
element.clear
|
element.clear
|
||||||
element.send_keys(login)
|
element.send_keys(login)
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => '#content table [data-id]')[0].click
|
#instance.find_elements(:css => '.content.active table [data-id]')[0].click
|
||||||
instance.execute_script('$("#content table [data-id] td").first().click()')
|
instance.execute_script('$(".content.active table [data-id] td").first().click()')
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
||||||
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
||||||
|
@ -3017,10 +3017,10 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage/roles"]',
|
css: '.content.active a[href="#manage/roles"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
instance.execute_script('$(\'#content table tr td:contains(" ' + data[:name] + '")\').first().click()')
|
instance.execute_script('$(\'.content.active table tr td:contains(" ' + data[:name] + '")\').first().click()')
|
||||||
|
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
element = instance.find_elements(css: '.modal input[name=name]')[0]
|
element = instance.find_elements(css: '.modal input[name=name]')[0]
|
||||||
|
@ -3070,14 +3070,14 @@ wait untill text in selector disabppears
|
||||||
data[:member].each { |login|
|
data[:member].each { |login|
|
||||||
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
instance.find_elements(css: 'a[href="#manage"]')[0].click
|
||||||
sleep 1
|
sleep 1
|
||||||
instance.find_elements(css: 'a[href="#manage/users"]')[0].click
|
instance.find_elements(css: '.content.active a[href="#manage/users"]')[0].click
|
||||||
sleep 3
|
sleep 3
|
||||||
element = instance.find_elements(css: '#content [name="search"]')[0]
|
element = instance.find_elements(css: '.content.active [name="search"]')[0]
|
||||||
element.clear
|
element.clear
|
||||||
element.send_keys(login)
|
element.send_keys(login)
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => '#content table [data-id]')[0].click
|
#instance.find_elements(:css => '.content.active table [data-id]')[0].click
|
||||||
instance.execute_script('$("#content table [data-id] td").first().click()')
|
instance.execute_script('$(".content.active table [data-id] td").first().click()')
|
||||||
sleep 3
|
sleep 3
|
||||||
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
#instance.find_elements(:css => 'label:contains(" ' + action[:name] + '")')[0].click
|
||||||
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
instance.execute_script('$(\'label:contains(" ' + data[:name] + '")\').first().click()')
|
||||||
|
@ -3204,13 +3204,13 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#system/object_manager"]',
|
css: '.content.active a[href="#system/object_manager"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
sleep 4
|
sleep 4
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '#content .js-new',
|
css: '.content.active .js-new',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
modal_ready(browser: instance)
|
modal_ready(browser: instance)
|
||||||
|
@ -3316,20 +3316,20 @@ wait untill text in selector disabppears
|
||||||
|
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#manage"]',
|
css: 'a[href="#manage"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#system/object_manager"]',
|
css: '.content.active a[href="#system/object_manager"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
sleep 4
|
sleep 4
|
||||||
|
|
||||||
instance = params[:browser] || @browser
|
instance = params[:browser] || @browser
|
||||||
data = params[:data]
|
data = params[:data]
|
||||||
r = instance.execute_script("$(\"#content td:contains('#{data[:name]}')\").first().closest('tr').find('.js-delete').click()")
|
r = instance.execute_script("$(\".content.active td:contains('#{data[:name]}')\").first().closest('tr').find('.js-delete').click()")
|
||||||
p "rrr #{r.inspect}"
|
#p "rrr #{r.inspect}"
|
||||||
end
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
@ -3353,17 +3353,17 @@ wait untill text in selector disabppears
|
||||||
)
|
)
|
||||||
click(
|
click(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: 'a[href="#system/object_manager"]',
|
css: '.content.active a[href="#system/object_manager"]',
|
||||||
mute_log: true,
|
mute_log: true,
|
||||||
)
|
)
|
||||||
sleep 4
|
sleep 4
|
||||||
|
|
||||||
element = instance.find_elements(css: '#content .js-discard').first
|
element = instance.find_elements(css: '.content.active .js-discard').first
|
||||||
element.click
|
element.click
|
||||||
|
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
browser: instance,
|
browser: instance,
|
||||||
css: '#content .js-discard',
|
css: '.content.active .js-discard',
|
||||||
)
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,71 +43,71 @@ class FacebookBrowserTest < TestCase
|
||||||
tasks_close_all()
|
tasks_close_all()
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#channels/facebook"]')
|
click(css: '.content.active a[href="#channels/facebook"]')
|
||||||
|
|
||||||
click(css: '#content .js-configApp')
|
click(css: '.content.active .js-configApp')
|
||||||
modal_ready()
|
modal_ready()
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=application_id]',
|
css: '.content.active .modal [name=application_id]',
|
||||||
value: app_id,
|
value: app_id,
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=application_secret]',
|
css: '.content.active .modal [name=application_secret]',
|
||||||
value: 'wrong',
|
value: 'wrong',
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Error',
|
value: 'Error',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=application_secret]',
|
css: '.content.active .modal [name=application_secret]',
|
||||||
value: app_secret,
|
value: app_secret,
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Error',
|
value: 'Error',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-new',
|
css: '.content.active .js-new',
|
||||||
value: 'add account',
|
value: 'add account',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-configApp')
|
click(css: '.content.active .js-configApp')
|
||||||
modal_ready()
|
modal_ready()
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=application_secret]',
|
css: '.content.active .modal [name=application_secret]',
|
||||||
value: 'wrong',
|
value: 'wrong',
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Error',
|
value: 'Error',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=application_secret]',
|
css: '.content.active .modal [name=application_secret]',
|
||||||
value: app_secret,
|
value: app_secret,
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Error',
|
value: 'Error',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-new',
|
css: '.content.active .js-new',
|
||||||
value: 'add account',
|
value: 'add account',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-new')
|
click(css: '.content.active .js-new')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: 'body',
|
css: 'body',
|
||||||
|
@ -131,7 +131,7 @@ class FacebookBrowserTest < TestCase
|
||||||
#sleep 10
|
#sleep 10
|
||||||
|
|
||||||
#watch_for(
|
#watch_for(
|
||||||
# css: '#content .modal',
|
# css: '.content.active .modal',
|
||||||
# value: '',
|
# value: '',
|
||||||
#)
|
#)
|
||||||
|
|
||||||
|
@ -140,44 +140,44 @@ class FacebookBrowserTest < TestCase
|
||||||
value: 'Dashboard',
|
value: 'Dashboard',
|
||||||
)
|
)
|
||||||
|
|
||||||
select(css: '#content .modal [name="pages::' + page_id + '::group_id"]', value: 'Users')
|
select(css: '.content.active .modal [name="pages::' + page_id + '::group_id"]', value: 'Users')
|
||||||
sleep 1
|
sleep 1
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Hansi Merkur',
|
value: 'Hansi Merkur',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .action:nth-child(1)'
|
css: '.content.active .main .action:nth-child(1)'
|
||||||
)
|
)
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .action:nth-child(2)'
|
css: '.content.active .main .action:nth-child(2)'
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-new')
|
click(css: '.content.active .js-new')
|
||||||
|
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
#click(css: '#login_button_inline')
|
#click(css: '#login_button_inline')
|
||||||
|
|
||||||
#watch_for(
|
#watch_for(
|
||||||
# css: '#content .modal',
|
# css: '.content.active .modal',
|
||||||
# value: 'Search Terms',
|
# value: 'Search Terms',
|
||||||
#)
|
#)
|
||||||
|
|
||||||
click(css: '#content .modal .js-close')
|
click(css: '.content.active .modal .js-close')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Hansi Merkur',
|
value: 'Hansi Merkur',
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .action:nth-child(1)'
|
css: '.content.active .main .action:nth-child(1)'
|
||||||
)
|
)
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .action:nth-child(2)'
|
css: '.content.active .main .action:nth-child(2)'
|
||||||
)
|
)
|
||||||
|
|
||||||
# watch till post is in app
|
# watch till post is in app
|
||||||
|
|
|
@ -46,70 +46,70 @@ class TwitterBrowserTest < TestCase
|
||||||
tasks_close_all()
|
tasks_close_all()
|
||||||
|
|
||||||
click(css: 'a[href="#manage"]')
|
click(css: 'a[href="#manage"]')
|
||||||
click(css: 'a[href="#channels/twitter"]')
|
click(css: '.content.active a[href="#channels/twitter"]')
|
||||||
click(css: '#content .js-configApp')
|
click(css: '.content.active .js-configApp')
|
||||||
sleep 2
|
sleep 2
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=consumer_key]',
|
css: '.content.active .modal [name=consumer_key]',
|
||||||
value: consumer_key,
|
value: consumer_key,
|
||||||
)
|
)
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=consumer_secret]',
|
css: '.content.active .modal [name=consumer_secret]',
|
||||||
value: 'wrong',
|
value: 'wrong',
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Authorization Required',
|
value: 'Authorization Required',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=consumer_secret]',
|
css: '.content.active .modal [name=consumer_secret]',
|
||||||
value: consumer_secret,
|
value: consumer_secret,
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Authorization Required',
|
value: 'Authorization Required',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-new',
|
css: '.content.active .js-new',
|
||||||
value: 'add account',
|
value: 'add account',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-configApp')
|
click(css: '.content.active .js-configApp')
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=consumer_secret]',
|
css: '.content.active .modal [name=consumer_secret]',
|
||||||
value: 'wrong',
|
value: 'wrong',
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Authorization Required',
|
value: 'Authorization Required',
|
||||||
)
|
)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
css: '#content .modal [name=consumer_secret]',
|
css: '.content.active .modal [name=consumer_secret]',
|
||||||
value: consumer_secret,
|
value: consumer_secret,
|
||||||
)
|
)
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
|
|
||||||
watch_for_disappear(
|
watch_for_disappear(
|
||||||
css: '#content .modal .alert',
|
css: '.content.active .modal .alert',
|
||||||
value: 'Authorization Required',
|
value: 'Authorization Required',
|
||||||
)
|
)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .js-new',
|
css: '.content.active .js-new',
|
||||||
value: 'add account',
|
value: 'add account',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .js-new')
|
click(css: '.content.active .js-new')
|
||||||
|
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
|
@ -131,59 +131,59 @@ class TwitterBrowserTest < TestCase
|
||||||
#)
|
#)
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal',
|
css: '.content.active .modal',
|
||||||
value: 'Search Terms',
|
value: 'Search Terms',
|
||||||
)
|
)
|
||||||
|
|
||||||
# add hash tag to search
|
# add hash tag to search
|
||||||
click(css: '#content .modal .js-searchTermAdd')
|
click(css: '.content.active .modal .js-searchTermAdd')
|
||||||
set(css: '#content .modal [name="search::term"]', value: hash)
|
set(css: '.content.active .modal [name="search::term"]', value: hash)
|
||||||
select(css: '#content .modal [name="search::group_id"]', value: 'Users')
|
select(css: '.content.active .modal [name="search::group_id"]', value: 'Users')
|
||||||
click(css: '#content .modal .js-submit')
|
click(css: '.content.active .modal .js-submit')
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Bob Mutschler',
|
value: 'Bob Mutschler',
|
||||||
)
|
)
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: "@#{twitter_user_login}",
|
value: "@#{twitter_user_login}",
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .action:nth-child(1)'
|
css: '.content.active .main .action:nth-child(1)'
|
||||||
)
|
)
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .action:nth-child(2)'
|
css: '.content.active .main .action:nth-child(2)'
|
||||||
)
|
)
|
||||||
|
|
||||||
# add account again
|
# add account again
|
||||||
click(css: '#content .js-new')
|
click(css: '.content.active .js-new')
|
||||||
|
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
click(css: '#allow')
|
click(css: '#allow')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content .modal',
|
css: '.content.active .modal',
|
||||||
value: 'Search Terms',
|
value: 'Search Terms',
|
||||||
)
|
)
|
||||||
|
|
||||||
click(css: '#content .modal .js-close')
|
click(css: '.content.active .modal .js-close')
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: 'Bob Mutschler',
|
value: 'Bob Mutschler',
|
||||||
)
|
)
|
||||||
watch_for(
|
watch_for(
|
||||||
css: '#content',
|
css: '.content.active',
|
||||||
value: "@#{twitter_user_login}",
|
value: "@#{twitter_user_login}",
|
||||||
)
|
)
|
||||||
exists(
|
exists(
|
||||||
css: '#content .main .action:nth-child(1)'
|
css: '.content.active .main .action:nth-child(1)'
|
||||||
)
|
)
|
||||||
exists_not(
|
exists_not(
|
||||||
css: '#content .main .action:nth-child(2)'
|
css: '.content.active .main .action:nth-child(2)'
|
||||||
)
|
)
|
||||||
|
|
||||||
# wait till new streaming of channel is active
|
# wait till new streaming of channel is active
|
||||||
|
@ -203,14 +203,14 @@ class TwitterBrowserTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
# watch till tweet is in app
|
# watch till tweet is in app
|
||||||
click( text: 'Overviews' )
|
click(text: 'Overviews')
|
||||||
|
|
||||||
# enable full overviews
|
# enable full overviews
|
||||||
execute(
|
execute(
|
||||||
js: '$(".content.active .sidebar").css("display", "block")',
|
js: '$(".content.active .sidebar").css("display", "block")',
|
||||||
)
|
)
|
||||||
|
|
||||||
click( text: 'Unassigned & Open' )
|
click(text: 'Unassigned & Open')
|
||||||
sleep 6 # till overview is rendered
|
sleep 6 # till overview is rendered
|
||||||
|
|
||||||
watch_for(
|
watch_for(
|
||||||
|
@ -224,7 +224,7 @@ class TwitterBrowserTest < TestCase
|
||||||
)
|
)
|
||||||
|
|
||||||
# reply via app
|
# reply via app
|
||||||
click( css: '.content.active [data-type="twitterStatusReply"]' )
|
click(css: '.content.active [data-type="twitterStatusReply"]')
|
||||||
|
|
||||||
ticket_update(
|
ticket_update(
|
||||||
data: {
|
data: {
|
||||||
|
@ -246,7 +246,7 @@ class TwitterBrowserTest < TestCase
|
||||||
value: '1234567890',
|
value: '1234567890',
|
||||||
)
|
)
|
||||||
|
|
||||||
click( css: '.content.active [data-type="twitterStatusReply"]' )
|
click(css: '.content.active [data-type="twitterStatusReply"]')
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
re_hash = "#{hash}re#{rand(99_999)}"
|
re_hash = "#{hash}re#{rand(99_999)}"
|
||||||
|
|
Loading…
Reference in a new issue