forked from Open-CT/openct-tasks
269 lines
8.6 KiB
JavaScript
269 lines
8.6 KiB
JavaScript
var getContext = function(display, infos, curLevel) {
|
|
|
|
var language_strings = {
|
|
en: {
|
|
categories: {
|
|
barcode: 'Image'
|
|
},
|
|
label: {
|
|
getPixelLuminosity: 'getPixelLuminosity(%1, %2)',
|
|
setPixelLuminosity: 'setPixelLuminosity(%1, %2, %3)',
|
|
width: 'width()',
|
|
height: 'height()',
|
|
printResult: 'printResult(%1)'
|
|
},
|
|
code: {
|
|
getPixelLuminosity: 'getPixelLuminosity',
|
|
setPixelLuminosity: 'setPixelLuminosity',
|
|
width: 'width',
|
|
height: 'height',
|
|
printResult: 'printResult'
|
|
},
|
|
description: {
|
|
getPixelLuminosity: '',
|
|
setPixelLuminosity: '',
|
|
width: '',
|
|
height: '',
|
|
printResult: ''
|
|
},
|
|
startingBlockName: "Program",
|
|
messages: {
|
|
success: 'Success',
|
|
mistake_digit: 'The digit with a red background is incorrect',
|
|
mistake_empty: 'Your program didn\'t print anything',
|
|
mistake_length: 'The printed result has an incorrect length',
|
|
mistake_pixel: 'The pixel with a red border has luminosity %1, but should have luminosity %2',
|
|
result: 'Result:',
|
|
tooltip: 'Coordinates (%1, %2), luminosity %3'
|
|
}
|
|
},
|
|
fr: {
|
|
categories: {
|
|
barcode: 'Image'
|
|
},
|
|
label: {
|
|
getPixelLuminosity: 'getPixelLuminosity(%1, %2)',
|
|
setPixelLuminosity: 'setPixelLuminosity(%1, %2, %3)',
|
|
width: 'width()',
|
|
height: 'height()',
|
|
printResult: 'printResult(%1)'
|
|
},
|
|
code: {
|
|
getPixelLuminosity: 'getPixelLuminosity',
|
|
setPixelLuminosity: 'setPixelLuminosity',
|
|
width: 'width',
|
|
height: 'height',
|
|
printResult: 'printResult'
|
|
},
|
|
description: {
|
|
getPixelLuminosity: 'getPixelLuminosity(col, line) obtient la luminosité à la colonne et ligne données',
|
|
setPixelLuminosity: 'setPixelLuminosity(col, line, luminosity) modifie la luminosité à la colonne et ligne données',
|
|
width: 'width() retourne la largeur de l\'image',
|
|
height: 'height() retourne la hauteur de l\'image',
|
|
printResult: 'printResult(string) affiche le résultat'
|
|
},
|
|
startingBlockName: "Programme",
|
|
messages: {
|
|
success: 'Success',
|
|
mistake_digit: 'Le chiffre sur fond rouge est incorrect',
|
|
mistake_empty: 'Votre programme n\'a rien affiché',
|
|
mistake_length: 'Le résultat affiché n\'a pas la bonne longueur',
|
|
mistake_pixel: 'Le pixel encadré en rouge a la luminosité %1, mais devrait avoir la luminosité %2',
|
|
mistake_pixel: 'Le(s) pixel(s) avec une bordure rouge sont incorrects',
|
|
result: 'Résultat :',
|
|
tooltip: 'Coordonnées (%1, %2), luminosité %3'
|
|
}
|
|
}
|
|
}
|
|
|
|
var context = quickAlgoContext(display, infos)
|
|
context.inlinePopupMessage = true;
|
|
var strings = context.setLocalLanguageStrings(language_strings)
|
|
|
|
/*
|
|
var conceptBaseUrl = window.location.protocol + '//static4.castor-informatique.fr/help/index.html';
|
|
context.conceptList = [
|
|
{id: 'test', name: 'test', url: conceptBaseUrl+'#test'},
|
|
];
|
|
*/
|
|
|
|
|
|
|
|
context.reset = function(taskInfos) {
|
|
var grid = $('#grid');
|
|
|
|
if(context.display) {
|
|
grid.empty();
|
|
}
|
|
|
|
|
|
context.barcodeDisplay = DisplaysManager.get(
|
|
'BarcodeDisplay',
|
|
context.iTestCase,
|
|
context.display,
|
|
grid,
|
|
{
|
|
strings: strings
|
|
}
|
|
);
|
|
|
|
|
|
context.stringDisplay = DisplaysManager.get(
|
|
'StringDisplay',
|
|
context.iTestCase,
|
|
context.display,
|
|
grid,
|
|
{
|
|
strings: strings
|
|
}
|
|
);
|
|
|
|
|
|
context.userDisplay = DisplaysManager.get(
|
|
'UserDisplay',
|
|
context.iTestCase,
|
|
context.display,
|
|
grid,
|
|
{
|
|
strings: strings
|
|
}
|
|
);
|
|
|
|
if(context.display) {
|
|
// Save last displayed for updateScale
|
|
context.lastBarcodeDisplay = context.barcodeDisplay;
|
|
context.lastStringDisplay = context.stringDisplay;
|
|
context.lastUserDisplay = context.userDisplay;
|
|
}
|
|
|
|
if(taskInfos) {
|
|
context.valid_result = taskInfos.valid_result || {};
|
|
context.barcodeDisplay.setImage(taskInfos.image);
|
|
|
|
if(taskInfos.user_display) {
|
|
context.userDisplay.setSize(taskInfos.user_display);
|
|
} else {
|
|
context.userDisplay.clear();
|
|
}
|
|
} else {
|
|
context.stringDisplay.reset();
|
|
context.userDisplay.reset();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
context.setScale = function(scale) {}
|
|
context.updateScale = function() {
|
|
context.lastBarcodeDisplay && context.lastBarcodeDisplay.render();
|
|
context.lastUserDisplay && context.lastUserDisplay.render();
|
|
}
|
|
context.resetDisplay = function() {}
|
|
context.unload = function() {}
|
|
|
|
|
|
|
|
|
|
|
|
context.gradeResult = function() {
|
|
switch(context.valid_result.type) {
|
|
case 'string':
|
|
var res = context.stringDisplay.diff(context.valid_result);
|
|
break;
|
|
case 'array':
|
|
var res = context.userDisplay.diff(context.valid_result);
|
|
break;
|
|
}
|
|
context.success = res.success;
|
|
if(context.success) {
|
|
throw(res.message);
|
|
return;
|
|
}
|
|
throw new Error(res.message);
|
|
}
|
|
|
|
|
|
context.barcode = {
|
|
|
|
getPixelLuminosity: function(x, y, callback) {
|
|
var cb = context.runner.waitCallback(callback);
|
|
context.barcodeDisplay.getPixelLuminosity(x, y, function(value) {
|
|
// Add a delay
|
|
setTimeout(function() {
|
|
cb(value);
|
|
}, context.infos.actionDelay);
|
|
})
|
|
},
|
|
|
|
setPixelLuminosity: function(x, y, v, callback) {
|
|
context.waitDelay(callback, context.userDisplay.setPixelLuminosity(x, y, v));
|
|
},
|
|
|
|
width: function(callback) {
|
|
var cb = context.runner.waitCallback(callback);
|
|
context.barcodeDisplay.getSize(function(size) {
|
|
cb(size.width);
|
|
});
|
|
},
|
|
|
|
height: function(callback) {
|
|
var cb = context.runner.waitCallback(callback);
|
|
context.barcodeDisplay.getSize(function(size) {
|
|
cb(size.height);
|
|
});
|
|
},
|
|
|
|
printResult: function(v, callback) {
|
|
context.waitDelay(callback, context.stringDisplay.setData(v));
|
|
}
|
|
}
|
|
|
|
|
|
context.customBlocks = {
|
|
barcode: {
|
|
barcode: [
|
|
{ name: 'getPixelLuminosity',
|
|
params: ['Number', 'Number'],
|
|
params_names: ['x', 'y'],
|
|
yieldsValue: true
|
|
},
|
|
{ name: 'setPixelLuminosity',
|
|
params: ['Number', 'Number', 'Number'],
|
|
params_names: ['x', 'y', 'value']
|
|
},
|
|
{ name: 'width',
|
|
params: [],
|
|
params_names: [],
|
|
yieldsValue: true
|
|
},
|
|
{ name: 'height',
|
|
params: [],
|
|
params_names: [],
|
|
yieldsValue: true
|
|
},
|
|
{ name: 'printResult',
|
|
params: ['String'],
|
|
params_names: ['v']
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
var typeData = {
|
|
'Number': { bType: 'input_value', vType: 'math_number', fName: 'NUM', defVal: 0 },
|
|
'String': { bType: 'input_value', vType: 'text', fName: 'TEXT', defVal: '' },
|
|
'Block': { bType: 'input_value', fName: 'BLOCK', defVal: '' },
|
|
}
|
|
BlocksHelper.convertBlocks(context, 'barcode', typeData);
|
|
return context;
|
|
}
|
|
|
|
if(window.quickAlgoLibraries) {
|
|
quickAlgoLibraries.register('barcode', getContext);
|
|
} else {
|
|
if(!window.quickAlgoLibrariesList) { window.quickAlgoLibrariesList = []; }
|
|
window.quickAlgoLibrariesList.push(['barcode', getContext]);
|
|
}
|