summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.html1
-rw-r--r--js/codeq/hint.js13
-rw-r--r--js/codeq/prolog.js15
-rw-r--r--js/codeq/python.js13
4 files changed, 38 insertions, 4 deletions
diff --git a/index.html b/index.html
index 5c5d7b9..f7c4252 100644
--- a/index.html
+++ b/index.html
@@ -112,6 +112,7 @@
<div class="col-lg-3 col-md-6 col-sm-12 block" id="code_editor_outer_div">
<nav class="navbar navbar-default" id="block-toolbar">
<div class="container-fluid">
+ <button type="button" class="btn btn-default navbar-btn" id="btn_code_plan">Plan</button>
<button type="button" class="btn btn-default navbar-btn" id="btn_code_hint">Hint</button>
<button type="button" class="btn btn-default navbar-btn" id="btn_code_test">Test</button>
</div>
diff --git a/js/codeq/hint.js b/js/codeq/hint.js
index 06eceb0..c06aef7 100644
--- a/js/codeq/hint.js
+++ b/js/codeq/hint.js
@@ -7,9 +7,10 @@
var firstCharacterPos = {'line': 0, 'ch': 0},
sel_no_scroll = {'scroll': false};
- codeq.makeHinter = function (jqHints, jqEditor, editor, hintDefs) {
+ codeq.makeHinter = function (jqHints, jqEditor, editor, hintDefs, planDef) {
var hintCounter = 0, // for generating unique class-names
hintCleaners = [],
+ planIdx = 0,
clearHints = function () {
var i;
@@ -124,6 +125,16 @@
};
return {
+ /** Display the next "planning" hint and return whether there are
+ * any more available.
+ */
+ 'planNext': function () {
+ if (planIdx < planDef.length) {
+ jqHints.append('<div class="plan">' + planDef[planIdx++] + '</div>');
+ }
+ return planIdx < planDef.length;
+ },
+
/**
* Processes and display appropriately the server hints.
* TODO: sort hints so static and popup hints come first, and a (single) drop-down hint last
diff --git a/js/codeq/prolog.js b/js/codeq/prolog.js
index 96c3077..4eed354 100644
--- a/js/codeq/prolog.js
+++ b/js/codeq/prolog.js
@@ -95,9 +95,11 @@
* add the above function to the buttons
*/
addClickListenerTranstions = function(){
+ $('#btn_code_plan').on('click',clickListenerTransitionFun);
$('#btn_code_hint').on('click',clickListenerTransitionFun);
$('#btn_code_test').on('click',clickListenerTransitionFun);
+ $('#btn_code_plan').on(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_hint').on(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_test').on(transitionEventName,mouseDownEventIgnoreFun);
},
@@ -105,9 +107,11 @@
* and a function to remove it
*/
removeClickListenerTransition = function(){
+ $('#btn_code_plan').off('click',clickListenerTransitionFun);
$('#btn_code_hint').off('click',clickListenerTransitionFun);
$('#btn_code_test').off('click',clickListenerTransitionFun);
+ $('#btn_code_plan').off(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_hint').off(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_test').off(transitionEventName,mouseDownEventIgnoreFun);
},
@@ -362,11 +366,12 @@
editor = CodeMirror(jqEditor[0], { cursorHeight: 0.85, lineNumbers: true, matchBrackets: true }),
activityHandler = makeActivityHandler(editor, problem.id),
terminal = makePrologTerminalHandler(jqConsole, editor, problem.id, activityHandler),
- hinter = codeq.makeHinter(jqHints, jqEditor, editor, problem.hint);
+ hinter = codeq.makeHinter(jqHints, jqEditor, editor, problem.hint, problem.plan);
editor.setValue(info.solution);
$('#title').text(problem.slug);
jqDescription.html(problem.description);
+ $('#btn_code_plan').prop('disabled', problem.plan.length == 0);
editor.on('change', function (instance, changeObj) {
var doc = editor.getDoc(),
@@ -381,6 +386,12 @@
}
});
+ $('#btn_code_plan').on('click', function () {
+ if (!hinter.planNext()) {
+ $('#btn_code_plan').prop('disabled', true);
+ $('#btn_code_plan').blur();
+ }
+ });
$('#btn_code_hint').on('click', function () {
terminal.append('hint.\n', 'input');
terminal.inputDisable();
@@ -451,4 +462,4 @@
}
};
};
-})(); \ No newline at end of file
+})();
diff --git a/js/codeq/python.js b/js/codeq/python.js
index e856c08..1d4ee17 100644
--- a/js/codeq/python.js
+++ b/js/codeq/python.js
@@ -97,9 +97,11 @@
* add the above function to the buttons
*/
addClickListenerTranstions = function(){
+ $('#btn_code_plan').on('click',clickListenerTransitionFun);
$('#btn_code_hint').on('click',clickListenerTransitionFun);
$('#btn_code_test').on('click',clickListenerTransitionFun);
+ $('#btn_code_plan').on(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_hint').on(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_test').on(transitionEventName,mouseDownEventIgnoreFun);
},
@@ -107,9 +109,11 @@
* and a function to remove it
*/
removeClickListenerTransition = function(){
+ $('#btn_code_plan').off('click',clickListenerTransitionFun);
$('#btn_code_hint').off('click',clickListenerTransitionFun);
$('#btn_code_test').off('click',clickListenerTransitionFun);
+ $('#btn_code_plan').off(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_hint').off(transitionEventName,mouseDownEventIgnoreFun);
$('#btn_code_test').off(transitionEventName,mouseDownEventIgnoreFun);
},
@@ -312,11 +316,12 @@
editor = CodeMirror(jqEditor[0], { cursorHeight: 0.85, lineNumbers: true, matchBrackets: true, mode: 'python' }),
activityHandler = makeActivityHandler(editor, problem.id),
terminal = makePythonTerminalHandler(jqConsole, editor, problem.id, activityHandler),
- hinter = codeq.makeHinter(jqHints, jqEditor, editor, problem.hint);
+ hinter = codeq.makeHinter(jqHints, jqEditor, editor, problem.hint, problem.plan);
editor.setValue(info.solution);
$('#title').text(problem.slug);
jqDescription.html(problem.description);
+ $('#btn_code_plan').prop('disabled', problem.plan.length == 0);
editor.on('change', function (instance, changeObj) {
var doc = editor.getDoc(),
@@ -331,6 +336,12 @@
}
});
+ $('#btn_code_plan').on('click', function () {
+ if (!hinter.planNext()) {
+ $('#btn_code_plan').prop('disabled', true);
+ $('#btn_code_plan').blur();
+ }
+ });
$('#btn_code_hint').on('click', function () {
var doc = editor.getDoc();
codeq.comms.sendHint({