/**
* @fileOverview This is the main file, contains main app function (jquery-initialization).
* The app main function runs setup functionality, which covers this domains:
*
* - the variable initialization
-
*
- functions from mdservice_searchclause.js, mdservice_widget.js, mdservice_ui_helpers.js
* - loadData()
* - loading data from repository and creating particular client-side representations - functions from mdservice_ui_load.js
* - creating of ui-layout
* - i.e. split UI to individual panes - functions from mdservice_ui_layout.js
* - addFunctionality()
* - bind handlers to events of ui-elements (function directly in mdservice_ui.js)
*
* @author
* @version
*/
$(function(){
// turn on debugging (see jquery.xslTransform.js)
var DEBUG = false;
// check for jQuery
try{
jQuery;
}catch(e){
alert('You need to include jQuery!');
}
/////// INIT VARIABLE SETTINGS
url_params = getUrlVars();
workspace = new Workspace();
// create widgets
columns_widget = new ListWidget($('#columns-widget'), "columns");
collections_widget = new ListWidget($('#collections-widget'), "collections");
listwidgetset.add(columns_widget);
listwidgetset.add(collections_widget);
//////////// LOAD DATA
loadData();
addFunctionality();
////////////// CREATE UI-LAYOUT
createBlock('base','');
createLayouts('base');
// ??autocomplete correction
initDetailFloat();
searchclauseset.addsearchclause(new SearchClause("","",""),"",0,0);
createInfos();
detailcaller.calldetail(undefined, "info");
});
function createInfos(){
var info = "";
$('.cmds-ui-block').children('.header').append(info);
createTooltip($('.cmds-ui-block').children('.header'));
$('.cmds-ui-block').children('.header').children('.cmd_info').click(function(){
//var a = $(this).parent().next().attr('id');
//var uri = window.location.pathname + "static/info.xml";
//$.get(uri,{"id":a}, showDetail,'html');
detailcaller.calldetail($(this));
return false;
});
}
function getSelectedRepository(){
return $('select[name="x-context"]').find("option:selected").val();
}
function getInputMode(){
if ($('#searchclauselist').is(":visible")){
return 'complex';
}
return 'simple';
}
/**
* This function is called during the initialization sequence and binds event-handlers to events of ui-elements.
* @function
*/
function addFunctionality(){
//change context_selects
$('select[name=x-context]').live('change',function(event){
event.preventDefault();
//delete the autocomplete arrays, reset the index input values
//element_autocomplete.splice(0, element_autocomplete.length);
//element_autocomplete_explain.splice(0, element_autocomplete_explain.length );
//searchclauseset.clear();
//load new
loadTermsAutocompleteExplain();
searchclauseset.initAutocomplete(false);
});
//switch the input simple query vs complex query
$('#switch-input').live('click',function(){
$('#searchclauselist').toggle();
$('#input-simplequery').toggle();
if (getInputMode() == 'complex'){
searchclauseset.sctext = $('#input-simplequery').attr("value");
searchclauseset.buildfromquerystring();
} else {
$('#input-simplequery').attr("value",searchclauseset.buildsctext());
}
});
// DEL COMMAND
/*
$('.ui-dialog-titlebar .cmd_del').live('click',function(){
var did;
if ($(this).closest('.ui-dialog').length > 0){
did = $(this).closest('.ui-dialog').find('.detail-wrapper').attr('id');
}
if (did != undefined){
detail = detailcaller.getdetail(did);
detail.close();
}
$(this).closest('.ui-dialog').hide();
})
*/
/**
* Remove a query from queryset
* FIXME: shouldn't this primarily delete the query-object from the queryset?
* @event
* @name clickQueryremove
*/
$('.query_header .cmd_del').live('click', function(){
$(this).closest('.query_wrapper').remove();
});
//TODO dialog
$('.detail-header .cmd_del').live('click', function(){
var did, detail;
if ($(this).parent().hasClass('detail-header')){
var dw = $(this).closest('.detail-wrapper');
did = dw.attr('id');
dw.hide();
}
else {
if ($(this).parent().siblings('.ui-dialog-content').length > 0){
did = $(this).parent().siblings('.ui-dialog-content').find('.detail-wrapper').attr('id');
}
}
if (did != undefined){
detail = detailcaller.getdetail(did);
detail.close();
}
});
// DETAIL-CALLER
$('.detail-caller a').live('click', function(event) {
event.preventDefault();
});
// open detail (from result-set, but also already within detail-view (ResourceRef, IsPartOf)
$('.result a.internal, .mdrecord-detail a.internal').live('click', function(event) {
event.preventDefault();
var uri = $(this).attr('href');
detailcaller.calldetail(undefined, "record", uri);
});
$('.detail-content a').live('click', function(event) {
if ($(this).attr("target") == "_blank"){
return true;
} else {
event.preventDefault();
var uri = $(this).attr('href'); // + " body";
if ($(this).attr("class") == "query"){
var urlparams = getUrlVars(uri);
loadQueryFromUriParams(urlparams);
} else {
var type;
if ($(this).attr("class") == "bookmark"){
type = "record";
} else {
type = $(this).parents('.detail-wrapper').attr("id");
type = type.substring(7,type.length);
}
// $.get(uri, showDetail,'html'); */
detailcaller.calldetail(undefined, type, uri);
}
}
});
$('.result a.external, .mdrecord-detail a.external').live('click', function(event) {
//event.preventDefault();
var uri = $(this).attr('href'); // + " body";
notifyUser('resource-link: ' + uri,'debug' );
// $.get(uri, showDetail,'html'); */
});
/*
$('.result .cmd_detail').live('click', function(event) {
//var qid = $(this).closest('.query_wrapper').attr('id');
//var query = queryset.getQuery(qid);
var uri = $(this).parent().find("a").attr('href'); // + " body";
$.get(uri, showDetail,'html');
});
*/
$(".detail-caller, .cmd_detail").live('click',function(event) {
event.preventDefault();
detailcaller.calldetail($(this));
});
$(".detail-caller-inline").live('click',function(event) {
event.preventDefault();
$(this).parent().children('.detail').toggle();
$(this).children('.cmd_down, .cmd_up').toggleClass('cmd_down cmd_up');
});
$('.cmd_sc_autocomplete').live('click', function(event) {
var i = $(this).closest('.sc-i').attr('id');
var j = $(this).closest('.sc-j').attr('id');
searchclauseset.searchclauses[i][j].initAutocomplete($(this).hasClass('cmd_sca_explain'));
$(this).toggleClass('cmd_sca_explain cmd_sca_smc');
});
// cmd_up cmd_down
$('.cmd_up').live('click', function(event) {
if ($(this).closest('.detail-wrapper').length > 0 ) {
$(this).closest('.detail-wrapper').find('.detail-content').hide();
} else {
$(this).closest('.query_wrapper').find('.result').hide();
}
$(this).toggleClass('cmd_down cmd_up');
});
$('.cmd_down').live('click', function(event) {
if ($(this).closest('.detail-wrapper').length > 0 ) {
$(this).closest('.detail-wrapper').find('.detail-content').show();
} else {
$(this).closest('.query_wrapper').find('.result').show();
}
$(this).toggleClass('cmd_down cmd_up');
});
$('.cmd_publish').live('click', function(event){
var query = $(this).parent().data('query');
if (query != undefined){ // query
query.publish();
} else { // bookmarksets
var json = workspace.getTypedElement('user','bookmarkset');
var id = parseInt($('#bts_select').find("option:selected").val());
var bsjson = json[id];
$.get("/MDService2/virtualcollection/USER/" + bsjson.id,"", function(data){
if (bsjson.vcrid == 0){
var id = parseInt($(data).children().children('virtualcollectionid').text());
bsjson.vcrid = id;
workspace.savequeryset(bsjson, 1);
}
});
}
});
//////////////////////////////////////////////
$('#searchretrieve').submit( function(event) {
event.preventDefault();
//hideWelcomeMessage();
var query;
if (getInputMode() == 'complex'){
query = searchclauseset.buildsctext();
} else {
query = $('#input-simplequery').attr("value");
}
// TODO we dont use columns-widget
var columns = "";//columns_widget.getColumnsListText();
var collections = collections_widget.widgets; //searchclauseset.sctext;
//var ws = $('#input-withsummary').attr("checked");
notifyUser("processing query");
if (jQuery.trim(query).length == 0){
query = null;
}
var q = new Query(collections, columns, query); //actions.collections.current, query );
q.repository = getSelectedRepository();
//if (ws) {
// q.options = "withSummary";
//}
notifyUser("submit_query:" + q.query_uri(),'debug');
queryset.addquery(q);
});
$('.autocomplete-select-caller').live('click', function(event) {
$(this).closest(".index-context").prev().parent().find(".autocomplete-input").val($(this).text()).change();
$(this).closest(".index-context").hide();
});
$('.autocomplete-select-caller a').live('click', function(event) {
event.preventDefault();
});
$('.comp_detail input').live('keyup', function(event) {
$('#srquery').val(
$(this).parent().children('span.cmdelem_name').text()
+ "=" + $(this).val() );
});
$('a.open-in-context').live('click', function(event) {
event.preventDefault();
var uri = $(this).attr('href');
/* notifyUser("open_incontext:" + uri);
$(this).after("");
var trg = $(this).next(".ui-context-dialog");
trg.show();
$(trg).load(uri); //function(event) { } */
var contextual_uri = uri.replace('htmlpage','htmldetail');
$.get(contextual_uri, showDetail,'html');
});
// RECORDSET searchRetrieve
/*
$('#searchretrieve').submit( function(event) {
event.preventDefault();
//hideWelcomeMessage();
searchclauseset.buildsctext();
notifyUser(searchclauseset.sctext,'debug');
//submit_query ($('#columns_list').attr("value"),searchclauseset.sctext, $('#input-simplequery').attr("value"));
submit_query (columns_widget.getColumnsListText(),searchclauseset.sctext, $('#input-simplequery').attr("value"), $('#input-withsummary').attr("checked"));
});
*/
$('#columns-widget .cmd_save').click(function(event) {
var terms = [{}];
var id = $("#ts_select option").size();
var name = "termset_" + id;
columns_widget.getListWidget().find('.list-item').each(function(i,elem){
terms[i] = $(elem).text();
});
var dt = new Date();
var str_time = dateFormat(dt);//dt.toString("dd/mm/yyyy HH:mm:ss");
var jsont = {"name":name, "time" : str_time, "Terms" :terms};
if (jsonw["WorkspaceProfile"]["CustomTermsets"] == undefined) {
jsonw["WorkspaceProfile"]["CustomTermsets"] = [{}];
}
jsonw["WorkspaceProfile"]["CustomTermsets"][id] = jsont;
//saveWorkspace("USER");
Workspace.save("USER");
loadTermsets(jsonw["WorkspaceProfile"]["CustomTermsets"]);
//createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
$("#ts_select option").removeAttr("selected");
$("#ts_select option").last().attr("selected","selected");
$('#ts_input').attr("value",name);
createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
});
/*
$('#querylist .query_header').find('.cmd_del').live('click', function(event) {
//showTermDetail($(this).parent().text());
queryset.removequery($(this).closest('.query_wrapper').attr('id'));
});
*/
/*
$('#querylist .cmd_up').live('click', function(event) {
$(this).closest('.query_wrapper').find('.result').hide();
$(this).toggleClass('cmd_down cmd_up');
});
*/
$('#detail_query .cmds .cmd_save').live('click', function(event) {
//qid = $(this).data('query').listid;
qid = $(this).data('qid');
notifyUser("here I would save query: " + qid, "debug");
var q = queryset.getQuery(qid);
q.save();
//Workspace.saveQuery($(this).data('query'));
});
$('#detail_query .cmds .cmd_savenew').live('click', function(event) {
//qid = $(this).data('query').listid;
qid = $(this).data('qid');
notifyUser("here I would savenew query: " + qid, "debug");
var q = queryset.getQuery(qid);
q.id = 0;
q.save();
//Workspace.saveQuery($(this).data('query'));
});
/**
* FIXME: this should only invoke appropriate query-function storing the query to workspaceprofile
*/
$('#querylist .cmd_save').live('click', function(event) {
// bookmark
if ($(this).parents('.result').length > 0){
qstring = $(this).parent().find("a").attr('href');
qstring = qstring.substring(18,qstring.length);
var q = new Query([],"",qstring);
q.bookmark = 1;
q.save();
}
});
/**
* FIXME: this looks like a typo: #queryslist -> #querylist
*/
$('#queryslist .cmd_reload').live('click', function(event) {
var qid = $(this).closest('.query_wrapper').attr("id");
queryset.resubmit(qid);
});
$('.cmd_sc_delete').live('click', function(event) {
var i = $(this).closest('.sc-i').attr('id');
var j = $(this).closest('.sc-j').attr('id');
//notifyUser(i + j,'debug');
searchclauseset.removesearchclause(i,j);
});
$('.cmd_add_and').live('click', function(event) {
//showTermDetail($(this).parent().text());
//$(this).next().hide();
$(this).attr("value","AND");
var searchclause = new SearchClause("","","");
var i = $(this).closest('.sc-i').attr('id');
var j = $(this).closest('.sc-j').attr('id');
//notifyUser(i + j,'debug');
searchclauseset.addsearchclause(searchclause,"and",i,j);
});
$('.cmd_add_or').live('click', function(event) {
//showTermDetail($(this).parent().text());
//$(this).next().hide();
var i,j;
$(this).attr("value","OR");
var searchclause = new SearchClause("","","");
searchclauseset.addsearchclause(searchclause,"or",$(this).closest('.sc-i').attr('id'),$(this).closest('.sc-j').attr('id'));
});
///// QUERYSETS
$('#qts_save').click(function(){
var id = $("#qts_select option:selected").val();
//notifyUser($('#qts_input').val() + $('#qts_input').text(),'debug');
workspace.user_json["WorkspaceProfile"]["Querysets"][id]["name"] = $('#qts_input').val();
//workspace.save("USER");
workspace.savequeryset(workspace.user_json["WorkspaceProfile"]["Querysets"][id],0);
$("#qts_select option:selected").text( $('#qts_input').val());
});
$('#qts_add').click(function(){
//var new_name = "new_queryset";
//workspace.addqueryset(new_name);
//var id = workspace.user_json["WorkspaceProfile"]["Querysets"].length-1;
//workspace.savequeryset(workspace.user_json["WorkspaceProfile"]["Querysets"][id],0);
//workspace.save("USER");
var q = workspace.addelement('queryset');
workspace.savequeryset(q, 0);
//todo
var id = $('#qts_select option').size();
$("#qts_select").append(new Option(q["name"], id));
$("#qts_select").find('option').attr("selected","false");
$("#qts_select").find('option').last().attr("selected","true");
$('#qts_input').val(q["name"]);
});
$('#qts_delete').click(function(){
var qsid = parseInt($("#qts_select option:selected").val());
workspace.removeelement("queryset", qsid);
workspace.save("USER");
//update
loadQuerysets("user");
});
//BOOKMARKSETS
$('#bts_save').click(function(){
var id = $("#bts_select option:selected").val();
workspace.user_json["WorkspaceProfile"]["Bookmarksets"][id]["name"] = $('#bts_input').val();
workspace.savequeryset(workspace.user_json["WorkspaceProfile"]["Bookmarksets"][id],1);
$("#bts_select option:selected").text( $('#bts_input').val());
});
$('#bts_add').click(function(){
var b = workspace.addelement('bookmarkset');
//var id = workspace.user_json["WorkspaceProfile"]["Bookmarksets"].length-1;
//workspace.savequeryset(workspace.user_json["WorkspaceProfile"]["Bookmarksets"][id],1);
workspace.savequeryset(b,1);
var id = $('#bts_select option').size();
$("#bts_select").append(new Option(b["name"], id));
$("#bts_select").find('option').attr("selected","false");
$("#bts_select").find('option').last().attr("selected","true");
$('#bts_input').val(b["name"]);
});
$('#bts_delete').click(function(){
var bsid = parseInt($("#bts_select option:selected").val());
workspace.removeelement("bookmarkset", bsid);
workspace.save("USER");
//update
loadBookmarksets("user");
});
////////////////////////////////////////////////
$('#ts_save').click(function(){
var id = $("#ts_select option:selected").val();
//notifyUser($('#qts_input').val() + $('#qts_input').text(),'debug');
jsonw["WorkspaceProfile"]["CustomTermsets"][id]["name"] = $('#ts_input').val();
$("#ts_select option:selected").text( $('#ts_input').val());
//saveWorkspace("USER");
Workspace.save("USER");
});
$('#ts_add').click(function(){
var new_name = "new_termset";
var id = $('#ts_select option').size();
var dt = new Date();
var str_time = dateFormat(dt);//dt.toString("yyyy-MM-dd HH:mm:ss");
if (id == 0){
jsonw["WorkspaceProfile"]["CustomTermsets"] = [{}];
}
jsonw["WorkspaceProfile"]["CustomTermsets"][id] = {"name":new_name,"created":str_time , "Terms" : "null"};
//saveWorkspace("USER");
Workspace.save("USER");
//todo
//loadWorkspace(jsonw["WorkspaceProfile"]["Querysets"]);
$("#ts_select").append(new Option(new_name, id));
$("#ts_select").find('option').attr("selected","false");
$("#ts_select").find('option').last().attr("selected","true");
$('#ts_input').val(new_name);
createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
});
$('#ts_delete').click(function(){
var count = $("#ts_select option").size();
//if (count > 1){
var id = parseInt($("#ts_select option:selected").val());
var size = jsonw["WorkspaceProfile"].CustomTermsets.length;
for (var i=id;i').addClass("sc-i").addClass("and_level");
$(div).appendTo($(x).appendTo($('#searchclauselist')));
$(x).attr("id",i);
} else {
if (rel == "and") {
x = $('').addClass("sc-i").addClass("and_level");
$(x).attr("id",i);
$(div).appendTo($(x).appendTo($('#searchclauselist')));
} else {
$(div).appendTo($('#searchclauselist').children()[i]);
}
}
//$('#searchclauselist').append($(li));
}
function addToQuerylist (x) {
$("#querylist").prepend(x);
}
function addToNotifylist (x) {
$("#notifylist").prepend(x);
}
function createTooltip(parentwidget) {
var ccmd;
if (parentwidget == null) {
ccmd = $('.cmd');
} else {
ccmd = $(parentwidget).find('.cmd');
}
$(ccmd).mouseover(function(){
// command name
var cmd = $(this).attr("class");
cmd = cmd.substring(cmd.indexOf("cmd_"));
cmd = cmd.split(" ")[0];
// command place
var place = "";
if ($(this).parents('.content').length > 0) {
place = $(this).parents('.content').attr("id") + ".";
}
if ($(this).parents('.block').length > 0) {
place = $(this).parents('.block').attr("id") + ".";
}
// find tho tooltiptext
var a = place + cmd;
if (tooltiptable[a] != null) {
s = tooltiptable[a];
} else {
if (tooltiptable[cmd] != null) {
s = tooltiptable[cmd];
} else {
s = a;
}
}
tooltip.show(s);
});
$(ccmd).mouseout(function(){
tooltip.hide();
});
};
function loadQuery(query){
query.repository = getSelectedRepository();
queryset.addquery(query);
searchclauseset.sctext = query.query;
notifyUser(searchclauseset.sctext,'debug');
searchclauseset.buildfromquerystring();
//collections = query.collection;
collections_widget.load(query.collection);
columns_widget.load(query.columns.split(','));
$('#input-simplequery').attr("value",query.query);
$('#input-withsummary').attr("checked",(query.options != null));
updateCollectionTree();
};
/*
function loadQuery(q){
if (q["bookmark"] == "1") {
var uri = "/MDService2/record/htmldetail/" + q["querystring"];
detailcaller.calldetail(undefined, "record", uri);
//var uri = "/MDService2/record/htmldetail/" + q["querystring"];
//showDetail(null,'html');
//$.get(uri, showDetail,'html');
} else {
//hideWelcomeMessage();
var query = new Query([],"","","");
query.load(q);
query.repository = getSelectedRepository();
queryset.addquery(query);
searchclauseset.sctext = query.query;
notifyUser(searchclauseset.sctext,'debug');
searchclauseset.buildfromquerystring();
//collections = query.collection;
collections_widget.load(query.collection);
columns_widget.load(query.columns.split(','));
$('#input-simplequery').attr("value",query.query);
$('#input-withsummary').attr("checked",(query.options != null));
updateCollectionTree();
}
}
*/
function loadQueryFromUriParams(local_uri){
var url;
if (local_uri == undefined){
url = url_params;
} else {
url = local_uri;
}
//TODO new params
var q = url["q"];
if (url["query"] == undefined){
q = url["q"];
}
else {
q = url["query"];
}
var collection = url["collection"];
var startItem = url["startRecord"];
var maximumItems = url["maximumRecords"];
var repository = url["repository"];
var columns = url["columns"];
if ((q != undefined) || (collection != undefined)) {
if (q == undefined) {
q = "";
} else {
q = Url.decode(q);
}
if (columns == undefined) {
columns = "";
}
if (startItem == undefined) {
startItem = 1;
}
if (maximumItems == undefined) {
maximumItems = 10;
}
if (repository == undefined) {
repository = getSelectedRepository();
}
if (collection == undefined){
collection = "";
}
var collections = [];
if (collection.length > 0 ){
var coll = collection.split(",");
$.each(coll,function(i,item){
var n;
n = $('#collections').find(".folder:[handle='"+item+"']").text();
var simple_collection = new Collection(item, n);
collections[i] = simple_collection;
});
}
var query = new Query(collections, columns, q);
query.startItem = startItem;
query.maximumItems = maximumItems;
query.repository = repository;
queryset.addquery(query);
searchclauseset.sctext = query.query;
notifyUser(searchclauseset.sctext,'debug');
searchclauseset.buildfromquerystring();
//collections = query.collection;
collections_widget.load(query.collection);
columns_widget.load(query.columns.split(','));
$('#input-simplequery').attr("value",query.query);
$('#input-withsummary').attr("checked",(query.options != null));
updateCollectionTree();
}
}