From 2732de648b3780eb1bb8cfbe6323f80fda269aa4 Mon Sep 17 00:00:00 2001
From: paflov <paf@titelfrei.de>
Date: Tue, 22 Jun 2021 19:26:44 +0200
Subject: [PATCH] * Adds startPage in playerConfig in vopStartCommand to let
 the player jump to the previously selected page; this might also be helpful
 in evaluation use cases where (after the test) the given answers of items at
 a specific page are expected to be presented

* makes validPages and currentPage optional in playerState for players w/o paging feature
---
 package-lock.json           |  2 +-
 test/test.spec.js           | 27 +++++++++++++++++++--------
 verona-simple-player-1.html | 19 ++++++++++++++++---
 3 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 314e7f9..a5660ad 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "verona-player-html",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
diff --git a/test/test.spec.js b/test/test.spec.js
index 957d8a3..17b4899 100644
--- a/test/test.spec.js
+++ b/test/test.spec.js
@@ -70,6 +70,25 @@ describe('simple player', () => {
     done();
   });
 
+  it('should open the page in `startPage`', async done => {
+    await send({
+      type: 'vopStartCommand',
+      unitDefinition:
+        '<fieldset><legend id="p1">Page 1</legend></fieldset><fieldset><legend id="p2">Page 2</legend></fieldset>',
+      sessionId: '1',
+      playerConfig: {
+        pagingMode: 'separate',
+        startPage: '2'
+      }
+    });
+
+    const page2 = await driver.findElement(By.id('p2'));
+
+    expect (await page2.isDisplayed()).toBeTrue();
+
+    done();
+  });
+
   it('should block unit on `vopStopCommand` and continue on `vopContinueCommand`', async done => {
     await send({
       type: 'vopStartCommand',
@@ -560,10 +579,6 @@ describe('simple player', () => {
         presentationProgress: 'complete',
         responseProgress: 'complete'
       },
-      playerState: {
-        currentPage: 0,
-        validPages: { 0: '' }
-      },
       unitStateDataTyp: 'verona-simple-player-1.0.0'
     });
 
@@ -609,10 +624,6 @@ describe('simple player', () => {
         presentationProgress: 'complete',
         responseProgress: 'complete'
       },
-      playerState: {
-        currentPage: 0,
-        validPages: { 0: '' }
-      },
       unitStateDataTyp: 'verona-simple-player-1.0.0'
     });
 
diff --git a/verona-simple-player-1.html b/verona-simple-player-1.html
index 9d26832..c10c308 100755
--- a/verona-simple-player-1.html
+++ b/verona-simple-player-1.html
@@ -277,6 +277,11 @@
   let sessionId = "";
 
   const isDefined = v => (typeof v !== "undefined");
+  const isEmpty = object => {
+    // noinspection LoopStatementThatDoesntLoopJS
+    for(let property in object) return false;
+    return true;
+  }
 
   const Time = new class {
     throttle = (callback, limit) => {
@@ -370,10 +375,12 @@
         }
 
         const playerState = this._getPlayerState();
-        console.log("ps", playerState);
         if (complete || (JSON.stringify(playerState) !== JSON.stringify(this._lastStates.playerState))) {
-          message.playerState = playerState;
           this._lastStates.playerState = playerState;
+          console.log('state of the game', playerState);
+          if (!isEmpty(playerState)) {
+            message.playerState = playerState;
+          }
         }
 
         const unitState = this._getUnitState();
@@ -433,7 +440,8 @@
       sessionId = data.sessionId || new Error("session ID missing");
 
       this._setUnit(data["unitDefinition"] || new Error("unitDefinition missing"));
-      this._setPlayerConfig(data["playerConfig"] || {});
+      const playerConfig = data["playerConfig"] || {};
+      this._setPlayerConfig(playerConfig);
       this._setUnitData(data["unitState"] || {});
 
       if (data['unitDefinitionType'] !== "verona-simple-player-1.0.0") {
@@ -441,6 +449,11 @@
       }
 
       PlayerUI.toggleUnitNavButtons();
+      PlayerUI.togglePageNavButtons();
+
+      if (playerConfig['startPage']) {
+        Pages.got(playerConfig.startPage);
+      }
     }
 
     getData = () => ({
-- 
GitLab