function
writeAll(e) {
var
msgids = jQuery(e).parents(
"form"
).find(
"*[name=msgid[]]"
)
.map(
function
(i,n) {
return
jQuery(n).val();
}).get();
var
msgstrs = jQuery(e).parents(
"form"
).find(
"textarea[name=msgstr[]]"
)
.map(
function
(i,n) {
return
jQuery(n).val();
}).get();
var
pofile = jQuery(e).parents(
"form"
).find(
"input[name=pofile]"
).val();
jQuery.ajax({
url:
'/'
,
type:
'post'
,
data: {
'msgid[]'
: msgids,
'msgstr[]'
: msgstrs,
'pofile'
: pofile
},
success:
function
( ) {
jQuery.jGrowl(
"Updated"
);
}
});
return
false
;
}
var
EntryList = {
UI: { },
list: [ ],
i:
null
,
next:
function
() {
if
(
this
.i + 1 <
this
.list.length )
return
this
.list[++
this
.i];
},
prev:
function
() {
if
(
this
.i > 0 )
return
this
.list[ --
this
.i ];
},
current:
function
() {
return
this
.list[
this
.i];
},
fetch:
function
(lang,callback) {
var
that =
this
;
if
( ! lang ) lang =
""
;
$.getJSON(
'/api/entry/list/'
+ lang ,
function
(data){
that.list = data.entrylist;
that.i = 0;
callback(data);
});
},
save:
function
(cb) {
var
that =
this
;
var
record =
this
.current().id;
var
msgstr =
this
.current().msgstr;
$.ajax({
url:
'/api/entry/set'
,
type:
'post'
,
data: {
id: record,
msgstr: msgstr
},
dataType:
'json'
,
success:
function
(resp) {
if
(resp) {
$.jGrowl(
"Entry Saved: "
+ msgstr );
cb( resp );
}
}
});
}
};
EntryList.UI.EditPanel = {
init:
function
(lg) {
this
.lg = lg;
this
.current_lang = lg.code;
var
that =
this
;
$.get(
'/entry_edit'
,
function
(html) {
$(
'#panel'
).html( html );
var
entry = EntryList.current();
that.update(entry);
$(
'.prev-message'
).click(
function
(){
var
entry = EntryList.prev();
that.update(entry);
});
$(
'.skip-message'
).click(
function
() {
var
entry = EntryList.next();
that.update(entry);
});
$(
'.next-message'
).click(
function
() {
EntryList.current().msgstr = $(
'#current-msgstr'
).val();
EntryList.save(
function
(resp) {
var
entry = EntryList.next();
that.update(entry);
});
});
});
},
update:
function
(entry) {
var
lang =
this
.current_lang;
if
(!entry)
return
;
$(
'#current-lang'
).html(
"Current Language: "
+
this
.lg.name );
$(
'#current-msgid'
).html( entry.msgid );
$(
'#current-msgstr'
).val( entry.msgstr );
$(
'#current-id'
).val( entry.id );
var
g_el = $(
'#google-translation'
);
var
g_el_text = g_el.find(
'div.text'
);
if
( g_el.get(0) ) {
g_el.show();
g_el_text.html(
"Translating..."
);
}
else
{
g_el = $(
'<div/>'
).attr(
'id'
,
'google-translation'
).append( $(
'<div/>'
).addClass(
'text'
) );
$(
'#current-msgstr'
).after( g_el );
g_el = $(
'#google-translation'
);
g_el_text = g_el.find(
'div.text'
);
}
if
(
typeof
google !=
"undefined"
) {
google.language.translate( entry.msgid ,
""
, lang ,
function
(result) {
if
( result.error ) {
g_el_text.html(
"Error:"
+ result.error.message );
$.jGrowl( result.error.message , { header:
'Google Translation'
, theme:
'error'
, sticky: 1 } );
}
else
{
g_el_text.html( result.translation );
var
apply = $(
'<a/>'
).attr( { href:
'#'
, tabindex: 5 } ).html(
'Apply'
).addClass(
'apply'
).click(
function
(e) {
$(
'#current-msgstr'
).val( result.translation );
g_el.fadeOut(
'slow'
);
});
g_el_text.append( apply );
}
});
}
$(
'#current-msgstr'
).focus( );
}
};
$(document.body).ready(
function
() {
jQuery.getJSON(
'/api/podata'
,
function
(langdata) {
var
langlistel = jQuery(
'#langlist'
);
for
(
var
lang
in
langdata ) {
(
function
(lang) {
var
lg = langdata[lang];
var
link = jQuery(
'<li/>'
).html( jQuery(
'<a/>'
).html( lg.name ).click(
function
(e) {
EntryList.fetch( lang ,
function
(data) {
EntryList.UI.EditPanel.init( lg );
});
} ));
langlistel.append( link );
})( lang );
}
});
});