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