From 895cb36fea6026e3f6e45b7d5e6a370e33ad2b37 Mon Sep 17 00:00:00 2001 From: silas Date: Tue, 25 Sep 2018 14:48:12 +0200 Subject: [PATCH] =?UTF-8?q?Rotationsrichtung=20in=20beide=20Richtungen=20m?= =?UTF-8?q?=C3=B6glich?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/test.sh | 1 - log/error.log | 25 +-------- log/log.log | 25 +-------- public/css/wordRotator.css | 2 +- public/js/app.js | 56 ++++++++++++++----- .../Application/pwa/js/site/MenuSite.js | 3 +- .../js/wordrotator/Segment/ParentSegment.js | 56 ++++++++++++++----- .../src/Controller/SyncController.php | 1 - src/scss/wordRotator.scss | 32 ++++++++++- test/test.testcafe.js | 2 +- 10 files changed, 122 insertions(+), 81 deletions(-) diff --git a/bin/test.sh b/bin/test.sh index d04a31d..1cb5704 100644 --- a/bin/test.sh +++ b/bin/test.sh @@ -1,4 +1,3 @@ #!/usr/bin/env bash testcafe firefox test/test.testcafe.js -#testcafe chrome test/betaplay.testcafe.js diff --git a/log/error.log b/log/error.log index 4600502..451372e 100755 --- a/log/error.log +++ b/log/error.log @@ -1,24 +1 @@ -2018-09-20T20:09:20+02:00 ERR (3): -2018-09-21T17:17:37+02:00 ERR (3): -2018-09-21T17:18:04+02:00 ERR (3): -2018-09-21T17:33:11+02:00 ERR (3): -2018-09-21T17:34:08+02:00 ERR (3): -2018-09-22T00:43:23+02:00 ERR (3): -2018-09-22T00:58:27+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T00:58:53+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T01:00:24+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T01:01:25+02:00 ERR (3): -2018-09-22T12:55:44+02:00 ERR (3): -2018-09-23T00:22:31+02:00 ERR (3): -2018-09-23T20:42:28+02:00 ERR (3): -2018-09-23T20:45:07+02:00 ERR (3): -2018-09-24T12:26:01+02:00 ERR (3): -2018-09-24T12:26:07+02:00 ERR (3): -2018-09-24T12:46:47+02:00 ERR (3): -2018-09-24T18:00:03+02:00 ERR (3): -2018-09-24T18:08:09+02:00 ERR (3): -2018-09-24T18:15:13+02:00 ERR (3): -2018-09-24T18:48:11+02:00 ERR (3): -2018-09-24T18:48:21+02:00 ERR (3): -2018-09-24T19:08:22+02:00 ERR (3): -2018-09-24T19:47:41+02:00 ERR (3): +2018-09-25T13:32:08+02:00 ERR (3): diff --git a/log/log.log b/log/log.log index 4600502..451372e 100755 --- a/log/log.log +++ b/log/log.log @@ -1,24 +1 @@ -2018-09-20T20:09:20+02:00 ERR (3): -2018-09-21T17:17:37+02:00 ERR (3): -2018-09-21T17:18:04+02:00 ERR (3): -2018-09-21T17:33:11+02:00 ERR (3): -2018-09-21T17:34:08+02:00 ERR (3): -2018-09-22T00:43:23+02:00 ERR (3): -2018-09-22T00:58:27+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T00:58:53+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T01:00:24+02:00 ERR (3): syntax error, unexpected '$request' (T_VARIABLE) - ErrorCode: 0 File: /var/www/pwa/wordRotator/src/module/Application/src/Controller/SyncController.php Line: 108 -2018-09-22T01:01:25+02:00 ERR (3): -2018-09-22T12:55:44+02:00 ERR (3): -2018-09-23T00:22:31+02:00 ERR (3): -2018-09-23T20:42:28+02:00 ERR (3): -2018-09-23T20:45:07+02:00 ERR (3): -2018-09-24T12:26:01+02:00 ERR (3): -2018-09-24T12:26:07+02:00 ERR (3): -2018-09-24T12:46:47+02:00 ERR (3): -2018-09-24T18:00:03+02:00 ERR (3): -2018-09-24T18:08:09+02:00 ERR (3): -2018-09-24T18:15:13+02:00 ERR (3): -2018-09-24T18:48:11+02:00 ERR (3): -2018-09-24T18:48:21+02:00 ERR (3): -2018-09-24T19:08:22+02:00 ERR (3): -2018-09-24T19:47:41+02:00 ERR (3): +2018-09-25T13:32:08+02:00 ERR (3): diff --git a/public/css/wordRotator.css b/public/css/wordRotator.css index b271439..23ecc0c 100755 --- a/public/css/wordRotator.css +++ b/public/css/wordRotator.css @@ -1,2 +1,2 @@ -nav.top-bar.title-bar{padding:.3rem .6rem 0}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.dropdown.menu a,.menu a{padding:.2rem .5rem}#level-number-container{z-index:1;-webkit-transition:none;transition:none;position:absolute;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);border:3px solid #fff;border-radius:50%;visibility:hidden;display:table-cell;height:35px;width:35px;text-align:center;vertical-align:middle}#level-number-container.visible{visibility:visible}#level-number-container.in-main-menu{background:#fff;border-color:#000;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container #level-number{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-weight:700}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}.coin-counter :after{background-image:url(../img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{height:30px}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:30px;display:inline-block}.height-10{height:10%}.width-10{width:10%}.height-20{height:20%}.width-20{width:20%}.height-30{height:30%}.width-30{width:30%}.height-40{height:40%}.width-40{width:40%}.height-50{height:50%}.width-50{width:50%}.height-60{height:60%}.width-60{width:60%}.height-70{height:70%}.width-70{width:70%}.height-80{height:80%}.width-80{width:80%}.height-90{height:90%}.width-90{width:90%}.height-100{height:100%}.width-100{width:100%}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10!important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180,.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);transform:rotate(0deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level,#level *,.segment{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:normal;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:#fff;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none!important;animation:none!important;white-space:nowrap}.segment.segment-leaf{background-color:transparent;min-width:1em;padding:.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:1px solid #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:3px solid #000}#site-content>:not(.won) .segment.locked,#site-content>:not(.won) .segment.locked>.child-container>.segment-leaf{border-color:#3adb76;background-color:#9ffbb5!important}#site-content>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.text-right{text-align:right}#continue-button{margin-bottom:2px} +nav.top-bar.title-bar{padding:.3rem .6rem 0}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.dropdown.menu a,.menu a{padding:.2rem .5rem}#level-number-container{z-index:1;-webkit-transition:none;transition:none;position:absolute;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);border:3px solid #fff;border-radius:50%;visibility:hidden;display:table-cell;height:35px;width:35px;text-align:center;vertical-align:middle}#level-number-container.visible{visibility:visible}#level-number-container.in-main-menu{background:#fff;border-color:#000;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container #level-number{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-weight:700}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}.coin-counter :after{background-image:url(../img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{height:30px}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:30px;display:inline-block}.height-10{height:10%}.width-10{width:10%}.height-20{height:20%}.width-20{width:20%}.height-30{height:30%}.width-30{width:30%}.height-40{height:40%}.width-40{width:40%}.height-50{height:50%}.width-50{width:50%}.height-60{height:60%}.width-60{width:60%}.height-70{height:70%}.width-70{width:70%}.height-80{height:80%}.width-80{width:80%}.height-90{height:90%}.width-90{width:90%}.height-100{height:100%}.width-100{width:100%}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-reverse-270{0%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-reverse-270{0%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10!important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180,.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);transform:rotate(0deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(1turn);transform:rotate(1turn);background-color:#fff;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level,#level *,.segment{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:normal;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:#fff;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none!important;animation:none!important;white-space:nowrap}.segment.segment-leaf{background-color:transparent;min-width:1em;padding:.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:1px solid #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:3px solid #000}#site-content>:not(.won) .segment.locked,#site-content>:not(.won) .segment.locked>.child-container>.segment-leaf{border-color:#3adb76;background-color:#9ffbb5!important}#site-content>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.text-right{text-align:right}#continue-button{margin-bottom:2px} /*# sourceMappingURL=wordRotator.css.map */ \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index d6e85e9..71150fb 100755 --- a/public/js/app.js +++ b/public/js/app.js @@ -5022,7 +5022,7 @@ class ParentSegment extends Segment { }); } - setIsRotatable(rotatable){ + setIsRotatable(rotatable) { this.rotatable = rotatable; this._updateElement(); } @@ -5035,18 +5035,18 @@ class ParentSegment extends Segment { let self = this; this.touchendListener = function (e) { - if (e.targetTouches.length === 0 && e.changedTouches.length === 1 && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains(document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY))) { - self.rotate(); + let target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY); + if (e.targetTouches.length === 0 && e.changedTouches.length === 1 && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains()) { + self.rotate(ParentSegment.mouseDownTarget, target); e.stopPropagation(); e.preventDefault(); } }; this.mouseupListener = function (e) { if (ParentSegment.mouseDownTarget !== null && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains(e.target)) { - self.rotate(); + self.rotate(ParentSegment.mouseDownTarget, e.target); e.stopPropagation(); e.preventDefault(); - console.log("mouseup", e); } }; } @@ -5055,23 +5055,52 @@ class ParentSegment extends Segment { return (this.rotatable && !this.getLevel().getHasWon()); } - async rotate() { + async rotate(firstElem, secondElem) { let timeout = 250; + + let rotationDirection = 1; + if (Helper.isNotNull(firstElem) && Helper.isNotNull(secondElem)) { + + let firstIndex = -1; + let secondIndex = -1; + let rotationIndexes = [0,1,3,2]; + for (let i = 0; i < this.children.length; i++) { + if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) { + firstIndex = (i+this.rotation/90)%4; + } + if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) { + secondIndex = (i+this.rotation/90)%4; + } + } + + if (firstIndex >= 0 && secondIndex >= 0) { + if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1) + || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3) + || (firstIndex === 0 && secondIndex === 3) + || (firstIndex === 3 && secondIndex === 2)) { + rotationDirection = -1; + } + } + } + if (this.canRotate()) { - this.rotation += 90; + this.rotation += 360 + 90 * rotationDirection; this.rotation %= 360; let currentRotation = this.rotation; this._updateRotationClass(); this.element.classList.add("rotating"); + if (rotationDirection === -1){ + this.element.classList.add("reverse"); + } - let self = this; let delayPromise = new Promise(function (resolve) { setTimeout(resolve, timeout); }).then(() => { - if (self.rotation === currentRotation) { - self.element.classList.remove("rotating"); + if (this.rotation === currentRotation) { + this.element.classList.remove("rotating"); + this.element.classList.remove("reverse"); } }); this.getLevel().checkHasWon(delayPromise); @@ -5094,7 +5123,7 @@ class ParentSegment extends Segment { applyRotations(rotations) { this.rotation = rotations[0]; - if (isNaN(this.rotation)){ + if (isNaN(this.rotation)) { this.rotation = 0; } @@ -5170,7 +5199,7 @@ class ParentSegment extends Segment { this.element.classList.add("layer-" + layer); } - if (!this.rotatable){ + if (!this.rotatable) { this.element.classList.add("locked"); } @@ -6032,7 +6061,7 @@ class MenuSite extends WordRotatorBaseSite { let randomRotationFunction = () => { let timeout = Math.random() * 4500 + 1500; - setTimeout(() => { + this.randomRotateTimeout = setTimeout(() => { let indexBlocked = -1; let indexesNotRight = []; for (let i = 0; i < rotationsSegments.length; i++) { @@ -6117,6 +6146,7 @@ class MenuSite extends WordRotatorBaseSite { } onPause(args) { + clearTimeout(this.randomRotateTimeout); window.removeEventListener("resize", this.listener); super.onPause(args); } diff --git a/src/module/Application/pwa/js/site/MenuSite.js b/src/module/Application/pwa/js/site/MenuSite.js index f13b676..4d766ca 100644 --- a/src/module/Application/pwa/js/site/MenuSite.js +++ b/src/module/Application/pwa/js/site/MenuSite.js @@ -33,7 +33,7 @@ export class MenuSite extends WordRotatorBaseSite { let randomRotationFunction = () => { let timeout = Math.random() * 4500 + 1500; - setTimeout(() => { + this.randomRotateTimeout = setTimeout(() => { let indexBlocked = -1; let indexesNotRight = []; for (let i = 0; i < rotationsSegments.length; i++) { @@ -118,6 +118,7 @@ export class MenuSite extends WordRotatorBaseSite { } onPause(args) { + clearTimeout(this.randomRotateTimeout); window.removeEventListener("resize", this.listener); super.onPause(args); } diff --git a/src/module/Application/pwa/js/wordrotator/Segment/ParentSegment.js b/src/module/Application/pwa/js/wordrotator/Segment/ParentSegment.js index 1894402..db233d3 100755 --- a/src/module/Application/pwa/js/wordrotator/Segment/ParentSegment.js +++ b/src/module/Application/pwa/js/wordrotator/Segment/ParentSegment.js @@ -1,10 +1,10 @@ import {Segment} from "./Segment"; +import {Helper} from "../../../../../../js/lib/pwa-lib"; export class ParentSegment extends Segment { static initListener() { window.addEventListener("mousedown", (e) => { ParentSegment.mouseDownTarget = e.target; - ParentSegment.clickPosition = {x: e.clientX, y: e.clientY}; }); window.addEventListener("mouseup", (e) => { ParentSegment.mouseDownTarget = null; @@ -13,7 +13,6 @@ export class ParentSegment extends Segment { window.addEventListener("touchstart", (e) => { if (e.targetTouches.length === 1) { ParentSegment.mouseDownTarget = e.targetTouches[0].target; - ParentSegment.clickPosition = {x: e.targetTouches[0].clientX, y: e.targetTouches[0].clientY}; } }); window.addEventListener("touchend", (e) => { @@ -21,7 +20,7 @@ export class ParentSegment extends Segment { }); } - setIsRotatable(rotatable){ + setIsRotatable(rotatable) { this.rotatable = rotatable; this._updateElement(); } @@ -34,18 +33,18 @@ export class ParentSegment extends Segment { let self = this; this.touchendListener = function (e) { - if (e.targetTouches.length === 0 && e.changedTouches.length === 1 && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains(document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY))) { - self.rotate(); + let target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY); + if (e.targetTouches.length === 0 && e.changedTouches.length === 1 && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains()) { + self.rotate(ParentSegment.mouseDownTarget, target); e.stopPropagation(); e.preventDefault(); } }; this.mouseupListener = function (e) { if (ParentSegment.mouseDownTarget !== null && self.element.contains(ParentSegment.mouseDownTarget) && self.element.contains(e.target)) { - self.rotate(); + self.rotate(ParentSegment.mouseDownTarget, e.target); e.stopPropagation(); e.preventDefault(); - console.log("mouseup", e); } }; } @@ -54,23 +53,52 @@ export class ParentSegment extends Segment { return (this.rotatable && !this.getLevel().getHasWon()); } - async rotate() { + async rotate(firstElem, secondElem) { let timeout = 250; + + let rotationDirection = 1; + if (Helper.isNotNull(firstElem) && Helper.isNotNull(secondElem)) { + + let firstIndex = -1; + let secondIndex = -1; + let rotationIndexes = [0,1,3,2]; + for (let i = 0; i < this.children.length; i++) { + if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) { + firstIndex = (i+this.rotation/90)%4; + } + if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) { + secondIndex = (i+this.rotation/90)%4; + } + } + + if (firstIndex >= 0 && secondIndex >= 0) { + if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1) + || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3) + || (firstIndex === 0 && secondIndex === 3) + || (firstIndex === 3 && secondIndex === 2)) { + rotationDirection = -1; + } + } + } + if (this.canRotate()) { - this.rotation += 90; + this.rotation += 360 + 90 * rotationDirection; this.rotation %= 360; let currentRotation = this.rotation; this._updateRotationClass(); this.element.classList.add("rotating"); + if (rotationDirection === -1){ + this.element.classList.add("reverse"); + } - let self = this; let delayPromise = new Promise(function (resolve) { setTimeout(resolve, timeout); }).then(() => { - if (self.rotation === currentRotation) { - self.element.classList.remove("rotating"); + if (this.rotation === currentRotation) { + this.element.classList.remove("rotating"); + this.element.classList.remove("reverse"); } }); this.getLevel().checkHasWon(delayPromise); @@ -93,7 +121,7 @@ export class ParentSegment extends Segment { applyRotations(rotations) { this.rotation = rotations[0]; - if (isNaN(this.rotation)){ + if (isNaN(this.rotation)) { this.rotation = 0; } @@ -169,7 +197,7 @@ export class ParentSegment extends Segment { this.element.classList.add("layer-" + layer); } - if (!this.rotatable){ + if (!this.rotatable) { this.element.classList.add("locked"); } diff --git a/src/module/Application/src/Controller/SyncController.php b/src/module/Application/src/Controller/SyncController.php index 609eff1..3db032c 100755 --- a/src/module/Application/src/Controller/SyncController.php +++ b/src/module/Application/src/Controller/SyncController.php @@ -104,7 +104,6 @@ class SyncController extends JsonController public function getLevelsAction() { -// fdhsdh $request = $this->getRequest(); $currentRun = (int)$request->getQuery("currentRun", null); diff --git a/src/scss/wordRotator.scss b/src/scss/wordRotator.scss index 2b4e99e..bf698dc 100755 --- a/src/scss/wordRotator.scss +++ b/src/scss/wordRotator.scss @@ -86,7 +86,7 @@ $coinTowerDimension: 28px; //Segments $rotationDegrees: (90 180 270 360); -$animationDuration: 0.25s; +$animationDuration: .25s; @for $i from 1 through 10 { $value: percentage($i/10); @@ -109,6 +109,15 @@ $animationDuration: 0.25s; transform: rotate(#{nth($rotationDegrees, $i)}deg); } } + @keyframes rotate-reverse-#{nth($rotationDegrees, $i)} { + 0% { + transform: rotate(#{(nth($rotationDegrees, $i))+90}deg); + } + 100% { + transform: rotate(#{$startDegree+90}deg); + } + } + } .segment:not(.segment-row):not(.segment-triangle) { @@ -139,6 +148,23 @@ $animationDuration: 0.25s; } } } + + &.reverse{ + //animation-name: rotate-reverse-#{(nth($rotationDegrees, $i))%360+90}; + animation-name: rotate-reverse-#{nth($rotationDegrees, $i)}; + > .child-container { + > .segment { + //animation-name: rotate-reverse-#{360- (nth($rotationDegrees, $i)%360)}; + animation-name: rotate-reverse-#{(540- nth($rotationDegrees, $i))%360+90}; + @for $j from 1 through length($rotationDegrees) { + $animationName: ((nth($rotationDegrees, $j)- nth($rotationDegrees, $i)+360)%360)+90; + &.rotate-#{nth($rotationDegrees, $j)} { + animation-name: rotate-reverse-#{($animationName+90)%360+90}; + } + } + } + } + } } } } @@ -171,6 +197,10 @@ $animationDuration: 0.25s; animation-duration: $animationDuration; animation-fill-mode: forwards; animation-timing-function: linear; + + &.reverse{ + animation-name: rotate-reverse-#{$animationName}; + } } } } diff --git a/test/test.testcafe.js b/test/test.testcafe.js index 3601acd..b7c62e6 100644 --- a/test/test.testcafe.js +++ b/test/test.testcafe.js @@ -17,7 +17,7 @@ async function beforeEachTest(t){ // await replaceRandom(); } -let isLocal = true; +let isLocal = false; if (isLocal) { fixture`Play` .page`https://127.0.0.1/pwa/wordRotator/publicTest/`.beforeEach(async t => {