Adding new exercise type of question Delineation and Scenario, updating swf of hotspots see #2974 (partial),
parent
5ccfdc9f89
commit
f39f25ae01
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,349 @@ |
||||
// javascript Proxy |
||||
import com.macromedia.javascript.JavaScriptProxy; |
||||
var JS_proxy:JavaScriptProxy = new JavaScriptProxy(); |
||||
|
||||
System.useCodepage = true; |
||||
|
||||
// get id from querystring |
||||
myURL = this._url; |
||||
//myURL = "http://localhost/dokeosSVN/main/plugin/hotspot/hotspot_solution.swf?modifyAnswers=1&exe_id=2&from_db=3"; |
||||
tmpAr = myURL.split("?"); |
||||
tmpAr = tmpAr[1].split("&"); |
||||
id = tmpAr[0].split("="); |
||||
id = id[1]; |
||||
exe_id = tmpAr[1].split("="); |
||||
exe_id = exe_id[1]; |
||||
from_db = tmpAr[2].split("="); |
||||
from_db = from_db[1]; |
||||
|
||||
// get URL to load lang and hotspot variables |
||||
|
||||
//myURL = this._url; |
||||
myPos = myURL.lastIndexOf("/"); |
||||
myURL = myURL.substring(0, myPos); |
||||
myPos = myURL.lastIndexOf("/"); |
||||
myURL = myURL.substring(0, myPos); |
||||
myPos = myURL.lastIndexOf("/"); |
||||
myURL = myURL.substring(0, myPos); |
||||
|
||||
// movie properties |
||||
var movieWidth:Number = 380; |
||||
var movieHeight:Number = 400; |
||||
|
||||
// hotspot properties |
||||
var startWidth:Number = 0; // \__ if these values are set, shape will be drawn right and down from the mouse; |
||||
var startHeight:Number = 0; // / |
||||
var pType:String = ""; // possible values: circle, square, poly; |
||||
|
||||
// other settings |
||||
var i:Number = 1; |
||||
var isDrawing:Boolean = false; |
||||
var hotspots_c:Array = new Array('0x4271B5','0xFE8E16','0x45C7F0','0xBCD631','0xD63173','0xD7D7D7','0x90AFDD','0xAF8640','0x4F9242','0xF4EB24','0xED2024','0x3B3B3B'); |
||||
|
||||
// make array with all elements |
||||
var hotspots:Array = new Array(); |
||||
|
||||
// get data from database |
||||
this.createEmptyMovieClip("target_mc", 2000); |
||||
//_answers |
||||
loadVariables(myURL + "/exercice/hotspot_answers.as.php?modifyAnswers="+id+"&exe_id="+exe_id+"&from_db="+from_db, target_mc); |
||||
var param_interval:Number = setInterval(checkParamsLoaded, 100); |
||||
|
||||
// language variables |
||||
var str_choose:String = ""; |
||||
var lang_interval:Number |
||||
|
||||
// counter for language (if language can't be loaded after 2 sec, |
||||
// english will be loaded |
||||
var counter:Number = 0; |
||||
|
||||
// booleans for loading |
||||
var langLoaded:Boolean = false; |
||||
var varsLoaded:Boolean = false; |
||||
var imageLoaded:Boolean = false; |
||||
|
||||
// image preloader |
||||
var loadListener:Object = new Object(); |
||||
loadListener.onLoadComplete = function(){ |
||||
_root.imageLoaded = true; |
||||
_root.showInterface(); |
||||
} |
||||
var mcLoader:MovieClipLoader = new MovieClipLoader(); |
||||
mcLoader.addListener(loadListener); |
||||
var mc:MovieClip = _root.image_mc; |
||||
|
||||
///////////////////////////////////////////////////////////////////////////////// |
||||
// FUNCTIONS |
||||
///////////////////////////////////////////////////////////////////////////////// |
||||
|
||||
// show hotspots, user can't click anymore |
||||
function showHotspots(num){ |
||||
for(j=1;j<=_root.hotspots.length;j++){ |
||||
_root.map_mc["hotspot"+j]._alpha = num; |
||||
} |
||||
} |
||||
|
||||
function showUserpoints(num){ |
||||
for(j=1;j<=_root.hotspots.length;j++){ |
||||
_root["hotspot_answer"+j]._alpha = num; |
||||
if(num==0){ |
||||
_root["hotspot_answer"+j].hotspot_mc._visible = false; |
||||
}else{ |
||||
_root["hotspot_answer"+j].hotspot_mc._visible = true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
function showInterface(){ |
||||
if((_root.langLoaded == true) and (_root.varsLoaded == true) and (_root.imageLoaded == true)){ |
||||
_root.showUserpoints(100); |
||||
_root.showHotspots(100); |
||||
_root.loading_mc._visible = false; |
||||
} |
||||
} |
||||
|
||||
// get language file |
||||
function getLang(){ |
||||
counter++; |
||||
if (_root.lang_mc.done != undefined) { |
||||
_root.show_userPoints_btn.label = _root.lang_mc.showUserPoints; |
||||
_root.show_hotspots_btn.label = _root.lang_mc.showHotspots; |
||||
|
||||
// check if interface can be showed (if everything else is loaded) |
||||
_root.langLoaded = true; |
||||
_root.showInterface(); |
||||
|
||||
// clear interval |
||||
clearInterval(_root.lang_interval); |
||||
}else if(counter==20){ |
||||
// clear interval |
||||
clearInterval(_root.lang_interval); |
||||
|
||||
// set counter to zero |
||||
_root.counter = 0; |
||||
|
||||
// set new interval (get english version) |
||||
loadVariables(myURL + "/lang/english/hotspot.inc.php", _root.lang_mc); |
||||
_root.lang_interval = setInterval(getLang, 100); |
||||
|
||||
} |
||||
} |
||||
|
||||
function checkParamsLoaded() { |
||||
if (target_mc.done != undefined) { |
||||
// once we know the language, get language-variables from language file |
||||
language = target_mc["hotspot_lang"]; |
||||
_root.createEmptyMovieClip("lang_mc", 2001); |
||||
|
||||
//loadVariables(myURL + "/lang/" + language + "/hotspot.inc.php", _root.lang_mc); |
||||
loadVariables(myURL + "/exercice/hotspot.inc.php", _root.lang_mc); |
||||
|
||||
_root.lang_interval = setInterval(getLang, 100); |
||||
|
||||
// start loading external image |
||||
_root.mcLoader.loadClip("../../courses/" + target_mc["courseCode"] + "/document/images/" + target_mc["hotspot_image"], mc); |
||||
|
||||
// make needed array's: filled if hotspot exists, empty if not |
||||
for(m = 1; m <= 12; m++){ |
||||
// make seperate lists |
||||
if(target_mc["hotspot_" + m]=="true"){ |
||||
// add to general list |
||||
tmpAr = Array(); |
||||
tmpAr.push(m); |
||||
tmpAr.push(target_mc["hotspot_" + m + "_type"]); |
||||
_root.hotspots.push(tmpAr); |
||||
|
||||
if (target_mc["hotspot_" + m + "_type"] != 'poly' && target_mc["hotspot_" + m + "_type"] != 'delineation'){ |
||||
// x;y|height|width |
||||
_root["p_hotspot_" + m] = new Array; |
||||
$coordinates = target_mc["hotspot_" + m + "_coord"].split("|"); |
||||
$tmp_xy = $coordinates[0].split(";"); |
||||
$x = $tmp_xy[0]; |
||||
$y = $tmp_xy[1]; |
||||
$height = $coordinates[1]; |
||||
$widht = $coordinates[2]; |
||||
_root["p_hotspot_" + m].push($x); |
||||
_root["p_hotspot_" + m].push($y); |
||||
_root["p_hotspot_" + m].push($height); |
||||
_root["p_hotspot_" + m].push($widht); |
||||
}else{ |
||||
// p1_x;p1_y|p2_x;p2_y|... |
||||
_root["p_hotspot_" + m] = new Array(); |
||||
$coordinates = target_mc["hotspot_" + m + "_coord"].split("|"); |
||||
|
||||
for(k=0;k<$coordinates.length;k++){ |
||||
$tmp_xy = $coordinates[k].split(";"); |
||||
tempArray = Array(); |
||||
tempArray.push($tmp_xy[0]); |
||||
tempArray.push($tmp_xy[1]); |
||||
_root["p_hotspot_" + m].push(tempArray); |
||||
} |
||||
} |
||||
}else{ |
||||
_root["p_hotspot_" + m] = Array(); |
||||
} |
||||
} |
||||
|
||||
// set border around image |
||||
_root.map_mc._width = int(target_mc.hotspot_image_width) + 1; |
||||
_root.map_mc._height = int(target_mc.hotspot_image_height) + 1; |
||||
|
||||
// draw the hotspots |
||||
drawShapes(); |
||||
|
||||
// check if interface can be showed (if everything else is loaded) |
||||
_root.varsLoaded = true; |
||||
_root.showInterface(); |
||||
|
||||
// clear interval |
||||
clearInterval(param_interval); |
||||
} |
||||
} |
||||
|
||||
// draw the shapes that are given from the database |
||||
function drawShapes(){ |
||||
// draw points where user clicked |
||||
_root.drawPoints(); |
||||
|
||||
// draw hotspots |
||||
for (var j:String in hotspots) { |
||||
if(j <> ""){ |
||||
// +1 because array names starts from 1 |
||||
_root.i = int(j) + 1; |
||||
// -1 because array values starts from 0 |
||||
_root.pType = _root.hotspots[_root.i - 1][1]; |
||||
if(_root.pType=="poly" || _root.pType=="delineation"){ |
||||
drawPoly(); |
||||
} |
||||
else{ |
||||
drawShape(true); |
||||
} |
||||
_root.map_mc["hotspot" + _root.i]._alpha = 0; |
||||
} |
||||
} |
||||
} |
||||
|
||||
function drawPoints(){ |
||||
answers = _root.target_mc.p_hotspot_answers.split("|"); |
||||
|
||||
if(answers[0]!=''){ |
||||
j = 1; |
||||
k = 500; |
||||
|
||||
for(var z:String in answers){ |
||||
if(target_mc["hotspot_"+j+"_type"]=="delineation") |
||||
{ |
||||
// trace poly |
||||
delineation_coords = answers[j-1].split("/"); |
||||
drawDelineation(j, delineation_coords); |
||||
} |
||||
else |
||||
{ |
||||
|
||||
xy = answers[j-1].split(";"); |
||||
$x = xy[0]; |
||||
$y = xy[1]; |
||||
|
||||
// create new hotspot |
||||
_root.createEmptyMovieClip("hotspot_answer" + j, k); |
||||
|
||||
// attach correct type of hotspot |
||||
_root["hotspot_answer" + j].attachMovie("numbers", "hotspot_mc", _root["hotspot_answer" + j].getNextHighestDepth()); |
||||
|
||||
_root["hotspot_answer" + j].hotspot_mc._width = 33; |
||||
_root["hotspot_answer" + j].hotspot_mc._height = 22; |
||||
|
||||
_root["hotspot_answer" + j].hotspot_mc._x = int($x) + _root.map_mc._x; |
||||
_root["hotspot_answer" + j].hotspot_mc._y = int($y) + _root.map_mc._y; |
||||
|
||||
_root["hotspot_answer" + j].hotspot_mc.order_txt.text = int(j); |
||||
_root["hotspot_answer" + j].hotspot_mc._visible = false; |
||||
|
||||
_root["hotspot_answer" + j]._alpha = 0; |
||||
} |
||||
|
||||
j++; |
||||
k++; |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
function drawShape(userDrawing){ |
||||
// create new hotspot |
||||
_root.map_mc.createEmptyMovieClip("hotspot" + _root.i, _root.i); |
||||
|
||||
// attach correct type of hotspot |
||||
_root.map_mc["hotspot" + _root.i].attachMovie(_root.pType, "hotspot_mc", _root.map_mc["hotspot" + _root.i].getNextHighestDepth()); |
||||
|
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc._visible = true; |
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc.center_mc._alpha = 60; |
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc._x = _root["p_hotspot_"+ _root.i][0]; |
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc._y = _root["p_hotspot_"+ _root.i][1]; |
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc._width = _root["p_hotspot_"+ _root.i][2]; |
||||
_root.map_mc["hotspot" + _root.i].hotspot_mc._height = _root["p_hotspot_"+ _root.i][3]; |
||||
|
||||
colorchange = new Color(_root.map_mc["hotspot" + _root.i].hotspot_mc); |
||||
colorchange.setRGB(_root.hotspots_c[_root.i - 1]); |
||||
} |
||||
// when black lines of hotspots are deleted, draw the exact same poly with coordinates |
||||
// that are saved in the array |
||||
function drawPoly(){ |
||||
// create empty movieclip |
||||
_root.map_mc.createEmptyMovieClip("hotspot" + _root.i, _root.i); |
||||
|
||||
// begin filling the movieclip |
||||
_root.map_mc["hotspot" + _root.i].beginFill(_root.hotspots_c[_root.i - 1], 60); |
||||
|
||||
// set linestyle |
||||
_root.map_mc["hotspot" + _root.i].lineStyle(1, _root.hotspots_c[_root.i - 1], 100); |
||||
|
||||
// move mouse to first coordinate |
||||
_root.map_mc["hotspot" + _root.i].moveTo(_root["p_hotspot_"+_root.i][0][0],_root["p_hotspot_"+_root.i][0][1]); |
||||
|
||||
// draw lines to all coordinates |
||||
v = _root["p_hotspot_"+_root.i].length; |
||||
for (k=1;k<v;k++){ |
||||
_root.map_mc["hotspot" + _root.i].lineTo(_root["p_hotspot_"+_root.i][k][0],_root["p_hotspot_"+_root.i][k][1]); |
||||
} |
||||
|
||||
// attach first and last coordinates |
||||
_root.map_mc["hotspot" + _root.i].lineTo(_root["p_hotspot_"+_root.i][0][0],_root["p_hotspot_"+_root.i][0][1]); |
||||
|
||||
// stop filling the movieclip |
||||
_root.map_mc["hotspot" + _root.i].endFill(); |
||||
} |
||||
|
||||
function drawDelineation(level, coords){ |
||||
|
||||
// create empty movieclip |
||||
_root.map_mc.createEmptyMovieClip("hotspot_delineation" + level, 2000+level); |
||||
|
||||
// begin filling the movieclip |
||||
_root.map_mc["hotspot_delineation" + level].beginFill(0xFFFFFF, 60); |
||||
|
||||
// set linestyle |
||||
_root.map_mc["hotspot_delineation" + level].lineStyle(1,0x000000, 100); |
||||
|
||||
// move mouse to first coordinate |
||||
xy_origin = coords[0].split(";"); |
||||
_root.map_mc["hotspot_delineation" + level].moveTo(xy_origin[0],xy_origin[1]); |
||||
|
||||
// draw lines to all coordinates |
||||
v = coords.length; |
||||
for (k=1;k<v;k++){ |
||||
xy = coords[k].split(";"); |
||||
_root.map_mc["hotspot_delineation" + level].lineTo(xy[0],xy[1]); |
||||
} |
||||
|
||||
// attach first and last coordinates |
||||
_root.map_mc["hotspot_delineation" + level].lineTo(xy_origin[0],xy_origin[1]); |
||||
|
||||
// stop filling the movieclip |
||||
_root.map_mc["hotspot_delineation" + level].endFill(); |
||||
} |
||||
|
||||
function jsdebug(debug_string){ |
||||
_root.JS_proxy.jsdebug(debug_string); |
||||
} |
Binary file not shown.
Binary file not shown.
@ -1,86 +1,86 @@ |
||||
// Globals
|
||||
// Major version of Flash required
|
||||
var requiredMajorVersion = 7; |
||||
// Minor version of Flash required
|
||||
var requiredMinorVersion = 0; |
||||
// Minor version of Flash required
|
||||
var requiredRevision = 0; |
||||
// the version of javascript supported
|
||||
var jsVersion = 1.0; |
||||
//
|
||||
|
||||
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; |
||||
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; |
||||
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; |
||||
jsVersion = 1.1; |
||||
// JavaScript helper required to detect Flash Player PlugIn version information
|
||||
function JSGetSwfVer(i){ |
||||
// NS/Opera version >= 3 check for Flash plugin in plugin array
|
||||
if (navigator.plugins != null && navigator.plugins.length > 0) { |
||||
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { |
||||
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; |
||||
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; |
||||
descArray = flashDescription.split(" "); |
||||
tempArrayMajor = descArray[2].split("."); |
||||
versionMajor = tempArrayMajor[0]; |
||||
versionMinor = tempArrayMajor[1]; |
||||
if ( descArray[3] != "" ) { |
||||
tempArrayMinor = descArray[3].split("r"); |
||||
} else { |
||||
tempArrayMinor = descArray[4].split("r"); |
||||
} |
||||
versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0; |
||||
flashVer = versionMajor + "." + versionMinor + "." + versionRevision; |
||||
} else { |
||||
flashVer = -1; |
||||
} |
||||
} |
||||
// MSN/WebTV 2.6 supports Flash 4
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; |
||||
// WebTV 2.5 supports Flash 3
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; |
||||
// older WebTV supports Flash 2
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; |
||||
// Can\'t detect in all other cases
|
||||
else { |
||||
|
||||
flashVer = -1; |
||||
} |
||||
return flashVer; |
||||
} |
||||
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
|
||||
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) |
||||
{ |
||||
reqVer = parseFloat(reqMajorVer + "." + reqRevision); |
||||
// loop backwards through the versions until we find the newest version
|
||||
for (i=25;i>0;i--) { |
||||
if (isIE && isWin && !isOpera) { |
||||
versionStr = VBGetSwfVer(i); |
||||
} else { |
||||
versionStr = JSGetSwfVer(i); |
||||
} |
||||
if (versionStr == -1 ) { |
||||
return false; |
||||
} else if (versionStr != 0) { |
||||
if(isIE && isWin && !isOpera) { |
||||
tempArray = versionStr.split(" "); |
||||
tempString = tempArray[1]; |
||||
versionArray = tempString .split(","); |
||||
} else { |
||||
versionArray = versionStr.split("."); |
||||
} |
||||
versionMajor = versionArray[0]; |
||||
versionMinor = versionArray[1]; |
||||
versionRevision = versionArray[2]; |
||||
|
||||
versionString = versionMajor + "." + versionRevision; // 7.0r24 == 7.24
|
||||
versionNum = parseFloat(versionString); |
||||
// is the major.revision >= requested major.revision AND the minor version >= requested minor
|
||||
if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) { |
||||
return true; |
||||
} else { |
||||
return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false ); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
// Globals
|
||||
// Major version of Flash required
|
||||
var requiredMajorVersion = 7; |
||||
// Minor version of Flash required
|
||||
var requiredMinorVersion = 0; |
||||
// Minor version of Flash required
|
||||
var requiredRevision = 0; |
||||
// the version of javascript supported
|
||||
var jsVersion = 1.0; |
||||
//
|
||||
|
||||
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; |
||||
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; |
||||
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; |
||||
jsVersion = 1.1; |
||||
// JavaScript helper required to detect Flash Player PlugIn version information
|
||||
function JSGetSwfVer(i){ |
||||
// NS/Opera version >= 3 check for Flash plugin in plugin array
|
||||
if (navigator.plugins != null && navigator.plugins.length > 0) { |
||||
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { |
||||
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; |
||||
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; |
||||
descArray = flashDescription.split(" "); |
||||
tempArrayMajor = descArray[2].split("."); |
||||
versionMajor = tempArrayMajor[0]; |
||||
versionMinor = tempArrayMajor[1]; |
||||
if ( descArray[3] != "" ) { |
||||
tempArrayMinor = descArray[3].split("r"); |
||||
} else { |
||||
tempArrayMinor = descArray[4].split("r"); |
||||
} |
||||
versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0; |
||||
flashVer = versionMajor + "." + versionMinor + "." + versionRevision; |
||||
} else { |
||||
flashVer = -1; |
||||
} |
||||
} |
||||
// MSN/WebTV 2.6 supports Flash 4
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; |
||||
// WebTV 2.5 supports Flash 3
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; |
||||
// older WebTV supports Flash 2
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; |
||||
// Can\'t detect in all other cases
|
||||
else { |
||||
|
||||
flashVer = -1; |
||||
} |
||||
return flashVer; |
||||
} |
||||
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
|
||||
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) |
||||
{ |
||||
reqVer = parseFloat(reqMajorVer + "." + reqRevision); |
||||
// loop backwards through the versions until we find the newest version
|
||||
for (i=25;i>0;i--) { |
||||
if (isIE && isWin && !isOpera) { |
||||
versionStr = VBGetSwfVer(i); |
||||
} else { |
||||
versionStr = JSGetSwfVer(i); |
||||
} |
||||
if (versionStr == -1 ) { |
||||
return false; |
||||
} else if (versionStr != 0) { |
||||
if(isIE && isWin && !isOpera) { |
||||
tempArray = versionStr.split(" "); |
||||
tempString = tempArray[1]; |
||||
versionArray = tempString .split(","); |
||||
} else { |
||||
versionArray = versionStr.split("."); |
||||
} |
||||
versionMajor = versionArray[0]; |
||||
versionMinor = versionArray[1]; |
||||
versionRevision = versionArray[2]; |
||||
|
||||
versionString = versionMajor + "." + versionRevision; // 7.0r24 == 7.24
|
||||
versionNum = parseFloat(versionString); |
||||
// is the major.revision >= requested major.revision AND the minor version >= requested minor
|
||||
if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) { |
||||
return true; |
||||
} else { |
||||
return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false ); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue