X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2Fproblems.js;h=63f06e5568a0a6224f633be2edc2ece756583ecf;hb=e081ffe361b06ca74db0a36bf72dd73602abf57b;hp=3bd13f63baf8856259deca647cfece614feaef7f;hpb=45109880413a50dec3a07298b987fb07d60630b2;p=vchess.git diff --git a/public/javascripts/components/problems.js b/public/javascripts/components/problems.js index 3bd13f63..63f06e55 100644 --- a/public/javascripts/components/problems.js +++ b/public/javascripts/components/problems.js @@ -3,7 +3,7 @@ Vue.component('my-problems', { return { problems: problemArray, //initial value newProblem: { - fen: V.GenRandInitFen(), + fen: "", instructions: "", solution: "", stage: "nothing", //or "preview" after new problem is filled @@ -11,39 +11,56 @@ Vue.component('my-problems', { }; }, template: ` -
- - - +
+
+ + + +
+ v-for="(p,idx) in sortedProblems" + v-bind:prob="p" v-bind:preview="false" v-bind:key="idx">
-

Add problem

+

{{ translate("Add a problem") }}

- - + +
-

Safe HTML tags allowed

- +

{{ translate("Safe HTML tags allowed") }}

+ + +
- // TODO: we don't want exactly the same display (-date +solution) - - + + + +
+ + +
@@ -53,17 +70,16 @@ Vue.component('my-problems', { // Newest problem first return this.problems.sort((p1,p2) => { return p2.added - p1.added; }); }, - mailErrProblem: function() { - return "mailto:contact@vchess.club?subject=[" + variant + " problems] error"; - }, }, methods: { + translate: function(text) { + return translations[text]; + }, // Propagate "show problem" event to parent component (my-variant) bubbleUp: function(problem) { this.$emit('show-problem', JSON.stringify(problem)); }, fetchProblems: function(direction) { - return; //TODO: re-activate after server side is implemented (see routes/all.js) if (this.problems.length == 0) return; //what could we do?! // Search for newest date (or oldest) @@ -89,7 +105,11 @@ Vue.component('my-problems', { }, previewNewProblem: function() { if (!V.IsGoodFen(this.newProblem.fen)) - return alert("Bad FEN string"); + return alert(translations["Bad FEN description"]); + if (this.newProblem.instructions.trim().length == 0) + return alert(translations["Empty instructions"]); + if (this.newProblem.solution.trim().length == 0) + return alert(translations["Empty solution"]); this.newProblem.stage = "preview"; }, sendNewProblem: function() { @@ -99,6 +119,8 @@ Vue.component('my-problems', { instructions: this.newProblem.instructions, solution: this.newProblem.solution, }, response => { + this.newProblem.added = Date.now(); + this.problems.push(JSON.parse(JSON.stringify(this.newProblem))); document.getElementById("modal-newproblem").checked = false; this.newProblem.stage = "nothing"; });