Moved toggle for translation inline to widget. Just listen to events if feature is active.
This commit is contained in:
parent
db0b434eb6
commit
3a649527bc
3 changed files with 69 additions and 52 deletions
|
@ -94,7 +94,6 @@ class App.ChannelChatDesigner extends App.Controller
|
||||||
|
|
||||||
# select tab
|
# select tab
|
||||||
tab.addClass('is-selected').siblings().removeClass('is-selected')
|
tab.addClass('is-selected').siblings().removeClass('is-selected')
|
||||||
|
|
||||||
value = tab.attr('data-value')
|
value = tab.attr('data-value')
|
||||||
width = parseInt value, 10
|
width = parseInt value, 10
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
class Widget
|
class Widget extends App.Controller
|
||||||
constructor: ->
|
constructor: ->
|
||||||
|
super
|
||||||
|
|
||||||
|
# only admins can do this
|
||||||
|
return if !@isRole('Admin')
|
||||||
|
|
||||||
# bind on key down
|
# bind on key down
|
||||||
# if ctrl+alt+t is pressed, enable translation_inline and fire ui:rerender
|
# if ctrl+alt+t is pressed, enable translation_inline and fire ui:rerender
|
||||||
|
@ -14,11 +18,69 @@ class Widget
|
||||||
)
|
)
|
||||||
|
|
||||||
enable: ->
|
enable: ->
|
||||||
|
# load in collection if needed
|
||||||
|
meta = App.i18n.meta()
|
||||||
|
if !@mapLoaded && meta && meta.mapToLoad
|
||||||
|
@mapLoaded = true
|
||||||
|
App.Translation.refresh(meta.mapToLoad, {clear: true} )
|
||||||
|
|
||||||
|
# enable translation inline
|
||||||
App.Config.set('translation_inline', true)
|
App.Config.set('translation_inline', true)
|
||||||
|
|
||||||
|
# rerender controllers
|
||||||
App.Event.trigger('ui:rerender')
|
App.Event.trigger('ui:rerender')
|
||||||
|
|
||||||
|
# observe if text has been translated
|
||||||
|
$('body')
|
||||||
|
.on '.translation', 'focus', (e) ->
|
||||||
|
element = $(e.target)
|
||||||
|
element.data 'before', element.html()
|
||||||
|
element
|
||||||
|
.on '.translation', 'blur', (e) =>
|
||||||
|
element = $(e.target)
|
||||||
|
source = element.attr('title')
|
||||||
|
|
||||||
|
# get new translation
|
||||||
|
translation_new = element.html()
|
||||||
|
translation_new = ('' + translation_new)
|
||||||
|
.replace(/<.+?>/g, '')
|
||||||
|
|
||||||
|
# set new translation
|
||||||
|
element.html(translation_new)
|
||||||
|
|
||||||
|
# update translation
|
||||||
|
return if element.data('before') is translation_new
|
||||||
|
App.Log.debug 'translation_inline', 'translate update', translation_new, 'before', element.data
|
||||||
|
element.data 'before', translation_new
|
||||||
|
|
||||||
|
# update runtime translation mapString
|
||||||
|
App.i18n.setMap(source, translation_new)
|
||||||
|
|
||||||
|
# replace rest in page
|
||||||
|
$(".translation[title='#{source}']").html(translation_new)
|
||||||
|
|
||||||
|
# update permanent translation mapString
|
||||||
|
translation = App.Translation.findByAttribute('source', source)
|
||||||
|
if translation
|
||||||
|
translation.updateAttribute('target', translation_new)
|
||||||
|
else
|
||||||
|
translation = new App.Translation
|
||||||
|
translation.load(
|
||||||
|
locale: @locale
|
||||||
|
source: source
|
||||||
|
target: translation_new
|
||||||
|
)
|
||||||
|
translation.save()
|
||||||
|
|
||||||
|
element
|
||||||
|
|
||||||
disable: ->
|
disable: ->
|
||||||
|
$('body').off('.translation')
|
||||||
|
|
||||||
|
# disable translation inline
|
||||||
App.Config.set('translation_inline', false)
|
App.Config.set('translation_inline', false)
|
||||||
|
|
||||||
|
# rerender controllers
|
||||||
App.Event.trigger('ui:rerender')
|
App.Event.trigger('ui:rerender')
|
||||||
|
|
||||||
App.Config.set( 'translation_inline', Widget, 'Widgets' )
|
App.Config.set( 'translation_inline', Widget, 'Widgets' )
|
|
@ -89,50 +89,6 @@ class _i18nSingleton extends Spine.Module
|
||||||
@dateFormat = 'yyyy-mm-dd'
|
@dateFormat = 'yyyy-mm-dd'
|
||||||
@timestampFormat = 'yyyy-mm-dd HH:MM'
|
@timestampFormat = 'yyyy-mm-dd HH:MM'
|
||||||
|
|
||||||
# observe if text has been translated
|
|
||||||
$('body')
|
|
||||||
.delegate '.translation', 'focus', (e) ->
|
|
||||||
$this = $(e.target)
|
|
||||||
$this.data 'before', $this.html()
|
|
||||||
return $this
|
|
||||||
.delegate '.translation', 'blur', (e) =>
|
|
||||||
$this = $(e.target)
|
|
||||||
source = $this.attr('title')
|
|
||||||
|
|
||||||
# get new translation
|
|
||||||
translation_new = $this.html()
|
|
||||||
translation_new = ('' + translation_new)
|
|
||||||
.replace(/<.+?>/g, '')
|
|
||||||
|
|
||||||
# set new translation
|
|
||||||
$this.html(translation_new)
|
|
||||||
|
|
||||||
# update translation
|
|
||||||
return if $this.data('before') is translation_new
|
|
||||||
@log 'debug', 'translate Update', translation_new, $this.data, 'before'
|
|
||||||
$this.data 'before', translation_new
|
|
||||||
|
|
||||||
# update runtime translation mapString
|
|
||||||
@mapString[source] = translation_new
|
|
||||||
|
|
||||||
# replace rest in page
|
|
||||||
$(".translation[title='#{source}']").html(translation_new)
|
|
||||||
|
|
||||||
# update permanent translation mapString
|
|
||||||
translation = App.Translation.findByAttribute('source', source)
|
|
||||||
if translation
|
|
||||||
translation.updateAttribute('target', translation_new)
|
|
||||||
else
|
|
||||||
translation = new App.Translation
|
|
||||||
translation.load(
|
|
||||||
locale: @locale
|
|
||||||
source: source
|
|
||||||
target: translation_new
|
|
||||||
)
|
|
||||||
translation.save()
|
|
||||||
|
|
||||||
return $this
|
|
||||||
|
|
||||||
get: ->
|
get: ->
|
||||||
@locale
|
@locale
|
||||||
|
|
||||||
|
@ -211,18 +167,18 @@ class _i18nSingleton extends Spine.Module
|
||||||
mapToLoad.push item
|
mapToLoad.push item
|
||||||
|
|
||||||
@mapMeta.translated = mapToLoad.length
|
@mapMeta.translated = mapToLoad.length
|
||||||
|
@mapMeta.mapToLoad = mapToLoad
|
||||||
# load in collection if needed
|
|
||||||
if !_.isEmpty(mapToLoad)
|
|
||||||
App.Translation.refresh(mapToLoad, {clear: true} )
|
|
||||||
|
|
||||||
App.Event.trigger('i18n:language:change')
|
App.Event.trigger('i18n:language:change')
|
||||||
)
|
)
|
||||||
|
|
||||||
translateInline: (string, args) =>
|
translateInline: (string, args) =>
|
||||||
|
return string if !string
|
||||||
App.Utils.htmlEscape(@translate(string, args))
|
App.Utils.htmlEscape(@translate(string, args))
|
||||||
|
|
||||||
translateContent: (string, args) =>
|
translateContent: (string, args) =>
|
||||||
|
return string if !string
|
||||||
|
|
||||||
if App.Config.get('translation_inline')
|
if App.Config.get('translation_inline')
|
||||||
return '<span class="translation" onclick="arguments[0].stopPropagation(); return false" contenteditable="true" title="' + App.Utils.htmlEscape(string) + '">' + App.Utils.htmlEscape(@translate(string)) + '</span>'
|
return '<span class="translation" onclick="arguments[0].stopPropagation(); return false" contenteditable="true" title="' + App.Utils.htmlEscape(string) + '">' + App.Utils.htmlEscape(@translate(string)) + '</span>'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue