Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix language switching and login/logout in SALSAH #331

Merged
merged 5 commits into from
Nov 28, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 85 additions & 60 deletions salsah/src/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -78,32 +78,6 @@
/*
* language selection
*/
$(function() {
var lc = $('#langctrl');

var build_lang_ctrl = function() {
if (SALSAH.userdata.lang === undefined) SALSAH.userdata.lang = 'de';
for (var l in langs) {
if (l == SALSAH.userdata.lang) {
lc.append(' ' + l)
}
else {
lc.append(' ').append($('<a>').attr({href: '#'}).data({lang: l, language_id: SALSAH.userdata.lang[l]}).on('click', function(data) {
if (confirm(s_('_langchangeq'))) {
SALSAH.ApiPost('userdata', {lang: $(this).data('lang')}, function(data) {
location.reload();
});
}
return false;
}).append(l))
}
}
}

build_lang_ctrl();

});

SALSAH.reset_project_selection = function() {
$('#projectctrl').text(s_('_project') + ' : ');
if (SALSAH.userdata === null) {
Expand Down Expand Up @@ -150,11 +124,30 @@
}
};

$(function() {
SALSAH.reset_project_selection();
});

$(function(){
// Called after language data has been loaded below.
function init_gui() {
var lc = $('#langctrl');

var build_lang_ctrl = function() {
if (SALSAH.userdata.lang === undefined) SALSAH.userdata.lang = 'de';
for (var l in langs) {
if (l == SALSAH.userdata.lang) {
lc.append(' ' + l);
}
else {
lc.append(' ').append($('<a>').attr({href: '#'}).data({lang: l, language_id: SALSAH.userdata.lang[l]}).on('click', function(data) {
if (confirm(s_('_langchangeq'))) {
var newref = 'http://' + window.location.host + window.location.pathname + '?lang=' + $(this).data('lang');
location.replace(newref);
}
return false;
}).append(l));
}
}
}

build_lang_ctrl();

$('#login_title').text(s_('_login'));
$('#logout_title').text(s_('_logout'));
$('#username_label').text(s_('_username'));
Expand All @@ -163,7 +156,7 @@
$('#cancel_login').attr({src: 'app/icons/32x32/delete.png', title: s_('_cancel')}).on('click', function(event){
$('#dologin').simpledialog('loginbox', 'close');
});
$('#logout_button').attr({src: 'app/icons/32x32/shut_down.png'})
$('#logout_button').attr({src: 'app/icons/32x32/shut_down.png'});
$('#cancel_logout').attr({src: 'app/icons/32x32/green_arrow_up.png', title: s_('_cancel')}).on('click', function(event){
$('#dologout').simpledialog('logoutbox', 'close');
});
Expand All @@ -173,29 +166,34 @@
if (event.keyCode == 27) $('#cancel_login').click(); // esc
});
$('#password').on('keydown', function(event) {
if (event.keyCode == 13) $('#login_button').click(); // enter
//if (event.keyCode == 13) $('#login_button').click(); // enter
if (event.keyCode == 27) $('#cancel_login').click(); // esc
});

//$('#dologin').simpledialog('loginbox', {'class': 'loginbox', width: 400, positioning: 'upper', focus: '#user_id'});
//$('#dologout').simpledialog('logoutbox', {'class': 'loginbox', width: 400, positioning: 'upper'});
$('#userctrl').append($('<img>').attr({id: 'dologin', src: 'app/icons/24x24/user.png', title: s_('_login')})
.simpledialog('loginbox', {'class': 'loginbox', width: 400, positioning: 'upper', focus: '#user_id'}));
var json_userdata;
if ((json_userdata = window.sessionStorage.getItem('userdata')) != null) {
SALSAH.userdata = JSON.parse(json_userdata);
}
SALSAH.reset_project_selection();

$('#login_button').on('click', function(){
var credentials = {
salsah_username: $('#user_id').val(),
salsah_password: $('#password').val()
};

SALSAH.ApiPost('session', {username: credentials.salsah_username, password: credentials.salsah_password}, function(data) {

if (data.status == ApiErrors.OK) {

// The login to Knora is successful.
// Now do a request to Sipi providing the Knora session id.
// When retrieving a file from Sipi (e.g. an IIIF URL), Sipi can send the session id to Knora with the request,
// identifying the user that is making the request to Knora.
window.sessionStorage.setItem('userdata', JSON.stringify(SALSAH.userdata));

$.ajax({
url: SIPI_URL + SIPI_LOGIN_ROUTE,
type: "POST",
Expand All @@ -209,21 +207,33 @@
if (errorThrown !== undefined && jqXHR !== undefined && jqXHR.responseJSON !== undefined) {
alert("Sipi returned error " + errorThrown + " with message: " + jqXHR.responseJSON['message']);
} else {
alert("Call to Sipi failed")
alert("Call to Sipi failed");
}
}
});

$('#dologin').simpledialog('loginbox', 'close');


//SALSAH.reload_css();

$('#userctrl').empty().append(s_('_user') + ' : ' + SALSAH.userdata.username)
.append($('<img>').attr({id: 'dologout', src: 'app/icons/24x24/delete_user.png', title: s_('_logout')})
.simpledialog('logoutbox', {'class': 'loginbox', width: 400, positioning: 'upper'})
);
if (SALSAH.reset_project_selection !== undefined) SALSAH.reset_project_selection();


if (SALSAH.userdata.projects_info) {
var active_project = SALSAH.userdata.active_project;
var selele;
$('#searchlimsel')
.empty()
.append(s_('_limitsearch'))
.append(selele = $('<select>').attr({id: 'limitproject', title: 'limit search to project'}));
selele.append($('<option>').attr({title: 'ALl'}).val(-1).text('-'));
for (var p in SALSAH.userdata.projects_info) {
selele.append($('<option>').attr({title: SALSAH.userdata.projects_info[p].longname}).val(SALSAH.userdata.projects_info[p].id).text(SALSAH.userdata.projects_info[p].shortname));
}
}

}
else {
alert(data.errormsg);
Expand All @@ -235,7 +245,8 @@
$('#logout_button').on('click', function() {
SALSAH.ApiDelete('session', function(data) {
if (data.status == ApiErrors.OK) {

window.sessionStorage.removeItem('userdata');
SALSAH.userdata = null;
// invalidate cookie obtained from Sipi when logging in to Knora
$.ajax({
url: SIPI_URL + SIPI_LOGOUT_ROUTE,
Expand All @@ -245,9 +256,9 @@
},
error: function(jqXHR, textStatus, errorThrown) {
if (errorThrown !== undefined) {
alert("Sipi returned an error: " + errorThrown)
alert("Sipi returned an error: " + errorThrown);
} else {
alert("Call to Sipi failed")
alert("Call to Sipi failed");
}
}
});
Expand All @@ -258,12 +269,13 @@
.simpledialog('loginbox', {'class': 'loginbox', width: 400, positioning: 'upper', focus: '#user_id'})
);
if (SALSAH.reset_project_selection !== undefined) SALSAH.reset_project_selection();
$('#searchlimsel').empty();
}
else {
alert(data.errormsg);
$('#dolout').simpledialog('logoutbox', 'close');
}
})
});
});

if (SALSAH.userdata.user_id !== undefined) {
Expand All @@ -284,24 +296,10 @@
RESVIEW.LinkageWindow(RESVIEW.winclass);
})
);
});

//
// search
//
$(function(){
if (SALSAH.userdata.projects_info) {
var active_project = SALSAH.userdata.active_project;
var selele;
$('#searchctrl').append(strings['_limitsearch']);
$('#searchctrl').append(selele = $('<select>').attr({id: 'limitproject', title: 'limit search to project'}));
selele.append($('<option>').attr({title: 'ALl'}).val(-1).text('-'));
for (var p in SALSAH.userdata.projects_info) {
selele.append($('<option>').attr({title: SALSAH.userdata.projects_info[p].longname}).val(SALSAH.userdata.projects_info[p].id).text(SALSAH.userdata.projects_info[p].shortname));
}
}

$('#searchctrl').append($('<input>').attr({
$('#searchctrl').append(
$('<span>').attr({id: "searchlimsel"})
).append($('<input>').attr({
type: 'text',
id: 'simplesearch',
name: 'simplesearch'
Expand Down Expand Up @@ -333,6 +331,33 @@
})
);


if (SALSAH.userdata.projects_info) {
var active_project = SALSAH.userdata.active_project;
var selele;
$('#searchlimsel')
.empty()
.append(s_('_limitsearch'))
.append(selele = $('<select>').attr({id: 'limitproject', title: 'limit search to project'}));
selele.append($('<option>').attr({title: 'ALl'}).val(-1).text('-'));
for (var p in SALSAH.userdata.projects_info) {
selele.append($('<option>').attr({title: SALSAH.userdata.projects_info[p].longname}).val(SALSAH.userdata.projects_info[p].id).text(SALSAH.userdata.projects_info[p].shortname));
}
}

};

$(function(){
if (urlparams["lang"] !== undefined) {
SALSAH.userdata = {lang: urlparams["lang"]};
}
else {
SALSAH.userdata = {lang: 'en'};
}
$.get('lang/' + SALSAH.userdata.lang + '.json', function(data) {
strings = data;
init_gui();
}, 'json');
});
</script>
<link id="loadcss" rel="stylesheet" type="text/css" href="default.css" />
Expand Down
25 changes: 19 additions & 6 deletions salsah/src/public/js/00_init_javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,21 @@
* License along with Knora. If not, see <http://www.gnu.org/licenses/>.
*/


function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}


var API_URL = 'http://localhost:3333';
var SIPI_URL = 'http://localhost:1024';
var SIPI_LOGIN_ROUTE = '/Knora_login';
Expand All @@ -35,13 +50,11 @@ var SITE_URL;
var RESVIEW = {
winclass: '.workwintab'
};
var SALSAH = {};
SALSAH.userdata = {lang: 'en'};

var strings = {};
$.get('lang/' + SALSAH.userdata.lang + '.json', function(data) {
strings = data;
}, 'json');
var urlparams = getUrlVars();

var SALSAH = {}; // Populated in index.html.
var strings = {}; // Populated in index.html.

var searchresult_window_title = "searchresult";
var extendedsearch_window_title = "Erweiterte Suche";
Expand Down
2 changes: 1 addition & 1 deletion salsah/src/public/lang/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
"_hlist_node_expl" : "Klicken sie unten auf %s, um den Knoten zu löschen, oder auf %s, um ohne löschen das Fenster zu schliessen!",
"_salsah_help" : "SALSAH Hilfe",
"_limitsearch" : "Suche eingrenzen auf",
"_langchangeq" : "Sprache der Benutzeroberfläche ändern ?",
"_langchangeq" : "Sprache der Benutzeroberfläche ändern (nicht gesicherte änderungen gehen verloren)?",
"_select_all" : "Alle auswählen",
"_deselect_all" : "Alle abwählen",
"_alert_missing_restype" : "Bitte einen Resource-Typen wählen",
Expand Down
2 changes: 1 addition & 1 deletion salsah/src/public/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
"_hlist_node_expl" : "Please click on %s below to delete the node, or %s to return without deleting it!",
"_salsah_help" : "SALSAH Help",
"_limitsearch" : "Limit search to",
"_langchangeq" : "Change language of GUI ?",
"_langchangeq" : "Change language of GUI (unsaved changes will be lost)?",
"_select_all" : "Select all",
"_deselect_all" : "Deselect all",
"_alert_missing_restype" : "You have to choose a resource type!",
Expand Down
2 changes: 1 addition & 1 deletion salsah/src/public/lang/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
"_hlist_node_expl" : "Clickez sur %s en-dessous pour effacer le nœud, ou sur %s pour fermer la fenêtre sans effaces le nœud!",
"_salsah_help" : "SALSAH Aide",
"_limitsearch" : "Limiter la recherche sur",
"_langchangeq" : "Changer la langue de l'interface utilisateur ?",
"_langchangeq" : "Changer la langue de l'interface utilisateur (les modifications non enregistrées seront perdues)?",
"_valinfo" : "Information sur la valeur",
"_creation_date": "Date de création"
}
2 changes: 1 addition & 1 deletion salsah/src/public/lang/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@
"_hlist_delete" : "Estinguere la gerarchia",
"_salsah_help" : "SALSAH Aiuto",
"_limitsearch" : "Restringere la ricerca a",
"_langchangeq" : "Cambiare la lingua dell'interfaccia utente ?",
"_langchangeq" : "Cambiare la lingua dell'interfaccia utente (le modificazioni non memorizzate saranno perdute)?",
"_valinfo" : "Informazione sul valore",
"_creation_date": "Data di creazione"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.knora.salsah.browser

import akka.actor.ActorSystem
import akka.util.Timeout

import scala.concurrent.duration._

/**
* Tests the internationalization of the SALSAH GUI.
*/
class InternationalizationSpec extends SalsahSpec {
/*

We use the Selenium API directly instead of the ScalaTest wrapper, because the Selenium API is more
powerful and more efficient.

See https://selenium.googlecode.com/git/docs/api/java/index.html?org/openqa/selenium/WebDriver.html
for more documentation.

*/


private val page = new SalsahPage

// How long to wait for results obtained using the 'eventually' function
implicit private val patienceConfig = page.patienceConfig

implicit private val timeout = Timeout(180.seconds)

implicit private val system = ActorSystem()

implicit private val dispatcher = system.dispatcher

private val rdfDataObjectsJsonList: String =
"""
[
{"path": "../knora-ontologies/knora-base.ttl", "name": "http://www.knora.org/ontology/knora-base"},
{"path": "../knora-ontologies/knora-dc.ttl", "name": "http://www.knora.org/ontology/dc"},
{"path": "../knora-ontologies/salsah-gui.ttl", "name": "http://www.knora.org/ontology/salsah-gui"},
{"path": "_test_data/ontologies/anything-onto.ttl", "name": "http://www.knora.org/ontology/anything"},
{"path": "_test_data/all_data/anything-data.ttl", "name": "http://www.knora.org/data/anything"}
]
"""

// In order to run these tests, start `webapi` using the option `allowResetTriplestoreContentOperationOverHTTP`

"The SALSAH home page" should {
"load test data" in {
loadTestData(rdfDataObjectsJsonList)
}

"change the user interface language" in {
page.load()
page.getSimpleSearchField.getAttribute("value") should be("Search")
page.changeLanguage("fr")
page.getSimpleSearchField.getAttribute("value") should be("Recherche")
}
}
}
Loading