Files
Samuele Locatelli 12be248182 rename progetto...
2013-10-04 08:50:57 +02:00

790 lines
18 KiB
JavaScript

/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
ilCOPagePres =
{
/**
* Basic init function
*/
init: function ()
{
this.initToc();
this.initInteractiveImages();
this.updateQuestionOverviews();
},
//
// Toc (as used in Wikis)
//
/**
* Init the table of content
*/
initToc: function ()
{
// init toc
var cookiePos = document.cookie.indexOf("pg_hidetoc=");
if (cookiePos > -1 && document.cookie.charAt(cookiePos + 11) == 1)
{
this.toggleToc();
}
},
/**
* Toggle the table of content
*/
toggleToc: function()
{
var toc = document.getElementById('ilPageTocContent');
if (!toc)
{
return;
}
var toc_on = document.getElementById('ilPageTocOn');
var toc_off = document.getElementById('ilPageTocOff');
if (toc && toc.style.display == 'none')
{
toc.style.display = 'block';
toc_on.style.display = 'none';
toc_off.style.display = '';
document.cookie = "pg_hidetoc=0";
}
else
{
toc_on.style.display = '';
toc_off.style.display = 'none';
toc.style.display = 'none';
document.cookie = "pg_hidetoc=1";
}
},
//
// Interactive Images
//
iim_trigger: {},
iim_area: {},
iim_popup: {},
iim_marker: {},
dragging: false,
/**
* Init interactive images
*/
initInteractiveImages: function ()
{
// preload overlay images (necessary?)
// add onmouseover event to all map areas
$("map.iim > area").mouseover(this.overBaseArea);
$("map.iim > area").mouseout(this.outBaseArea);
$("map.iim > area").click(this.clickBaseArea);
$("a.ilc_marker_Marker").mouseover(this.overMarker);
$("a.ilc_marker_Marker").mouseout(this.outMarker);
$("a.ilc_marker_Marker").click(this.clickMarker);
},
/**
* Mouse over marker -> show the overlay image
*/
overMarker: function (e)
{
if (this.dragging)
{
return;
}
var marker_tr_nr = ilCOPagePres.iim_marker[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_marker[e.target.id].iim_id;
ilCOPagePres.handleOverEvent(iim_id, marker_tr_nr, true);
},
/**
* Mouse leaves marker -> hide the overlay image
*/
outMarker: function (e)
{
if (this.dragging)
{
return;
}
var marker_tr_nr = ilCOPagePres.iim_marker[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_marker[e.target.id].iim_id;
ilCOPagePres.handleOutEvent(iim_id, marker_tr_nr, true);
},
/**
* Mouse over base image map area -> show the overlay image
* and (on first time) init the image map of the overlay image
*/
overBaseArea: function (e)
{
var area_tr_nr = ilCOPagePres.iim_area[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_area[e.target.id].iim_id;
ilCOPagePres.handleOverEvent(iim_id, area_tr_nr, false);
},
/**
* Mouse over base image map area or marker -> show the overlay image
* and (on first time) init the image map of the overlay image
*/
handleOverEvent: function (iim_id, area_tr_nr, is_marker)
{
//console.log("over enter");
var k, j, tr, coords, ovx, ovy;
if (this.dragging)
{
return;
}
for (k in ilCOPagePres.iim_trigger)
{
tr = ilCOPagePres.iim_trigger[k];
if (tr.nr == area_tr_nr && tr.iim_id == iim_id)
{
var base = $("img#base_img_" + tr.iim_id);
var pos = base.position();
var ov = $("img#iim_ov_" + tr['tr_id']);
// no overlay image? -> skip
if (ov.length == 0)
{
continue;
}
var cnt = 1;
// no usamap (e.g. edit mode) -> skip)
if (typeof(base.attr('usemap')) == "undefined")
{
continue;
}
var base_map_name = base.attr('usemap').substr(1);
// display the overlay at the correct position
ov.css('position', 'absolute');
ovx = parseInt(tr['ovx']);
ovy = parseInt(tr['ovy']);
ov.css('left', pos.left + ovx);
ov.css('top', pos.top + ovy);
ov.css('display', '');
// on first time we need to initialize the
// image map of the overlay image
if (tr.map_initialized == null && !is_marker)
{
tr.map_initialized = true;
//console.log(tr);
cnt = 1;
$("map[name='" + base_map_name + "'] > area").each(
function (i,el) {
// if title is the same, add area to overlay map
if (ilCOPagePres.iim_area[el.id]['tr_nr'] == area_tr_nr)
{
coords = $(el).attr("coords");
// fix coords
switch($(el).attr("shape").toLowerCase())
{
case "rect":
var c = coords.split(",");
coords = "" + (parseInt(c[0]) - ovx) + "," +
(parseInt(c[1]) - ovy) + "," +
(parseInt(c[2]) - ovx) + "," +
(parseInt(c[3]) - ovy);
break;
case "poly":
var c = coords.split(",");
coords = "";
var sep = "";
for (j in c)
{
if (j % 2 == 0)
{
coords = coords + sep + parseInt(c[j] - ovx);
}
else
{
coords = coords + sep + parseInt(c[j] - ovy);
}
sep = ",";
}
break;
case "circle":
var c = coords.split(",");
coords = "" + (parseInt(c[0]) - ovx) + "," +
(parseInt(c[1]) - ovy) + "," +
(parseInt(c[2]));
break;
}
// set shape and coords
$("area#iim_ov_area_" + tr['tr_id']).attr("coords", coords);
$("area#iim_ov_area_" + tr['tr_id']).attr("shape", $(el).attr("shape"));
// add mouse event listeners
var k2 = k;
var i2 = "iim_ov_" + tr['tr_id'];
var tr2 = tr['tr_id'];
$("area#iim_ov_area_" + tr['tr_id']).mouseover(
function() {ilCOPagePres.overOvArea(k2, true, i2)});
$("area#iim_ov_area_" + tr['tr_id']).mouseout(
function() {ilCOPagePres.overOvArea(k2, false, i2)});
$("area#iim_ov_area_" + tr['tr_id']).click(
function(e) {ilCOPagePres.clickOvArea(e, tr2)});
}
cnt++;
});
}
}
}
},
/**
* Leave a base image map area: hide corresponding images
*/
outBaseArea: function (e)
{
var area_tr_nr = ilCOPagePres.iim_area[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_area[e.target.id].iim_id;
ilCOPagePres.handleOutEvent(iim_id, area_tr_nr, false);
},
/**
* Leave a base image map area: hide corresponding images
*/
handleOutEvent: function (iim_id, area_tr_nr, is_marker)
{
//console.log("out");
var k, tr;
if (this.dragging)
{
return;
}
for (k in ilCOPagePres.iim_trigger)
{
tr = ilCOPagePres.iim_trigger[k];
if (tr.nr == area_tr_nr && tr.iim_id == iim_id &&
(ilCOPagePres.iim_trigger[k]['over_ov_area'] == null ||
!ilCOPagePres.iim_trigger[k]['over_ov_area']
))
{
$("img#iim_ov_" + tr['tr_id']).css('display', 'none');
}
}
},
/**
* Triggered by mouseover/out on imagemap of overlay image
*/
overOvArea: function (k, value, ov_id)
{
if (this.dragging)
{
return;
}
//console.log("overOvArea " + k + ":" + ov_id);
ilCOPagePres.iim_trigger[k]['over_ov_area'] = value;
if (value)
{
$("img#" + ov_id).css('display', '');
}
else
{
$("img#" + ov_id).css('display', 'none');
}
},
/**
* A marker is clicked
*/
clickMarker: function (e)
{
var k;
var marker_tr_nr = ilCOPagePres.iim_marker[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_marker[e.target.id].iim_id;
if (ilCOPagePres.iim_marker[e.target.id].edit_mode == "1")
{
return;
}
if (this.dragging)
{
return;
}
// iterate through the triggers and search the correct one
for (k in ilCOPagePres.iim_trigger)
{
tr = ilCOPagePres.iim_trigger[k];
if (tr.nr == marker_tr_nr && tr.iim_id == iim_id)
{
ilCOPagePres.handleAreaClick(e, tr['tr_id']);
}
}
},
/**
* A base image map area is clicked
*/
clickBaseArea: function (e)
{
var k;
var area_tr_nr = ilCOPagePres.iim_area[e.target.id].tr_nr;
var iim_id = ilCOPagePres.iim_area[e.target.id].iim_id;
if (this.dragging)
{
return;
}
// iterate through the triggers and search the correct one
for (k in ilCOPagePres.iim_trigger)
{
tr = ilCOPagePres.iim_trigger[k];
if (tr.nr == area_tr_nr && tr.iim_id == iim_id)
{
ilCOPagePres.handleAreaClick(e, tr['tr_id']);
}
}
},
/**
* Handle area click (triggered by base or overlay image map area)
*/
handleAreaClick: function (e, tr_id)
{
var tr = ilCOPagePres.iim_trigger[tr_id];
var el = document.getElementById("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr']);
if (el == null || this.dragging)
{
e.preventDefault();
return;
}
// on first time we need to initialize content overlay
if (tr.popup_initialized == null)
{
tr.popup_initialized = true;
// @todo: initialize the overlay
/*
ilOverlay.add("iim_popup_" + tr.tr_id,
{"yuicfg":{"visible":false,"fixedcenter":false,
"context":["iim_ov_area_" + tr.tr_id,"tl","bl",["beforeShow","windowResize"]]},
"trigger":"iim_ov_area_" + tr.tr_id,
"trigger_event":"click",
"anchor_id":"iim_ov_area_" + tr.tr_id,
"auto_hide":false,
"close_el":"iim_ov_area_" + tr.tr_id});
*/
ilOverlay.add("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'],
{"yuicfg":{"visible":false,"fixedcenter":false},
"auto_hide":false});
}
//console.log("showing trigger " + tr_id);
//console.log("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr']);
// show the overlay
var base = $("img#base_img_" + ilCOPagePres.iim_trigger[tr_id]['iim_id']);
var pos = base.position();
var x = pos.left + parseInt(ilCOPagePres.iim_trigger[tr_id]['popx']);
var y = pos.top + parseInt(ilCOPagePres.iim_trigger[tr_id]['popy']);
ilOverlay.setWidth("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'], ilCOPagePres.iim_trigger[tr_id]['popwidth']);
ilOverlay.setHeight("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'], ilCOPagePres.iim_trigger[tr_id]['popheight']);
ilOverlay.toggle(e, "iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'], null, false, null, null, "click");
ilOverlay.setX("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'], x);
ilOverlay.setY("iim_popup_" + tr['iim_id'] + "_" + tr['popup_nr'], y);
e.preventDefault();
},
/**
* A overlay image map area is clicked
*/
clickOvArea: function (e, tr_id)
{
ilCOPagePres.handleAreaClick(e, tr_id);
},
addIIMTrigger: function(tr)
{
//console.log(tr);
this.iim_trigger[tr.tr_id] = tr;
},
addIIMArea: function(a)
{
//console.log(a);
this.iim_area[a.area_id] = a;
},
addIIMPopup: function(p)
{
this.iim_popup[p.pop_id] = p;
},
addIIMMarker: function(m)
{
this.iim_marker[m.m_id] = m;
var base = $("img#base_img_" + m.iim_id);
var pos = base.position();
var mark = $("a#" + m['m_id']);
// display the marker at the correct position
mark.css('position', 'absolute');
var mx = parseInt(m['markx']);
var my = parseInt(m['marky']);
mark.css('left', pos.left + mx);
mark.css('top', pos.top + my);
mark.css('display', '');
},
fixMarkerPositions: function ()
{
var m, tr, k, i;
for (k in ilCOPagePres.iim_marker)
{
m = ilCOPagePres.iim_marker[k];
var base = $("img#base_img_" + m.iim_id);
var pos = base.position();
var mark = $("a#" + m['m_id']);
mark.css('position', 'absolute');
var mx = parseInt(m['markx']);
var my = parseInt(m['marky']);
mark.css('left', pos.left + mx);
mark.css('top', pos.top + my);
}
/*
for (k in ilCOPagePres.iim_trigger)
{
var t = ilCOPagePres.iim_trigger[k];
// console.log(t);
for (i in ilCOPagePres.iim_popup)
{
p = ilCOPagePres.iim_popup[i];
if (t.popup_nr == p.nr && t.iim_id == p.iim_id)
{
var base = $("img#base_img_" + p.iim_id);
var pos = base.position();
var pop = $("div#" + p.div_id);
pop.css('position', 'absolute');
var mx = parseInt(t.popx);
var my = parseInt(t.popy);
pop.css('left', pos.left + mx);
pop.css('top', pos.top + my);
}
}
}
*/
},
/**
* Make marker draggable
*/
startDraggingMarker: function(tr_nr)
{
var k;
this.dragging = true;
for (k in ilCOPagePres.iim_marker)
{
if (ilCOPagePres.iim_marker[k]['tr_nr'] == tr_nr)
{
var mark = ilCOPagePres.iim_marker[k];
$("a#" + ilCOPagePres.iim_marker[k]['m_id']).css("display", "");
$("a#" + ilCOPagePres.iim_marker[k]['m_id']).draggable({
drag: function(event, ui) {
var base = $("img#base_img_" + mark.iim_id);
var bpos = base.position();
var marker = $("a#" + mark.m_id);
var mpos = marker.position();
var position = (Math.round(mpos.left) - Math.round(bpos.left)) + "," +
(Math.round(mpos.top) - Math.round(bpos.top));
$("input#markpos_" + mark.tr_nr).attr("value", position);
}
});
ilCOPagePres.initDragToolbar();
}
else
{
$("a#" + ilCOPagePres.iim_marker[k]['m_id']).css("display", "none");
}
}
},
stopDraggingMarker: function()
{
this.dragging = false;
},
/**
* Make overlay draggable
*/
startDraggingOverlay: function(tr_nr)
{
var k;
this.dragging = true;
for (k in ilCOPagePres.iim_trigger)
{
var trigger = ilCOPagePres.iim_trigger[k];
if (trigger['nr'] == tr_nr)
{
var dtr = trigger;
var ov = $("img#iim_ov_" + dtr['tr_id']);
// remove map for dragging
ov.attr('usemap','');
ilCOPagePres.initDragToolbar();
var base = $("img#base_img_" + dtr.iim_id);
var bpos = base.position();
ovx = parseInt(dtr['ovx']);
ovy = parseInt(dtr['ovy']);
ov.css('left', bpos.left + ovx);
ov.css('top', bpos.top + ovy);
ov.css('display', '');
ov.css("position", "absolute");
var dtr = trigger;
ov.draggable({
stop: function(event, ui) {
var ovpos = ov.position();
var position = (Math.round(ovpos.left) - Math.round(bpos.left)) + "," +
(Math.round(ovpos.top) - Math.round(bpos.top));
$("input#ovpos_" + dtr.nr).attr("value", position);
}
});
}
else
{
// $("img#iim_ov_" + trigger['tr_id']).css("display", "none");
}
}
},
/**
* Make popup draggable
*/
startDraggingPopup: function(tr_nr)
{
var i, k;
this.dragging = true;
// get correct trigger
for (k in ilCOPagePres.iim_trigger)
{
if (ilCOPagePres.iim_trigger[k]['nr'] == tr_nr)
{
var dtr = ilCOPagePres.iim_trigger[k];
// get correct popup
for (i in ilCOPagePres.iim_popup)
{
if (ilCOPagePres.iim_popup[i]['nr'] ==
ilCOPagePres.iim_trigger[k]['popup_nr'])
{
var cpop = ilCOPagePres.iim_popup[i];
var pdummy = document.getElementById("popupdummy");
if (pdummy == null)
{
$('div#il_center_col').append('<div id="popupdummy" class="ilc_iim_ContentPopup"></div>');
pdummy = $("div#popupdummy");
}
else
{
pdummy = $("div#popupdummy");
}
ilCOPagePres.initDragToolbar();
var base = $("img#base_img_" + cpop.iim_id);
var bpos = base.position();
//console.log(dtr);
popx = parseInt(dtr['popx']);
popy = parseInt(dtr['popy']);
pdummy.css("position", "absolute");
pdummy.css('left', bpos.left + popx);
pdummy.css('top', bpos.top + popy);
pdummy.css('width', dtr['popwidth']);
pdummy.css('height', dtr['popheight']);
pdummy.css('display', '');
pdummy.draggable({
stop: function(event, ui) {
var pdpos = pdummy.position();
var position = (Math.round(pdpos.left) - Math.round(bpos.left)) + "," +
(Math.round(pdpos.top) - Math.round(bpos.top));
$("input#poppos_" + dtr.nr).attr("value", position);
}
});
}
else
{
// $("img#iim_ov_" + trigger['tr_id']).css("display", "none");
}
}
}
}
},
/**
* Init drag toolbar
*/
initDragToolbar: function(tr_nr)
{
// show the toolbar
$("div#drag_toolbar").css("display", "");
this.fixMarkerPositions();
$("a#save_pos_button").click(function () {
$("input#update_tr_button").trigger("click");
});
},
//
// Question Overviews
//
qover: {},
addQuestionOverview: function(conf)
{
this.qover[conf.id] = conf;
},
updateQuestionOverviews: function()
{
var correct = {};
var incorrect = {};
var correct_cnt = 0;
var incorrect_cnt = 0;
if (typeof questions == 'undefined')
{
return;
}
for (var k in questions)
{
var answered_correctly = true;
var index=parseInt(k,10);
if (!isNaN(index))
{
if (!answers[index])
{
answered_correctly = false;
}
else
{
if (answers[index].passed!=true)
{
answered_correctly = false;
}
}
if (!answered_correctly)
{
incorrect[k] = k;
incorrect_cnt++;
}
else
{
correct[k] = k;
correct_cnt++;
}
}
}
// iterate all question overview elements
for (var i in this.qover)
{
var ov_el = $('div#' + this.qover[i].div_id);
// remove all children
ov_el.empty();
// show success message, if all questions have been answered
if (incorrect_cnt == 0)
{
ov_el.attr("class", 'ilc_qover_Correct');
ov_el.append(
ilias.questions.txt.ov_all_correct);
}
else
{
ov_el.attr("class", 'ilc_qover_Incorrect');
// show message including of number of not
// correctly answered questions
if (this.qover[i].short_message == "y")
{
ov_el.append('<div class="ilc_qover_StatusMessage">' +
ilias.questions.txt.ov_some_correct.split("[x]").join(correct_cnt + "")
.split("[y]").join((incorrect_cnt + correct_cnt) + "") +
"</div>"
);
}
if (this.qover[i].list_wrong_questions == "y")
{
ov_el.append(
'<div class="ilc_qover_WrongAnswersMessage">' +
ilias.questions.txt.ov_wrong_answered + ":" + '</div>'
);
// list all incorrect answered questions
ov_el.append('<ul class="ilc_list_u_BulletedList"></ul>');
var ul = $('div#' + this.qover[i].div_id + " > ul");
for (var j in incorrect)
{
var qtext = questions[j].question;
if (questions[j].type == "assClozeTest")
{
qtext = questions[j].title;
}
ul.append(
'<li class="ilc_list_item_StandardListItem">' +
'<a href="#" onclick="return ilCOPagePres.jumpToQuestion(\'' + j + '\');" class="ilc_qoverl_WrongAnswerLink">' + qtext + '</a>'
+ '</li>');
}
}
}
}
},
// jump to a question
jumpToQuestion: function(qid)
{
if (typeof pager != "undefined")
{
pager.jumpToElement("container" + qid);
}
return false;
}
}
ilAddOnLoad(function() {ilCOPagePres.init();});