X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FProblems.vue;h=a1c3e83c154d43b6a8402e890549caca1ea73e5d;hb=feaf1bf73fa8c6054e353585dee0b8a4fdcfbc4e;hp=9a729335b9a98ff120412a499bc07daf342439ab;hpb=f37790f7fe26c7b3bf704781249945ef7e3199da;p=vchess.git diff --git a/client/src/views/Problems.vue b/client/src/views/Problems.vue index 9a729335..a1c3e83c 100644 --- a/client/src/views/Problems.vue +++ b/client/src/views/Problems.vue @@ -2,7 +2,7 @@ main input#modalNewprob.modal( type="checkbox" - @change="infoMsg=''" + @change="fenFocusIfOpened($event)" ) div#newprobDiv( role="dialog" @@ -47,19 +47,16 @@ main .row(v-if="showOne") .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2 #topPage + .button-group(v-if="st.user.id == curproblem.uid") + button(@click="editProblem(curproblem)") {{ st.tr["Edit"] }} + button(@click="deleteProblem(curproblem)") {{ st.tr["Delete"] }} span.vname {{ curproblem.vname }} span.uname ({{ curproblem.uname }}) button.marginleft(@click="backToList()") {{ st.tr["Back to list"] }} - button.nomargin( - v-if="st.user.id == curproblem.uid" - @click="editProblem(curproblem)" - ) - | {{ st.tr["Edit"] }} - button.nomargin( - v-if="st.user.id == curproblem.uid" - @click="deleteProblem(curproblem)" - ) - | {{ st.tr["Delete"] }} + button.nomargin(@click="gotoPrevNext($event,curproblem,1)") + | {{ st.tr["Previous"] }} + button.nomargin(@click="gotoPrevNext($event,curproblem,-1)") + | {{ st.tr["Next_p"] }} p.oneInstructions.clickable( v-html="parseHtml(curproblem.instruction)" @click="curproblem.showSolution=!curproblem.showSolution" @@ -86,7 +83,7 @@ main :value="v.id" ) | {{ v.name }} - table + table#tProblems tr th {{ st.tr["Variant"] }} th {{ st.tr["Instructions"] }} @@ -102,7 +99,6 @@ main BaseGame( v-if="showOne" :game="game" - :vr="vr" ) @@ -142,7 +138,6 @@ export default { onlyMines: false, showOne: false, infoMsg: "", - vr: null, //"variant rules" object initialized from FEN game: { players: [{ name: "Problem" }, { name: "Problem" }], mode: "analyze" @@ -198,6 +193,12 @@ export default { } }, methods: { + fenFocusIfOpened: function(event) { + if (event.target.checked) { + this.infoMsg = ""; + document.getElementById("inputFen").focus(); + } + }, setVname: function(prob) { prob.vname = this.st.variants.find(v => v.id == prob.vid).name; }, @@ -283,15 +284,29 @@ export default { showProblem: function(p) { this.loadVariant(p.vid, () => { // The FEN is already checked at this stage: - this.vr = new V(p.fen); this.game.vname = p.vname; - this.game.mycolor = this.vr.turn; //diagram orientation + this.game.mycolor = V.ParseFen(p.fen).turn; //diagram orientation this.game.fen = p.fen; this.$set(this.game, "fenStart", p.fen); this.copyProblem(p, this.curproblem); this.showOne = true; }); }, + gotoPrevNext: function(e, prob, dir) { + const startIdx = this.problems.findIndex(p => p.id == prob.id); + let nextIdx = startIdx + dir; + while ( + nextIdx >= 0 && + nextIdx < this.problems.length && + ((this.onlyMines && this.problems[nextIdx].uid != this.st.user.id) || + (!this.onlyMines && this.problems[nextIdx].uid == this.st.user.id)) + ) + nextIdx += dir; + if (nextIdx >= 0 && nextIdx < this.problems.length) + this.setHrefPid(this.problems[nextIdx]); + else + alert(this.st.tr["No more problems"]); + }, prepareNewProblem: function() { this.resetCurProb(); window.doClick("modalNewprob"); @@ -359,6 +374,9 @@ textarea margin: 0 auto max-width: 400px +table#tProblems + max-height: 100% + #controls margin: 0 width: 100%