Small refactoring.

This commit is contained in:
Martin Edenhofer 2015-11-19 09:01:58 +01:00
parent 77a1fedd58
commit b31cae00fe

View file

@ -14,7 +14,7 @@ class Index extends App.ControllerContent
@locale = App.i18n.get() @locale = App.i18n.get()
@render() @render()
@bind( @bind(
'i18n:translation_update', 'i18n:translation_update_todo i18n:translation_update_list i18n:translation_update',
=> =>
@load() @load()
) )
@ -57,8 +57,10 @@ class Index extends App.ControllerContent
if !@translationToDo if !@translationToDo
@translationToDo = new TranslationToDo( @translationToDo = new TranslationToDo(
el: @$('.js-ToDo') el: @$('.js-ToDo')
locale: @locale locale: @locale
updateOnServer: @updateOnServer
getAttributes: @getAttributes
) )
@translationToDo.update( @translationToDo.update(
stringsNotTranslated: @stringsNotTranslated stringsNotTranslated: @stringsNotTranslated
@ -67,8 +69,10 @@ class Index extends App.ControllerContent
) )
if !@translationList if !@translationList
@translationList = new TranslationList( @translationList = new TranslationList(
el: @$('.js-List') el: @$('.js-List')
locale: @locale locale: @locale
updateOnServer: @updateOnServer
getAttributes: @getAttributes
) )
@translationList.update( @translationList.update(
stringsNotTranslated: @stringsNotTranslated stringsNotTranslated: @stringsNotTranslated
@ -86,7 +90,6 @@ class Index extends App.ControllerContent
console.log('rr') console.log('rr')
if @translationList.changes() if @translationList.changes()
App.Delay.set(rerender, 400) App.Delay.set(rerender, 400)
console.log('111', @translationList.changes())
hideAction: => hideAction: =>
@el.closest('.content').find('.js-changes').addClass('hidden') @el.closest('.content').find('.js-changes').addClass('hidden')
@ -97,7 +100,6 @@ class Index extends App.ControllerContent
message: 'Pushing translations to i18n.zammad.com' message: 'Pushing translations to i18n.zammad.com'
container: @el.closest('.content') container: @el.closest('.content')
) )
@ajax( @ajax(
id: 'translations' id: 'translations'
type: 'PUT' type: 'PUT'
@ -118,7 +120,6 @@ class Index extends App.ControllerContent
message: 'Reseting changes...' message: 'Reseting changes...'
container: @el.closest('.content') container: @el.closest('.content')
) )
@ajax( @ajax(
id: 'translations' id: 'translations'
type: 'POST' type: 'POST'
@ -139,7 +140,6 @@ class Index extends App.ControllerContent
message: 'Getting latest translations from i18n.zammad.com' message: 'Getting latest translations from i18n.zammad.com'
container: @el.closest('.content') container: @el.closest('.content')
) )
hide = => hide = =>
App.Event.trigger('i18n:translation_update') App.Event.trigger('i18n:translation_update')
@hideAction() @hideAction()
@ -164,6 +164,44 @@ class Index extends App.ControllerContent
@_syncChanges(locale, locales, loader, hide) @_syncChanges(locale, locales, loader, hide)
) )
updateOnServer: (params, event) =>
# update runtime if same language is used
if App.i18n.get() is params.locale
App.i18n.setMap(params.source, params.target, params.format)
# remove not needed attributes
delete params.field
if params.id
method = 'PUT'
url = "#{@apiPath}/translations/#{params.id}"
else
method = 'POST'
url = "#{@apiPath}/translations"
@ajax(
id: 'translations'
type: method
url: url
data: JSON.stringify(params)
processData: false
success: (data, status, xhr) ->
if event
App.Event.trigger(event)
)
getAttributes: (e) =>
field = $(e.target).closest('tr').find('.js-Item')
params =
id: field.data('id')
source: field.data('source')
format: field.data('format') || 'string'
initial: field.data('initial') || ''
target: field.val()
locale: @locale
field: field
class TranslationToDo extends App.Controller class TranslationToDo extends App.Controller
events: events:
'click .js-create': 'create' 'click .js-create': 'create'
@ -187,10 +225,16 @@ class TranslationToDo extends App.Controller
@html '' @html ''
return return
# add not translated items from runtime
if App.i18n.getNotTranslated(@locale) if App.i18n.getNotTranslated(@locale)
for key, value of App.i18n.getNotTranslated(@locale) for key, value of App.i18n.getNotTranslated(@locale)
item = [ '', key, '', ''] found = false
@stringsNotTranslated.push item for notTranslatedItem in @stringsNotTranslated
if key is notTranslatedItem[1]
found = true
if !found
item = [ '', key, '', '']
@stringsNotTranslated.push item
@html App.view('translation/todo')( @html App.view('translation/todo')(
list: @stringsNotTranslated list: @stringsNotTranslated
@ -198,86 +242,40 @@ class TranslationToDo extends App.Controller
create: (e) => create: (e) =>
e.preventDefault() e.preventDefault()
field = $(e.target).closest('tr').find('.js-Item') params = @getAttributes(e)
id = field.data('id') return if !params.target
source = field.data('source')
format = 'string'
target = field.val()
return if !target
# remove from not translated list # remove from not translated list
$(e.target).closest('tr').remove() $(e.target).closest('tr').remove()
# local update # local update
App.i18n.removeNotTranslated(@locale, source) App.i18n.removeNotTranslated(params.locale, params.source)
# update runtime if same language is used
if App.i18n.get() is @locale
App.i18n.setMap(source, target, 'string')
# remote update # remote update
params = params.target_initial = ''
locale: @locale @updateOnServer(params, 'i18n:translation_update_list')
source: source
target: target
target_initial: ''
if id
method = 'PUT'
params.id = id
url = "#{@apiPath}/translations/#{id}"
else
method = 'POST'
url = "#{@apiPath}/translations"
@ajax(
id: 'translations'
type: method
url: url
data: JSON.stringify(params)
processData: false
success: (data, status, xhr) ->
App.Event.trigger('i18n:translation_update')
)
same: (e) => same: (e) =>
e.preventDefault() e.preventDefault()
@hasChanges = true @hasChanges = true
field = $(e.target).closest('tr').find('.js-Item') params = @getAttributes(e)
source = field.data('source')
# remove from not translated list # remove from not translated list
$(e.target).closest('tr').remove() $(e.target).closest('tr').remove()
# local update # local update
App.i18n.removeNotTranslated(@locale, source) App.i18n.removeNotTranslated(params.locale, params.source)
# update runtime if same language is used
if App.i18n.get() is @locale
App.i18n.setMap(source, source, 'string')
# remote update # remote update
params = params.target_initial = ''
locale: @locale params.target = params.source
source: source @updateOnServer(params, 'i18n:translation_update_list')
target: source
target_initial: ''
@ajax(
id: 'translations'
type: 'POST'
url: @apiPath + '/translations'
data: JSON.stringify(params)
processData: false
success: (data, status, xhr) ->
App.Event.trigger('i18n:translation_update')
)
class TranslationList extends App.Controller class TranslationList extends App.Controller
hasChanges: false hasChanges: false
events: events:
'blur .js-translated input': 'updateItem' 'blur .js-translated input': 'updateItem'
'click .js-translated .js-Reset': 'resetItem' 'click .js-translated .js-Reset': 'resetItem'
constructor: -> constructor: ->
super super
@ -288,6 +286,7 @@ class TranslationList extends App.Controller
@render() @render()
render: => render: =>
return if _.isEmpty(@stringsTranslated)
@html App.view('translation/list')( @html App.view('translation/list')(
times: @times times: @times
strings: @stringsTranslated strings: @stringsTranslated
@ -299,66 +298,23 @@ class TranslationList extends App.Controller
resetItem: (e) -> resetItem: (e) ->
e.preventDefault() e.preventDefault()
@hasChanges = true @hasChanges = true
field = $(e.target).closest('tr').find('.js-Item') params = @getAttributes(e)
id = field.data('id')
source = field.data('source')
initial = field.data('initial')
format = field.data('format')
# update runtime if same language is used
if App.i18n.get() is @locale
App.i18n.setMap(source, initial, format)
# locale reset
field.val(initial)
@updateRow(id)
# remote reset # remote reset
params = params.target = params.initial
id: id @updateOnServer(params, 'i18n:translation_update')
target: initial
@ajax(
id: 'translations'
type: 'PUT'
url: "#{@apiPath}/translations/#{id}"
data: JSON.stringify(params)
processData: false
success: (data, status, xhr) ->
App.Event.trigger('i18n:translation_update')
)
updateItem: (e) -> updateItem: (e) ->
e.preventDefault() e.preventDefault()
@hasChanges = true @hasChanges = true
field = $(e.target).closest('tr').find('.js-Item') params = @getAttributes(e)
id = field.data('id') return if !params.target
source = field.data('source')
format = field.data('format')
target = field.val()
return if !target
# local update # local update
@updateRow(id) @updateRow(params.id)
# update runtime if same language is used
if App.i18n.get() is @locale
App.i18n.setMap(source, target, format)
# remote update # remote update
params = @updateOnServer(params)
id: id
target: target
@ajax(
id: 'translations'
type: 'PUT'
url: "#{@apiPath}/translations/#{id}"
data: JSON.stringify(params)
processData: false
success: (data, status, xhr) ->
App.Event.trigger('i18n:translation_update')
)
updateRow: (id) => updateRow: (id) =>
field = @$("[data-id=#{id}]") field = @$("[data-id=#{id}]")