diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 1ce105b6..00000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml
new file mode 100644
index 00000000..fe9a14ca
--- /dev/null
+++ b/.github/workflows/translations.yml
@@ -0,0 +1,18 @@
+name: translate
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - beta
+
+jobs:
+ auto-translate:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: jeedom/jeetranslate@main
+ with:
+ deepl_api_key: ${{ secrets.DEEPL_API_KEY }}
+ include_empty_translation: false
+ target_languages: "en_US,es_ES,de_DE,it_IT,pt_PT"
+ use_core_translations: true
diff --git a/.gitignore b/.gitignore
index c6650da1..35037478 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,5 @@ plugins
.project
.DS_Store
.vscode
+.history
+graphify-out
diff --git a/3rdparty/animate/animate.css b/3rdparty/animate/animate.css
deleted file mode 100755
index 1b33ecb3..00000000
--- a/3rdparty/animate/animate.css
+++ /dev/null
@@ -1,2956 +0,0 @@
-@charset "UTF-8";
-
-/*!
- * animate.css -http://daneden.me/animate
- * Version - 3.6.0
- * Licensed under the MIT license - http://opensource.org/licenses/MIT
- *
- * Copyright (c) 2018 Daniel Eden
- */
-
-.animated {
- -webkit-animation-duration: 1s;
- animation-duration: 1s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
-}
-.animated.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
-}
-@-webkit-keyframes bounce {
- 0%,
- 20%,
- 53%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 40%,
- 43% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -30px, 0);
- transform: translate3d(0, -30px, 0);
- }
- 70% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -15px, 0);
- transform: translate3d(0, -15px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -4px, 0);
- transform: translate3d(0, -4px, 0);
- }
-}
-@keyframes bounce {
- 0%,
- 20%,
- 53%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 40%,
- 43% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -30px, 0);
- transform: translate3d(0, -30px, 0);
- }
- 70% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -15px, 0);
- transform: translate3d(0, -15px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -4px, 0);
- transform: translate3d(0, -4px, 0);
- }
-}
-.bounce {
- -webkit-animation-name: bounce;
- animation-name: bounce;
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
-}
-@-webkit-keyframes flash {
- 0%,
- 50%,
- to {
- opacity: 1;
- }
- 25%,
- 75% {
- opacity: 0;
- }
-}
-@keyframes flash {
- 0%,
- 50%,
- to {
- opacity: 1;
- }
- 25%,
- 75% {
- opacity: 0;
- }
-}
-.flash {
- -webkit-animation-name: flash;
- animation-name: flash;
-}
-@-webkit-keyframes pulse {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 50% {
- -webkit-transform: scale3d(1.05, 1.05, 1.05);
- transform: scale3d(1.05, 1.05, 1.05);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes pulse {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 50% {
- -webkit-transform: scale3d(1.05, 1.05, 1.05);
- transform: scale3d(1.05, 1.05, 1.05);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.pulse {
- -webkit-animation-name: pulse;
- animation-name: pulse;
-}
-@-webkit-keyframes rubberBand {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes rubberBand {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.rubberBand {
- -webkit-animation-name: rubberBand;
- animation-name: rubberBand;
-}
-@-webkit-keyframes shake {
- 0%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 10%,
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 20%,
- 40%,
- 60%,
- 80% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
-}
-@keyframes shake {
- 0%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 10%,
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 20%,
- 40%,
- 60%,
- 80% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
-}
-.shake {
- -webkit-animation-name: shake;
- animation-name: shake;
-}
-@-webkit-keyframes headShake {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- 6.5% {
- -webkit-transform: translateX(-6px) rotateY(-9deg);
- transform: translateX(-6px) rotateY(-9deg);
- }
- 18.5% {
- -webkit-transform: translateX(5px) rotateY(7deg);
- transform: translateX(5px) rotateY(7deg);
- }
- 31.5% {
- -webkit-transform: translateX(-3px) rotateY(-5deg);
- transform: translateX(-3px) rotateY(-5deg);
- }
- 43.5% {
- -webkit-transform: translateX(2px) rotateY(3deg);
- transform: translateX(2px) rotateY(3deg);
- }
- 50% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-}
-@keyframes headShake {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- 6.5% {
- -webkit-transform: translateX(-6px) rotateY(-9deg);
- transform: translateX(-6px) rotateY(-9deg);
- }
- 18.5% {
- -webkit-transform: translateX(5px) rotateY(7deg);
- transform: translateX(5px) rotateY(7deg);
- }
- 31.5% {
- -webkit-transform: translateX(-3px) rotateY(-5deg);
- transform: translateX(-3px) rotateY(-5deg);
- }
- 43.5% {
- -webkit-transform: translateX(2px) rotateY(3deg);
- transform: translateX(2px) rotateY(3deg);
- }
- 50% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-}
-.headShake {
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- -webkit-animation-name: headShake;
- animation-name: headShake;
-}
-@-webkit-keyframes swing {
- 20% {
- -webkit-transform: rotate(15deg);
- transform: rotate(15deg);
- }
- 40% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 60% {
- -webkit-transform: rotate(5deg);
- transform: rotate(5deg);
- }
- 80% {
- -webkit-transform: rotate(-5deg);
- transform: rotate(-5deg);
- }
- to {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-@keyframes swing {
- 20% {
- -webkit-transform: rotate(15deg);
- transform: rotate(15deg);
- }
- 40% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 60% {
- -webkit-transform: rotate(5deg);
- transform: rotate(5deg);
- }
- 80% {
- -webkit-transform: rotate(-5deg);
- transform: rotate(-5deg);
- }
- to {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-.swing {
- -webkit-transform-origin: top center;
- transform-origin: top center;
- -webkit-animation-name: swing;
- animation-name: swing;
-}
-@-webkit-keyframes tada {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 10%,
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- }
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- }
- 40%,
- 60%,
- 80% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes tada {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 10%,
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- }
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- }
- 40%,
- 60%,
- 80% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.tada {
- -webkit-animation-name: tada;
- animation-name: tada;
-}
-@-webkit-keyframes wobble {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 15% {
- -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
- transform: translate3d(-25%, 0, 0) rotate(-5deg);
- }
- 30% {
- -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
- transform: translate3d(20%, 0, 0) rotate(3deg);
- }
- 45% {
- -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
- transform: translate3d(-15%, 0, 0) rotate(-3deg);
- }
- 60% {
- -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
- transform: translate3d(10%, 0, 0) rotate(2deg);
- }
- 75% {
- -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
- transform: translate3d(-5%, 0, 0) rotate(-1deg);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes wobble {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 15% {
- -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
- transform: translate3d(-25%, 0, 0) rotate(-5deg);
- }
- 30% {
- -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
- transform: translate3d(20%, 0, 0) rotate(3deg);
- }
- 45% {
- -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
- transform: translate3d(-15%, 0, 0) rotate(-3deg);
- }
- 60% {
- -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
- transform: translate3d(10%, 0, 0) rotate(2deg);
- }
- 75% {
- -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
- transform: translate3d(-5%, 0, 0) rotate(-1deg);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.wobble {
- -webkit-animation-name: wobble;
- animation-name: wobble;
-}
-@-webkit-keyframes jello {
- 0%,
- 11.1%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 22.2% {
- -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
- transform: skewX(-12.5deg) skewY(-12.5deg);
- }
- 33.3% {
- -webkit-transform: skewX(6.25deg) skewY(6.25deg);
- transform: skewX(6.25deg) skewY(6.25deg);
- }
- 44.4% {
- -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
- transform: skewX(-3.125deg) skewY(-3.125deg);
- }
- 55.5% {
- -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
- transform: skewX(1.5625deg) skewY(1.5625deg);
- }
- 66.6% {
- -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
- transform: skewX(-0.78125deg) skewY(-0.78125deg);
- }
- 77.7% {
- -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
- transform: skewX(0.390625deg) skewY(0.390625deg);
- }
- 88.8% {
- -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- }
-}
-@keyframes jello {
- 0%,
- 11.1%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 22.2% {
- -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
- transform: skewX(-12.5deg) skewY(-12.5deg);
- }
- 33.3% {
- -webkit-transform: skewX(6.25deg) skewY(6.25deg);
- transform: skewX(6.25deg) skewY(6.25deg);
- }
- 44.4% {
- -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
- transform: skewX(-3.125deg) skewY(-3.125deg);
- }
- 55.5% {
- -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
- transform: skewX(1.5625deg) skewY(1.5625deg);
- }
- 66.6% {
- -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
- transform: skewX(-0.78125deg) skewY(-0.78125deg);
- }
- 77.7% {
- -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
- transform: skewX(0.390625deg) skewY(0.390625deg);
- }
- 88.8% {
- -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- }
-}
-.jello {
- -webkit-animation-name: jello;
- animation-name: jello;
- -webkit-transform-origin: center;
- transform-origin: center;
-}
-@-webkit-keyframes bounceIn {
- 0%,
- 20%,
- 40%,
- 60%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 20% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- 40% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03);
- }
- 80% {
- -webkit-transform: scale3d(0.97, 0.97, 0.97);
- transform: scale3d(0.97, 0.97, 0.97);
- }
- to {
- opacity: 1;
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes bounceIn {
- 0%,
- 20%,
- 40%,
- 60%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 20% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- 40% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03);
- }
- 80% {
- -webkit-transform: scale3d(0.97, 0.97, 0.97);
- transform: scale3d(0.97, 0.97, 0.97);
- }
- to {
- opacity: 1;
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.bounceIn {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: bounceIn;
- animation-name: bounceIn;
-}
-@-webkit-keyframes bounceInDown {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -3000px, 0);
- transform: translate3d(0, -3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, 25px, 0);
- transform: translate3d(0, 25px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, 5px, 0);
- transform: translate3d(0, 5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInDown {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -3000px, 0);
- transform: translate3d(0, -3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, 25px, 0);
- transform: translate3d(0, 25px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, 5px, 0);
- transform: translate3d(0, 5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInDown {
- -webkit-animation-name: bounceInDown;
- animation-name: bounceInDown;
-}
-@-webkit-keyframes bounceInLeft {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-3000px, 0, 0);
- transform: translate3d(-3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(25px, 0, 0);
- transform: translate3d(25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(5px, 0, 0);
- transform: translate3d(5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInLeft {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-3000px, 0, 0);
- transform: translate3d(-3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(25px, 0, 0);
- transform: translate3d(25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(5px, 0, 0);
- transform: translate3d(5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInLeft {
- -webkit-animation-name: bounceInLeft;
- animation-name: bounceInLeft;
-}
-@-webkit-keyframes bounceInRight {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(3000px, 0, 0);
- transform: translate3d(3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(-25px, 0, 0);
- transform: translate3d(-25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(-5px, 0, 0);
- transform: translate3d(-5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInRight {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(3000px, 0, 0);
- transform: translate3d(3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(-25px, 0, 0);
- transform: translate3d(-25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(-5px, 0, 0);
- transform: translate3d(-5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInRight {
- -webkit-animation-name: bounceInRight;
- animation-name: bounceInRight;
-}
-@-webkit-keyframes bounceInUp {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 3000px, 0);
- transform: translate3d(0, 3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -5px, 0);
- transform: translate3d(0, -5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInUp {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 3000px, 0);
- transform: translate3d(0, 3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -5px, 0);
- transform: translate3d(0, -5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInUp {
- -webkit-animation-name: bounceInUp;
- animation-name: bounceInUp;
-}
-@-webkit-keyframes bounceOut {
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 50%,
- 55% {
- opacity: 1;
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
-}
-@keyframes bounceOut {
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 50%,
- 55% {
- opacity: 1;
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
-}
-.bounceOut {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: bounceOut;
- animation-name: bounceOut;
-}
-@-webkit-keyframes bounceOutDown {
- 20% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-@keyframes bounceOutDown {
- 20% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-.bounceOutDown {
- -webkit-animation-name: bounceOutDown;
- animation-name: bounceOutDown;
-}
-@-webkit-keyframes bounceOutLeft {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(20px, 0, 0);
- transform: translate3d(20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-@keyframes bounceOutLeft {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(20px, 0, 0);
- transform: translate3d(20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-.bounceOutLeft {
- -webkit-animation-name: bounceOutLeft;
- animation-name: bounceOutLeft;
-}
-@-webkit-keyframes bounceOutRight {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-@keyframes bounceOutRight {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-.bounceOutRight {
- -webkit-animation-name: bounceOutRight;
- animation-name: bounceOutRight;
-}
-@-webkit-keyframes bounceOutUp {
- 20% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, 20px, 0);
- transform: translate3d(0, 20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-@keyframes bounceOutUp {
- 20% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, 20px, 0);
- transform: translate3d(0, 20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-.bounceOutUp {
- -webkit-animation-name: bounceOutUp;
- animation-name: bounceOutUp;
-}
-@-webkit-keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-@keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-.fadeIn {
- -webkit-animation-name: fadeIn;
- animation-name: fadeIn;
-}
-@-webkit-keyframes fadeInDown {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInDown {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInDown {
- -webkit-animation-name: fadeInDown;
- animation-name: fadeInDown;
-}
-@-webkit-keyframes fadeInDownBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInDownBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInDownBig {
- -webkit-animation-name: fadeInDownBig;
- animation-name: fadeInDownBig;
-}
-@-webkit-keyframes fadeInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInLeft {
- -webkit-animation-name: fadeInLeft;
- animation-name: fadeInLeft;
-}
-@-webkit-keyframes fadeInLeftBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInLeftBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInLeftBig {
- -webkit-animation-name: fadeInLeftBig;
- animation-name: fadeInLeftBig;
-}
-@-webkit-keyframes fadeInRight {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInRight {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInRight {
- -webkit-animation-name: fadeInRight;
- animation-name: fadeInRight;
-}
-@-webkit-keyframes fadeInRightBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInRightBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInRightBig {
- -webkit-animation-name: fadeInRightBig;
- animation-name: fadeInRightBig;
-}
-@-webkit-keyframes fadeInUp {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInUp {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInUp {
- -webkit-animation-name: fadeInUp;
- animation-name: fadeInUp;
-}
-@-webkit-keyframes fadeInUpBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInUpBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInUpBig {
- -webkit-animation-name: fadeInUpBig;
- animation-name: fadeInUpBig;
-}
-@-webkit-keyframes fadeOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-@keyframes fadeOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-.fadeOut {
- -webkit-animation-name: fadeOut;
- animation-name: fadeOut;
-}
-@-webkit-keyframes fadeOutDown {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-@keyframes fadeOutDown {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-.fadeOutDown {
- -webkit-animation-name: fadeOutDown;
- animation-name: fadeOutDown;
-}
-@-webkit-keyframes fadeOutDownBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-@keyframes fadeOutDownBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-.fadeOutDownBig {
- -webkit-animation-name: fadeOutDownBig;
- animation-name: fadeOutDownBig;
-}
-@-webkit-keyframes fadeOutLeft {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-@keyframes fadeOutLeft {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-.fadeOutLeft {
- -webkit-animation-name: fadeOutLeft;
- animation-name: fadeOutLeft;
-}
-@-webkit-keyframes fadeOutLeftBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-@keyframes fadeOutLeftBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-.fadeOutLeftBig {
- -webkit-animation-name: fadeOutLeftBig;
- animation-name: fadeOutLeftBig;
-}
-@-webkit-keyframes fadeOutRight {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-@keyframes fadeOutRight {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-.fadeOutRight {
- -webkit-animation-name: fadeOutRight;
- animation-name: fadeOutRight;
-}
-@-webkit-keyframes fadeOutRightBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-@keyframes fadeOutRightBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-.fadeOutRightBig {
- -webkit-animation-name: fadeOutRightBig;
- animation-name: fadeOutRightBig;
-}
-@-webkit-keyframes fadeOutUp {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-@keyframes fadeOutUp {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-.fadeOutUp {
- -webkit-animation-name: fadeOutUp;
- animation-name: fadeOutUp;
-}
-@-webkit-keyframes fadeOutUpBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-@keyframes fadeOutUpBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-.fadeOutUpBig {
- -webkit-animation-name: fadeOutUpBig;
- animation-name: fadeOutUpBig;
-}
-@-webkit-keyframes flip {
- 0% {
- -webkit-transform: perspective(400px) rotateY(-1turn);
- transform: perspective(400px) rotateY(-1turn);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 40% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 50% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 80% {
- -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
-}
-@keyframes flip {
- 0% {
- -webkit-transform: perspective(400px) rotateY(-1turn);
- transform: perspective(400px) rotateY(-1turn);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 40% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 50% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 80% {
- -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
-}
-.animated.flip {
- -webkit-backface-visibility: visible;
- backface-visibility: visible;
- -webkit-animation-name: flip;
- animation-name: flip;
-}
-@-webkit-keyframes flipInX {
- 0% {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateX(10deg);
- transform: perspective(400px) rotateX(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateX(-5deg);
- transform: perspective(400px) rotateX(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-@keyframes flipInX {
- 0% {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateX(10deg);
- transform: perspective(400px) rotateX(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateX(-5deg);
- transform: perspective(400px) rotateX(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-.flipInX {
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipInX;
- animation-name: flipInX;
-}
-@-webkit-keyframes flipInY {
- 0% {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateY(-20deg);
- transform: perspective(400px) rotateY(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateY(10deg);
- transform: perspective(400px) rotateY(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateY(-5deg);
- transform: perspective(400px) rotateY(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-@keyframes flipInY {
- 0% {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateY(-20deg);
- transform: perspective(400px) rotateY(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateY(10deg);
- transform: perspective(400px) rotateY(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateY(-5deg);
- transform: perspective(400px) rotateY(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-.flipInY {
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipInY;
- animation-name: flipInY;
-}
-@-webkit-keyframes flipOutX {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- opacity: 0;
- }
-}
-@keyframes flipOutX {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- opacity: 0;
- }
-}
-.flipOutX {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: flipOutX;
- animation-name: flipOutX;
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
-}
-@-webkit-keyframes flipOutY {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateY(-15deg);
- transform: perspective(400px) rotateY(-15deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- opacity: 0;
- }
-}
-@keyframes flipOutY {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateY(-15deg);
- transform: perspective(400px) rotateY(-15deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- opacity: 0;
- }
-}
-.flipOutY {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipOutY;
- animation-name: flipOutY;
-}
-@-webkit-keyframes lightSpeedIn {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
- transform: translate3d(100%, 0, 0) skewX(-30deg);
- opacity: 0;
- }
- 60% {
- -webkit-transform: skewX(20deg);
- transform: skewX(20deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: skewX(-5deg);
- transform: skewX(-5deg);
- opacity: 1;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes lightSpeedIn {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
- transform: translate3d(100%, 0, 0) skewX(-30deg);
- opacity: 0;
- }
- 60% {
- -webkit-transform: skewX(20deg);
- transform: skewX(20deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: skewX(-5deg);
- transform: skewX(-5deg);
- opacity: 1;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.lightSpeedIn {
- -webkit-animation-name: lightSpeedIn;
- animation-name: lightSpeedIn;
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
-}
-@-webkit-keyframes lightSpeedOut {
- 0% {
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
- transform: translate3d(100%, 0, 0) skewX(30deg);
- opacity: 0;
- }
-}
-@keyframes lightSpeedOut {
- 0% {
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
- transform: translate3d(100%, 0, 0) skewX(30deg);
- opacity: 0;
- }
-}
-.lightSpeedOut {
- -webkit-animation-name: lightSpeedOut;
- animation-name: lightSpeedOut;
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
-}
-@-webkit-keyframes rotateIn {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(-200deg);
- transform: rotate(-200deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateIn {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(-200deg);
- transform: rotate(-200deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateIn {
- -webkit-animation-name: rotateIn;
- animation-name: rotateIn;
-}
-@-webkit-keyframes rotateInDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInDownLeft {
- -webkit-animation-name: rotateInDownLeft;
- animation-name: rotateInDownLeft;
-}
-@-webkit-keyframes rotateInDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInDownRight {
- -webkit-animation-name: rotateInDownRight;
- animation-name: rotateInDownRight;
-}
-@-webkit-keyframes rotateInUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInUpLeft {
- -webkit-animation-name: rotateInUpLeft;
- animation-name: rotateInUpLeft;
-}
-@-webkit-keyframes rotateInUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-90deg);
- transform: rotate(-90deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-90deg);
- transform: rotate(-90deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInUpRight {
- -webkit-animation-name: rotateInUpRight;
- animation-name: rotateInUpRight;
-}
-@-webkit-keyframes rotateOut {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(200deg);
- transform: rotate(200deg);
- opacity: 0;
- }
-}
-@keyframes rotateOut {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(200deg);
- transform: rotate(200deg);
- opacity: 0;
- }
-}
-.rotateOut {
- -webkit-animation-name: rotateOut;
- animation-name: rotateOut;
-}
-@-webkit-keyframes rotateOutDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
-}
-.rotateOutDownLeft {
- -webkit-animation-name: rotateOutDownLeft;
- animation-name: rotateOutDownLeft;
-}
-@-webkit-keyframes rotateOutDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-.rotateOutDownRight {
- -webkit-animation-name: rotateOutDownRight;
- animation-name: rotateOutDownRight;
-}
-@-webkit-keyframes rotateOutUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-.rotateOutUpLeft {
- -webkit-animation-name: rotateOutUpLeft;
- animation-name: rotateOutUpLeft;
-}
-@-webkit-keyframes rotateOutUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(90deg);
- transform: rotate(90deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(90deg);
- transform: rotate(90deg);
- opacity: 0;
- }
-}
-.rotateOutUpRight {
- -webkit-animation-name: rotateOutUpRight;
- animation-name: rotateOutUpRight;
-}
-@-webkit-keyframes hinge {
- 0% {
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 20%,
- 60% {
- -webkit-transform: rotate(80deg);
- transform: rotate(80deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 40%,
- 80% {
- -webkit-transform: rotate(60deg);
- transform: rotate(60deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(0, 700px, 0);
- transform: translate3d(0, 700px, 0);
- opacity: 0;
- }
-}
-@keyframes hinge {
- 0% {
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 20%,
- 60% {
- -webkit-transform: rotate(80deg);
- transform: rotate(80deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 40%,
- 80% {
- -webkit-transform: rotate(60deg);
- transform: rotate(60deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(0, 700px, 0);
- transform: translate3d(0, 700px, 0);
- opacity: 0;
- }
-}
-.hinge {
- -webkit-animation-duration: 2s;
- animation-duration: 2s;
- -webkit-animation-name: hinge;
- animation-name: hinge;
-}
-@-webkit-keyframes jackInTheBox {
- 0% {
- opacity: 0;
- -webkit-transform: scale(0.1) rotate(30deg);
- transform: scale(0.1) rotate(30deg);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- }
- 50% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 70% {
- -webkit-transform: rotate(3deg);
- transform: rotate(3deg);
- }
- to {
- opacity: 1;
- -webkit-transform: scale(1);
- transform: scale(1);
- }
-}
-@keyframes jackInTheBox {
- 0% {
- opacity: 0;
- -webkit-transform: scale(0.1) rotate(30deg);
- transform: scale(0.1) rotate(30deg);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- }
- 50% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 70% {
- -webkit-transform: rotate(3deg);
- transform: rotate(3deg);
- }
- to {
- opacity: 1;
- -webkit-transform: scale(1);
- transform: scale(1);
- }
-}
-.jackInTheBox {
- -webkit-animation-name: jackInTheBox;
- animation-name: jackInTheBox;
-}
-@-webkit-keyframes rollIn {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
- transform: translate3d(-100%, 0, 0) rotate(-120deg);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes rollIn {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
- transform: translate3d(-100%, 0, 0) rotate(-120deg);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.rollIn {
- -webkit-animation-name: rollIn;
- animation-name: rollIn;
-}
-@-webkit-keyframes rollOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
- transform: translate3d(100%, 0, 0) rotate(120deg);
- }
-}
-@keyframes rollOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
- transform: translate3d(100%, 0, 0) rotate(120deg);
- }
-}
-.rollOut {
- -webkit-animation-name: rollOut;
- animation-name: rollOut;
-}
-@-webkit-keyframes zoomIn {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 50% {
- opacity: 1;
- }
-}
-@keyframes zoomIn {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 50% {
- opacity: 1;
- }
-}
-.zoomIn {
- -webkit-animation-name: zoomIn;
- animation-name: zoomIn;
-}
-@-webkit-keyframes zoomInDown {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInDown {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInDown {
- -webkit-animation-name: zoomInDown;
- animation-name: zoomInDown;
-}
-@-webkit-keyframes zoomInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInLeft {
- -webkit-animation-name: zoomInLeft;
- animation-name: zoomInLeft;
-}
-@-webkit-keyframes zoomInRight {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInRight {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInRight {
- -webkit-animation-name: zoomInRight;
- animation-name: zoomInRight;
-}
-@-webkit-keyframes zoomInUp {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInUp {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInUp {
- -webkit-animation-name: zoomInUp;
- animation-name: zoomInUp;
-}
-@-webkit-keyframes zoomOut {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-@keyframes zoomOut {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-.zoomOut {
- -webkit-animation-name: zoomOut;
- animation-name: zoomOut;
-}
-@-webkit-keyframes zoomOutDown {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomOutDown {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomOutDown {
- -webkit-animation-name: zoomOutDown;
- animation-name: zoomOutDown;
-}
-@-webkit-keyframes zoomOutLeft {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
- transform: scale(0.1) translate3d(-2000px, 0, 0);
- -webkit-transform-origin: left center;
- transform-origin: left center;
- }
-}
-@keyframes zoomOutLeft {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
- transform: scale(0.1) translate3d(-2000px, 0, 0);
- -webkit-transform-origin: left center;
- transform-origin: left center;
- }
-}
-.zoomOutLeft {
- -webkit-animation-name: zoomOutLeft;
- animation-name: zoomOutLeft;
-}
-@-webkit-keyframes zoomOutRight {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
- transform: scale(0.1) translate3d(2000px, 0, 0);
- -webkit-transform-origin: right center;
- transform-origin: right center;
- }
-}
-@keyframes zoomOutRight {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
- transform: scale(0.1) translate3d(2000px, 0, 0);
- -webkit-transform-origin: right center;
- transform-origin: right center;
- }
-}
-.zoomOutRight {
- -webkit-animation-name: zoomOutRight;
- animation-name: zoomOutRight;
-}
-@-webkit-keyframes zoomOutUp {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomOutUp {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomOutUp {
- -webkit-animation-name: zoomOutUp;
- animation-name: zoomOutUp;
-}
-@-webkit-keyframes slideInDown {
- 0% {
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInDown {
- 0% {
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInDown {
- -webkit-animation-name: slideInDown;
- animation-name: slideInDown;
-}
-@-webkit-keyframes slideInLeft {
- 0% {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInLeft {
- 0% {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInLeft {
- -webkit-animation-name: slideInLeft;
- animation-name: slideInLeft;
-}
-@-webkit-keyframes slideInRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInRight {
- -webkit-animation-name: slideInRight;
- animation-name: slideInRight;
-}
-@-webkit-keyframes slideInUp {
- 0% {
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInUp {
- 0% {
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInUp {
- -webkit-animation-name: slideInUp;
- animation-name: slideInUp;
-}
-@-webkit-keyframes slideOutDown {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-@keyframes slideOutDown {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-.slideOutDown {
- -webkit-animation-name: slideOutDown;
- animation-name: slideOutDown;
-}
-@-webkit-keyframes slideOutLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-@keyframes slideOutLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-.slideOutLeft {
- -webkit-animation-name: slideOutLeft;
- animation-name: slideOutLeft;
-}
-@-webkit-keyframes slideOutRight {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-@keyframes slideOutRight {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-.slideOutRight {
- -webkit-animation-name: slideOutRight;
- animation-name: slideOutRight;
-}
-@-webkit-keyframes slideOutUp {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-@keyframes slideOutUp {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-.slideOutUp {
- -webkit-animation-name: slideOutUp;
- animation-name: slideOutUp;
-}
diff --git a/3rdparty/animate/animate.js b/3rdparty/animate/animate.js
deleted file mode 100755
index 89af9af8..00000000
--- a/3rdparty/animate/animate.js
+++ /dev/null
@@ -1,55 +0,0 @@
-$.fn.extend({
- animateCss: function (animationName, callback) {
- var animationEnd = (function (el) {
- var animations = {
- animation: "animationend",
- OAnimation: "oAnimationEnd",
- MozAnimation: "mozAnimationEnd",
- WebkitAnimation: "webkitAnimationEnd",
- };
-
- for (var t in animations) {
- if (el.style[t] !== undefined) {
- return animations[t];
- }
- }
- })(document.createElement("div"));
-
- this.addClass("animated " + animationName).one(animationEnd, function () {
- $(this).removeClass("animated " + animationName);
-
- if (typeof callback === "function") callback();
- });
-
- return this;
- },
-});
-
-/**
-$('#yourElement').animateCss('bounce');
-or;
-$('#yourElement').animateCss('bounce', function() {
- // Do somthing after animation
-});
-
-https://daneden.github.io/animate.css/
-bounce flash pulse rubberBand
-shake headShake swing tada
-wobble jello bounceIn bounceInDown
-bounceInLeft bounceInRight bounceInUp bounceOut
-bounceOutDown bounceOutLeft bounceOutRight bounceOutUp
-fadeIn fadeInDown fadeInDownBig fadeInLeft
-fadeInLeftBig fadeInRight fadeInRightBig fadeInUp
-fadeInUpBig fadeOut fadeOutDown fadeOutDownBig
-fadeOutLeft fadeOutLeftBig fadeOutRight fadeOutRightBig
-fadeOutUp fadeOutUpBig flipInX flipInY
-flipOutX flipOutY lightSpeedIn lightSpeedOut
-rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft
-rotateInUpRight rotateOut rotateOutDownLeft rotateOutDownRight
-rotateOutUpLeft rotateOutUpRight hinge jackInTheBox
-rollIn rollOut zoomIn zoomInDown
-zoomInLeft zoomInRight zoomInUp zoomOut
-zoomOutDown zoomOutLeft zoomOutRight zoomOutUp
-slideInDown slideInLeft slideInRight slideInUp
-slideOutDown slideOutLeft slideOutRight slideOutUp
-**/
diff --git a/3rdparty/css/animate/animate.css b/3rdparty/css/animate/animate.css
deleted file mode 100755
index 1b33ecb3..00000000
--- a/3rdparty/css/animate/animate.css
+++ /dev/null
@@ -1,2956 +0,0 @@
-@charset "UTF-8";
-
-/*!
- * animate.css -http://daneden.me/animate
- * Version - 3.6.0
- * Licensed under the MIT license - http://opensource.org/licenses/MIT
- *
- * Copyright (c) 2018 Daniel Eden
- */
-
-.animated {
- -webkit-animation-duration: 1s;
- animation-duration: 1s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
-}
-.animated.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
-}
-@-webkit-keyframes bounce {
- 0%,
- 20%,
- 53%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 40%,
- 43% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -30px, 0);
- transform: translate3d(0, -30px, 0);
- }
- 70% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -15px, 0);
- transform: translate3d(0, -15px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -4px, 0);
- transform: translate3d(0, -4px, 0);
- }
-}
-@keyframes bounce {
- 0%,
- 20%,
- 53%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 40%,
- 43% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -30px, 0);
- transform: translate3d(0, -30px, 0);
- }
- 70% {
- -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
- -webkit-transform: translate3d(0, -15px, 0);
- transform: translate3d(0, -15px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -4px, 0);
- transform: translate3d(0, -4px, 0);
- }
-}
-.bounce {
- -webkit-animation-name: bounce;
- animation-name: bounce;
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
-}
-@-webkit-keyframes flash {
- 0%,
- 50%,
- to {
- opacity: 1;
- }
- 25%,
- 75% {
- opacity: 0;
- }
-}
-@keyframes flash {
- 0%,
- 50%,
- to {
- opacity: 1;
- }
- 25%,
- 75% {
- opacity: 0;
- }
-}
-.flash {
- -webkit-animation-name: flash;
- animation-name: flash;
-}
-@-webkit-keyframes pulse {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 50% {
- -webkit-transform: scale3d(1.05, 1.05, 1.05);
- transform: scale3d(1.05, 1.05, 1.05);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes pulse {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 50% {
- -webkit-transform: scale3d(1.05, 1.05, 1.05);
- transform: scale3d(1.05, 1.05, 1.05);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.pulse {
- -webkit-animation-name: pulse;
- animation-name: pulse;
-}
-@-webkit-keyframes rubberBand {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes rubberBand {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.rubberBand {
- -webkit-animation-name: rubberBand;
- animation-name: rubberBand;
-}
-@-webkit-keyframes shake {
- 0%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 10%,
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 20%,
- 40%,
- 60%,
- 80% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
-}
-@keyframes shake {
- 0%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 10%,
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 20%,
- 40%,
- 60%,
- 80% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
-}
-.shake {
- -webkit-animation-name: shake;
- animation-name: shake;
-}
-@-webkit-keyframes headShake {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- 6.5% {
- -webkit-transform: translateX(-6px) rotateY(-9deg);
- transform: translateX(-6px) rotateY(-9deg);
- }
- 18.5% {
- -webkit-transform: translateX(5px) rotateY(7deg);
- transform: translateX(5px) rotateY(7deg);
- }
- 31.5% {
- -webkit-transform: translateX(-3px) rotateY(-5deg);
- transform: translateX(-3px) rotateY(-5deg);
- }
- 43.5% {
- -webkit-transform: translateX(2px) rotateY(3deg);
- transform: translateX(2px) rotateY(3deg);
- }
- 50% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-}
-@keyframes headShake {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- 6.5% {
- -webkit-transform: translateX(-6px) rotateY(-9deg);
- transform: translateX(-6px) rotateY(-9deg);
- }
- 18.5% {
- -webkit-transform: translateX(5px) rotateY(7deg);
- transform: translateX(5px) rotateY(7deg);
- }
- 31.5% {
- -webkit-transform: translateX(-3px) rotateY(-5deg);
- transform: translateX(-3px) rotateY(-5deg);
- }
- 43.5% {
- -webkit-transform: translateX(2px) rotateY(3deg);
- transform: translateX(2px) rotateY(3deg);
- }
- 50% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-}
-.headShake {
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- -webkit-animation-name: headShake;
- animation-name: headShake;
-}
-@-webkit-keyframes swing {
- 20% {
- -webkit-transform: rotate(15deg);
- transform: rotate(15deg);
- }
- 40% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 60% {
- -webkit-transform: rotate(5deg);
- transform: rotate(5deg);
- }
- 80% {
- -webkit-transform: rotate(-5deg);
- transform: rotate(-5deg);
- }
- to {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-@keyframes swing {
- 20% {
- -webkit-transform: rotate(15deg);
- transform: rotate(15deg);
- }
- 40% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 60% {
- -webkit-transform: rotate(5deg);
- transform: rotate(5deg);
- }
- 80% {
- -webkit-transform: rotate(-5deg);
- transform: rotate(-5deg);
- }
- to {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-.swing {
- -webkit-transform-origin: top center;
- transform-origin: top center;
- -webkit-animation-name: swing;
- animation-name: swing;
-}
-@-webkit-keyframes tada {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 10%,
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- }
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- }
- 40%,
- 60%,
- 80% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes tada {
- 0% {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
- 10%,
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- transform: scale3d(0.9, 0.9, 0.9) rotate(-3deg);
- }
- 30%,
- 50%,
- 70%,
- 90% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
- }
- 40%,
- 60%,
- 80% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
- }
- to {
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.tada {
- -webkit-animation-name: tada;
- animation-name: tada;
-}
-@-webkit-keyframes wobble {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 15% {
- -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
- transform: translate3d(-25%, 0, 0) rotate(-5deg);
- }
- 30% {
- -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
- transform: translate3d(20%, 0, 0) rotate(3deg);
- }
- 45% {
- -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
- transform: translate3d(-15%, 0, 0) rotate(-3deg);
- }
- 60% {
- -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
- transform: translate3d(10%, 0, 0) rotate(2deg);
- }
- 75% {
- -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
- transform: translate3d(-5%, 0, 0) rotate(-1deg);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes wobble {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 15% {
- -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
- transform: translate3d(-25%, 0, 0) rotate(-5deg);
- }
- 30% {
- -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
- transform: translate3d(20%, 0, 0) rotate(3deg);
- }
- 45% {
- -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
- transform: translate3d(-15%, 0, 0) rotate(-3deg);
- }
- 60% {
- -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
- transform: translate3d(10%, 0, 0) rotate(2deg);
- }
- 75% {
- -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
- transform: translate3d(-5%, 0, 0) rotate(-1deg);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.wobble {
- -webkit-animation-name: wobble;
- animation-name: wobble;
-}
-@-webkit-keyframes jello {
- 0%,
- 11.1%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 22.2% {
- -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
- transform: skewX(-12.5deg) skewY(-12.5deg);
- }
- 33.3% {
- -webkit-transform: skewX(6.25deg) skewY(6.25deg);
- transform: skewX(6.25deg) skewY(6.25deg);
- }
- 44.4% {
- -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
- transform: skewX(-3.125deg) skewY(-3.125deg);
- }
- 55.5% {
- -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
- transform: skewX(1.5625deg) skewY(1.5625deg);
- }
- 66.6% {
- -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
- transform: skewX(-0.78125deg) skewY(-0.78125deg);
- }
- 77.7% {
- -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
- transform: skewX(0.390625deg) skewY(0.390625deg);
- }
- 88.8% {
- -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- }
-}
-@keyframes jello {
- 0%,
- 11.1%,
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- 22.2% {
- -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
- transform: skewX(-12.5deg) skewY(-12.5deg);
- }
- 33.3% {
- -webkit-transform: skewX(6.25deg) skewY(6.25deg);
- transform: skewX(6.25deg) skewY(6.25deg);
- }
- 44.4% {
- -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
- transform: skewX(-3.125deg) skewY(-3.125deg);
- }
- 55.5% {
- -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
- transform: skewX(1.5625deg) skewY(1.5625deg);
- }
- 66.6% {
- -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
- transform: skewX(-0.78125deg) skewY(-0.78125deg);
- }
- 77.7% {
- -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
- transform: skewX(0.390625deg) skewY(0.390625deg);
- }
- 88.8% {
- -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
- }
-}
-.jello {
- -webkit-animation-name: jello;
- animation-name: jello;
- -webkit-transform-origin: center;
- transform-origin: center;
-}
-@-webkit-keyframes bounceIn {
- 0%,
- 20%,
- 40%,
- 60%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 20% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- 40% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03);
- }
- 80% {
- -webkit-transform: scale3d(0.97, 0.97, 0.97);
- transform: scale3d(0.97, 0.97, 0.97);
- }
- to {
- opacity: 1;
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-@keyframes bounceIn {
- 0%,
- 20%,
- 40%,
- 60%,
- 80%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 20% {
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- 40% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03);
- }
- 80% {
- -webkit-transform: scale3d(0.97, 0.97, 0.97);
- transform: scale3d(0.97, 0.97, 0.97);
- }
- to {
- opacity: 1;
- -webkit-transform: scaleX(1);
- transform: scaleX(1);
- }
-}
-.bounceIn {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: bounceIn;
- animation-name: bounceIn;
-}
-@-webkit-keyframes bounceInDown {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -3000px, 0);
- transform: translate3d(0, -3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, 25px, 0);
- transform: translate3d(0, 25px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, 5px, 0);
- transform: translate3d(0, 5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInDown {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -3000px, 0);
- transform: translate3d(0, -3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, 25px, 0);
- transform: translate3d(0, 25px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, 5px, 0);
- transform: translate3d(0, 5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInDown {
- -webkit-animation-name: bounceInDown;
- animation-name: bounceInDown;
-}
-@-webkit-keyframes bounceInLeft {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-3000px, 0, 0);
- transform: translate3d(-3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(25px, 0, 0);
- transform: translate3d(25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(5px, 0, 0);
- transform: translate3d(5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInLeft {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-3000px, 0, 0);
- transform: translate3d(-3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(25px, 0, 0);
- transform: translate3d(25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(-10px, 0, 0);
- transform: translate3d(-10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(5px, 0, 0);
- transform: translate3d(5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInLeft {
- -webkit-animation-name: bounceInLeft;
- animation-name: bounceInLeft;
-}
-@-webkit-keyframes bounceInRight {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(3000px, 0, 0);
- transform: translate3d(3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(-25px, 0, 0);
- transform: translate3d(-25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(-5px, 0, 0);
- transform: translate3d(-5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInRight {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(3000px, 0, 0);
- transform: translate3d(3000px, 0, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(-25px, 0, 0);
- transform: translate3d(-25px, 0, 0);
- }
- 75% {
- -webkit-transform: translate3d(10px, 0, 0);
- transform: translate3d(10px, 0, 0);
- }
- 90% {
- -webkit-transform: translate3d(-5px, 0, 0);
- transform: translate3d(-5px, 0, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInRight {
- -webkit-animation-name: bounceInRight;
- animation-name: bounceInRight;
-}
-@-webkit-keyframes bounceInUp {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 3000px, 0);
- transform: translate3d(0, 3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -5px, 0);
- transform: translate3d(0, -5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes bounceInUp {
- 0%,
- 60%,
- 75%,
- 90%,
- to {
- -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
- }
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 3000px, 0);
- transform: translate3d(0, 3000px, 0);
- }
- 60% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- 75% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 90% {
- -webkit-transform: translate3d(0, -5px, 0);
- transform: translate3d(0, -5px, 0);
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.bounceInUp {
- -webkit-animation-name: bounceInUp;
- animation-name: bounceInUp;
-}
-@-webkit-keyframes bounceOut {
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 50%,
- 55% {
- opacity: 1;
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
-}
-@keyframes bounceOut {
- 20% {
- -webkit-transform: scale3d(0.9, 0.9, 0.9);
- transform: scale3d(0.9, 0.9, 0.9);
- }
- 50%,
- 55% {
- opacity: 1;
- -webkit-transform: scale3d(1.1, 1.1, 1.1);
- transform: scale3d(1.1, 1.1, 1.1);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
-}
-.bounceOut {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: bounceOut;
- animation-name: bounceOut;
-}
-@-webkit-keyframes bounceOutDown {
- 20% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-@keyframes bounceOutDown {
- 20% {
- -webkit-transform: translate3d(0, 10px, 0);
- transform: translate3d(0, 10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-.bounceOutDown {
- -webkit-animation-name: bounceOutDown;
- animation-name: bounceOutDown;
-}
-@-webkit-keyframes bounceOutLeft {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(20px, 0, 0);
- transform: translate3d(20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-@keyframes bounceOutLeft {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(20px, 0, 0);
- transform: translate3d(20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-.bounceOutLeft {
- -webkit-animation-name: bounceOutLeft;
- animation-name: bounceOutLeft;
-}
-@-webkit-keyframes bounceOutRight {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-@keyframes bounceOutRight {
- 20% {
- opacity: 1;
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-.bounceOutRight {
- -webkit-animation-name: bounceOutRight;
- animation-name: bounceOutRight;
-}
-@-webkit-keyframes bounceOutUp {
- 20% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, 20px, 0);
- transform: translate3d(0, 20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-@keyframes bounceOutUp {
- 20% {
- -webkit-transform: translate3d(0, -10px, 0);
- transform: translate3d(0, -10px, 0);
- }
- 40%,
- 45% {
- opacity: 1;
- -webkit-transform: translate3d(0, 20px, 0);
- transform: translate3d(0, 20px, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-.bounceOutUp {
- -webkit-animation-name: bounceOutUp;
- animation-name: bounceOutUp;
-}
-@-webkit-keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-@keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-.fadeIn {
- -webkit-animation-name: fadeIn;
- animation-name: fadeIn;
-}
-@-webkit-keyframes fadeInDown {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInDown {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInDown {
- -webkit-animation-name: fadeInDown;
- animation-name: fadeInDown;
-}
-@-webkit-keyframes fadeInDownBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInDownBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInDownBig {
- -webkit-animation-name: fadeInDownBig;
- animation-name: fadeInDownBig;
-}
-@-webkit-keyframes fadeInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInLeft {
- -webkit-animation-name: fadeInLeft;
- animation-name: fadeInLeft;
-}
-@-webkit-keyframes fadeInLeftBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInLeftBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInLeftBig {
- -webkit-animation-name: fadeInLeftBig;
- animation-name: fadeInLeftBig;
-}
-@-webkit-keyframes fadeInRight {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInRight {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInRight {
- -webkit-animation-name: fadeInRight;
- animation-name: fadeInRight;
-}
-@-webkit-keyframes fadeInRightBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInRightBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInRightBig {
- -webkit-animation-name: fadeInRightBig;
- animation-name: fadeInRightBig;
-}
-@-webkit-keyframes fadeInUp {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInUp {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInUp {
- -webkit-animation-name: fadeInUp;
- animation-name: fadeInUp;
-}
-@-webkit-keyframes fadeInUpBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes fadeInUpBig {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.fadeInUpBig {
- -webkit-animation-name: fadeInUpBig;
- animation-name: fadeInUpBig;
-}
-@-webkit-keyframes fadeOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-@keyframes fadeOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-.fadeOut {
- -webkit-animation-name: fadeOut;
- animation-name: fadeOut;
-}
-@-webkit-keyframes fadeOutDown {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-@keyframes fadeOutDown {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-.fadeOutDown {
- -webkit-animation-name: fadeOutDown;
- animation-name: fadeOutDown;
-}
-@-webkit-keyframes fadeOutDownBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-@keyframes fadeOutDownBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, 2000px, 0);
- transform: translate3d(0, 2000px, 0);
- }
-}
-.fadeOutDownBig {
- -webkit-animation-name: fadeOutDownBig;
- animation-name: fadeOutDownBig;
-}
-@-webkit-keyframes fadeOutLeft {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-@keyframes fadeOutLeft {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-.fadeOutLeft {
- -webkit-animation-name: fadeOutLeft;
- animation-name: fadeOutLeft;
-}
-@-webkit-keyframes fadeOutLeftBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-@keyframes fadeOutLeftBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(-2000px, 0, 0);
- transform: translate3d(-2000px, 0, 0);
- }
-}
-.fadeOutLeftBig {
- -webkit-animation-name: fadeOutLeftBig;
- animation-name: fadeOutLeftBig;
-}
-@-webkit-keyframes fadeOutRight {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-@keyframes fadeOutRight {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-.fadeOutRight {
- -webkit-animation-name: fadeOutRight;
- animation-name: fadeOutRight;
-}
-@-webkit-keyframes fadeOutRightBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-@keyframes fadeOutRightBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(2000px, 0, 0);
- transform: translate3d(2000px, 0, 0);
- }
-}
-.fadeOutRightBig {
- -webkit-animation-name: fadeOutRightBig;
- animation-name: fadeOutRightBig;
-}
-@-webkit-keyframes fadeOutUp {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-@keyframes fadeOutUp {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-.fadeOutUp {
- -webkit-animation-name: fadeOutUp;
- animation-name: fadeOutUp;
-}
-@-webkit-keyframes fadeOutUpBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-@keyframes fadeOutUpBig {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(0, -2000px, 0);
- transform: translate3d(0, -2000px, 0);
- }
-}
-.fadeOutUpBig {
- -webkit-animation-name: fadeOutUpBig;
- animation-name: fadeOutUpBig;
-}
-@-webkit-keyframes flip {
- 0% {
- -webkit-transform: perspective(400px) rotateY(-1turn);
- transform: perspective(400px) rotateY(-1turn);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 40% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 50% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 80% {
- -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
-}
-@keyframes flip {
- 0% {
- -webkit-transform: perspective(400px) rotateY(-1turn);
- transform: perspective(400px) rotateY(-1turn);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 40% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- transform: perspective(400px) translateZ(150px) rotateY(-190deg);
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
- }
- 50% {
- -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- transform: perspective(400px) translateZ(150px) rotateY(-170deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 80% {
- -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- transform: perspective(400px) scale3d(0.95, 0.95, 0.95);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
-}
-.animated.flip {
- -webkit-backface-visibility: visible;
- backface-visibility: visible;
- -webkit-animation-name: flip;
- animation-name: flip;
-}
-@-webkit-keyframes flipInX {
- 0% {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateX(10deg);
- transform: perspective(400px) rotateX(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateX(-5deg);
- transform: perspective(400px) rotateX(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-@keyframes flipInX {
- 0% {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateX(10deg);
- transform: perspective(400px) rotateX(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateX(-5deg);
- transform: perspective(400px) rotateX(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-.flipInX {
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipInX;
- animation-name: flipInX;
-}
-@-webkit-keyframes flipInY {
- 0% {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateY(-20deg);
- transform: perspective(400px) rotateY(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateY(10deg);
- transform: perspective(400px) rotateY(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateY(-5deg);
- transform: perspective(400px) rotateY(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-@keyframes flipInY {
- 0% {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- opacity: 0;
- }
- 40% {
- -webkit-transform: perspective(400px) rotateY(-20deg);
- transform: perspective(400px) rotateY(-20deg);
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
- }
- 60% {
- -webkit-transform: perspective(400px) rotateY(10deg);
- transform: perspective(400px) rotateY(10deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: perspective(400px) rotateY(-5deg);
- transform: perspective(400px) rotateY(-5deg);
- }
- to {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
-}
-.flipInY {
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipInY;
- animation-name: flipInY;
-}
-@-webkit-keyframes flipOutX {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- opacity: 0;
- }
-}
-@keyframes flipOutX {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateX(-20deg);
- transform: perspective(400px) rotateX(-20deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateX(90deg);
- transform: perspective(400px) rotateX(90deg);
- opacity: 0;
- }
-}
-.flipOutX {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-animation-name: flipOutX;
- animation-name: flipOutX;
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
-}
-@-webkit-keyframes flipOutY {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateY(-15deg);
- transform: perspective(400px) rotateY(-15deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- opacity: 0;
- }
-}
-@keyframes flipOutY {
- 0% {
- -webkit-transform: perspective(400px);
- transform: perspective(400px);
- }
- 30% {
- -webkit-transform: perspective(400px) rotateY(-15deg);
- transform: perspective(400px) rotateY(-15deg);
- opacity: 1;
- }
- to {
- -webkit-transform: perspective(400px) rotateY(90deg);
- transform: perspective(400px) rotateY(90deg);
- opacity: 0;
- }
-}
-.flipOutY {
- -webkit-animation-duration: 0.75s;
- animation-duration: 0.75s;
- -webkit-backface-visibility: visible !important;
- backface-visibility: visible !important;
- -webkit-animation-name: flipOutY;
- animation-name: flipOutY;
-}
-@-webkit-keyframes lightSpeedIn {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
- transform: translate3d(100%, 0, 0) skewX(-30deg);
- opacity: 0;
- }
- 60% {
- -webkit-transform: skewX(20deg);
- transform: skewX(20deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: skewX(-5deg);
- transform: skewX(-5deg);
- opacity: 1;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes lightSpeedIn {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
- transform: translate3d(100%, 0, 0) skewX(-30deg);
- opacity: 0;
- }
- 60% {
- -webkit-transform: skewX(20deg);
- transform: skewX(20deg);
- opacity: 1;
- }
- 80% {
- -webkit-transform: skewX(-5deg);
- transform: skewX(-5deg);
- opacity: 1;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.lightSpeedIn {
- -webkit-animation-name: lightSpeedIn;
- animation-name: lightSpeedIn;
- -webkit-animation-timing-function: ease-out;
- animation-timing-function: ease-out;
-}
-@-webkit-keyframes lightSpeedOut {
- 0% {
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
- transform: translate3d(100%, 0, 0) skewX(30deg);
- opacity: 0;
- }
-}
-@keyframes lightSpeedOut {
- 0% {
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
- transform: translate3d(100%, 0, 0) skewX(30deg);
- opacity: 0;
- }
-}
-.lightSpeedOut {
- -webkit-animation-name: lightSpeedOut;
- animation-name: lightSpeedOut;
- -webkit-animation-timing-function: ease-in;
- animation-timing-function: ease-in;
-}
-@-webkit-keyframes rotateIn {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(-200deg);
- transform: rotate(-200deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateIn {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(-200deg);
- transform: rotate(-200deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateIn {
- -webkit-animation-name: rotateIn;
- animation-name: rotateIn;
-}
-@-webkit-keyframes rotateInDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInDownLeft {
- -webkit-animation-name: rotateInDownLeft;
- animation-name: rotateInDownLeft;
-}
-@-webkit-keyframes rotateInDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInDownRight {
- -webkit-animation-name: rotateInDownRight;
- animation-name: rotateInDownRight;
-}
-@-webkit-keyframes rotateInUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInUpLeft {
- -webkit-animation-name: rotateInUpLeft;
- animation-name: rotateInUpLeft;
-}
-@-webkit-keyframes rotateInUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-90deg);
- transform: rotate(-90deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-@keyframes rotateInUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-90deg);
- transform: rotate(-90deg);
- opacity: 0;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- opacity: 1;
- }
-}
-.rotateInUpRight {
- -webkit-animation-name: rotateInUpRight;
- animation-name: rotateInUpRight;
-}
-@-webkit-keyframes rotateOut {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(200deg);
- transform: rotate(200deg);
- opacity: 0;
- }
-}
-@keyframes rotateOut {
- 0% {
- -webkit-transform-origin: center;
- transform-origin: center;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: center;
- transform-origin: center;
- -webkit-transform: rotate(200deg);
- transform: rotate(200deg);
- opacity: 0;
- }
-}
-.rotateOut {
- -webkit-animation-name: rotateOut;
- animation-name: rotateOut;
-}
-@-webkit-keyframes rotateOutDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutDownLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- opacity: 0;
- }
-}
-.rotateOutDownLeft {
- -webkit-animation-name: rotateOutDownLeft;
- animation-name: rotateOutDownLeft;
-}
-@-webkit-keyframes rotateOutDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutDownRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-.rotateOutDownRight {
- -webkit-animation-name: rotateOutDownRight;
- animation-name: rotateOutDownRight;
-}
-@-webkit-keyframes rotateOutUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutUpLeft {
- 0% {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: left bottom;
- transform-origin: left bottom;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
- opacity: 0;
- }
-}
-.rotateOutUpLeft {
- -webkit-animation-name: rotateOutUpLeft;
- animation-name: rotateOutUpLeft;
-}
-@-webkit-keyframes rotateOutUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(90deg);
- transform: rotate(90deg);
- opacity: 0;
- }
-}
-@keyframes rotateOutUpRight {
- 0% {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- opacity: 1;
- }
- to {
- -webkit-transform-origin: right bottom;
- transform-origin: right bottom;
- -webkit-transform: rotate(90deg);
- transform: rotate(90deg);
- opacity: 0;
- }
-}
-.rotateOutUpRight {
- -webkit-animation-name: rotateOutUpRight;
- animation-name: rotateOutUpRight;
-}
-@-webkit-keyframes hinge {
- 0% {
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 20%,
- 60% {
- -webkit-transform: rotate(80deg);
- transform: rotate(80deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 40%,
- 80% {
- -webkit-transform: rotate(60deg);
- transform: rotate(60deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(0, 700px, 0);
- transform: translate3d(0, 700px, 0);
- opacity: 0;
- }
-}
-@keyframes hinge {
- 0% {
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 20%,
- 60% {
- -webkit-transform: rotate(80deg);
- transform: rotate(80deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- }
- 40%,
- 80% {
- -webkit-transform: rotate(60deg);
- transform: rotate(60deg);
- -webkit-transform-origin: top left;
- transform-origin: top left;
- -webkit-animation-timing-function: ease-in-out;
- animation-timing-function: ease-in-out;
- opacity: 1;
- }
- to {
- -webkit-transform: translate3d(0, 700px, 0);
- transform: translate3d(0, 700px, 0);
- opacity: 0;
- }
-}
-.hinge {
- -webkit-animation-duration: 2s;
- animation-duration: 2s;
- -webkit-animation-name: hinge;
- animation-name: hinge;
-}
-@-webkit-keyframes jackInTheBox {
- 0% {
- opacity: 0;
- -webkit-transform: scale(0.1) rotate(30deg);
- transform: scale(0.1) rotate(30deg);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- }
- 50% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 70% {
- -webkit-transform: rotate(3deg);
- transform: rotate(3deg);
- }
- to {
- opacity: 1;
- -webkit-transform: scale(1);
- transform: scale(1);
- }
-}
-@keyframes jackInTheBox {
- 0% {
- opacity: 0;
- -webkit-transform: scale(0.1) rotate(30deg);
- transform: scale(0.1) rotate(30deg);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- }
- 50% {
- -webkit-transform: rotate(-10deg);
- transform: rotate(-10deg);
- }
- 70% {
- -webkit-transform: rotate(3deg);
- transform: rotate(3deg);
- }
- to {
- opacity: 1;
- -webkit-transform: scale(1);
- transform: scale(1);
- }
-}
-.jackInTheBox {
- -webkit-animation-name: jackInTheBox;
- animation-name: jackInTheBox;
-}
-@-webkit-keyframes rollIn {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
- transform: translate3d(-100%, 0, 0) rotate(-120deg);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes rollIn {
- 0% {
- opacity: 0;
- -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
- transform: translate3d(-100%, 0, 0) rotate(-120deg);
- }
- to {
- opacity: 1;
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.rollIn {
- -webkit-animation-name: rollIn;
- animation-name: rollIn;
-}
-@-webkit-keyframes rollOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
- transform: translate3d(100%, 0, 0) rotate(120deg);
- }
-}
-@keyframes rollOut {
- 0% {
- opacity: 1;
- }
- to {
- opacity: 0;
- -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
- transform: translate3d(100%, 0, 0) rotate(120deg);
- }
-}
-.rollOut {
- -webkit-animation-name: rollOut;
- animation-name: rollOut;
-}
-@-webkit-keyframes zoomIn {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 50% {
- opacity: 1;
- }
-}
-@keyframes zoomIn {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- 50% {
- opacity: 1;
- }
-}
-.zoomIn {
- -webkit-animation-name: zoomIn;
- animation-name: zoomIn;
-}
-@-webkit-keyframes zoomInDown {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInDown {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInDown {
- -webkit-animation-name: zoomInDown;
- animation-name: zoomInDown;
-}
-@-webkit-keyframes zoomInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInLeft {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInLeft {
- -webkit-animation-name: zoomInLeft;
- animation-name: zoomInLeft;
-}
-@-webkit-keyframes zoomInRight {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInRight {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInRight {
- -webkit-animation-name: zoomInRight;
- animation-name: zoomInRight;
-}
-@-webkit-keyframes zoomInUp {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomInUp {
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomInUp {
- -webkit-animation-name: zoomInUp;
- animation-name: zoomInUp;
-}
-@-webkit-keyframes zoomOut {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-@keyframes zoomOut {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-.zoomOut {
- -webkit-animation-name: zoomOut;
- animation-name: zoomOut;
-}
-@-webkit-keyframes zoomOutDown {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomOutDown {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomOutDown {
- -webkit-animation-name: zoomOutDown;
- animation-name: zoomOutDown;
-}
-@-webkit-keyframes zoomOutLeft {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
- transform: scale(0.1) translate3d(-2000px, 0, 0);
- -webkit-transform-origin: left center;
- transform-origin: left center;
- }
-}
-@keyframes zoomOutLeft {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
- transform: scale(0.1) translate3d(-2000px, 0, 0);
- -webkit-transform-origin: left center;
- transform-origin: left center;
- }
-}
-.zoomOutLeft {
- -webkit-animation-name: zoomOutLeft;
- animation-name: zoomOutLeft;
-}
-@-webkit-keyframes zoomOutRight {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
- transform: scale(0.1) translate3d(2000px, 0, 0);
- -webkit-transform-origin: right center;
- transform-origin: right center;
- }
-}
-@keyframes zoomOutRight {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
- }
- to {
- opacity: 0;
- -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
- transform: scale(0.1) translate3d(2000px, 0, 0);
- -webkit-transform-origin: right center;
- transform-origin: right center;
- }
-}
-.zoomOutRight {
- -webkit-animation-name: zoomOutRight;
- animation-name: zoomOutRight;
-}
-@-webkit-keyframes zoomOutUp {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-@keyframes zoomOutUp {
- 40% {
- opacity: 1;
- -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
- -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
- }
- to {
- opacity: 0;
- -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
- -webkit-transform-origin: center bottom;
- transform-origin: center bottom;
- -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
- }
-}
-.zoomOutUp {
- -webkit-animation-name: zoomOutUp;
- animation-name: zoomOutUp;
-}
-@-webkit-keyframes slideInDown {
- 0% {
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInDown {
- 0% {
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInDown {
- -webkit-animation-name: slideInDown;
- animation-name: slideInDown;
-}
-@-webkit-keyframes slideInLeft {
- 0% {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInLeft {
- 0% {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInLeft {
- -webkit-animation-name: slideInLeft;
- animation-name: slideInLeft;
-}
-@-webkit-keyframes slideInRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInRight {
- -webkit-animation-name: slideInRight;
- animation-name: slideInRight;
-}
-@-webkit-keyframes slideInUp {
- 0% {
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-@keyframes slideInUp {
- 0% {
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
-}
-.slideInUp {
- -webkit-animation-name: slideInUp;
- animation-name: slideInUp;
-}
-@-webkit-keyframes slideOutDown {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-@keyframes slideOutDown {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0);
- }
-}
-.slideOutDown {
- -webkit-animation-name: slideOutDown;
- animation-name: slideOutDown;
-}
-@-webkit-keyframes slideOutLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-@keyframes slideOutLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-.slideOutLeft {
- -webkit-animation-name: slideOutLeft;
- animation-name: slideOutLeft;
-}
-@-webkit-keyframes slideOutRight {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-@keyframes slideOutRight {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-.slideOutRight {
- -webkit-animation-name: slideOutRight;
- animation-name: slideOutRight;
-}
-@-webkit-keyframes slideOutUp {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-@keyframes slideOutUp {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0);
- }
-}
-.slideOutUp {
- -webkit-animation-name: slideOutUp;
- animation-name: slideOutUp;
-}
diff --git a/3rdparty/js/animate/animate.js b/3rdparty/js/animate/animate.js
deleted file mode 100755
index 89af9af8..00000000
--- a/3rdparty/js/animate/animate.js
+++ /dev/null
@@ -1,55 +0,0 @@
-$.fn.extend({
- animateCss: function (animationName, callback) {
- var animationEnd = (function (el) {
- var animations = {
- animation: "animationend",
- OAnimation: "oAnimationEnd",
- MozAnimation: "mozAnimationEnd",
- WebkitAnimation: "webkitAnimationEnd",
- };
-
- for (var t in animations) {
- if (el.style[t] !== undefined) {
- return animations[t];
- }
- }
- })(document.createElement("div"));
-
- this.addClass("animated " + animationName).one(animationEnd, function () {
- $(this).removeClass("animated " + animationName);
-
- if (typeof callback === "function") callback();
- });
-
- return this;
- },
-});
-
-/**
-$('#yourElement').animateCss('bounce');
-or;
-$('#yourElement').animateCss('bounce', function() {
- // Do somthing after animation
-});
-
-https://daneden.github.io/animate.css/
-bounce flash pulse rubberBand
-shake headShake swing tada
-wobble jello bounceIn bounceInDown
-bounceInLeft bounceInRight bounceInUp bounceOut
-bounceOutDown bounceOutLeft bounceOutRight bounceOutUp
-fadeIn fadeInDown fadeInDownBig fadeInLeft
-fadeInLeftBig fadeInRight fadeInRightBig fadeInUp
-fadeInUpBig fadeOut fadeOutDown fadeOutDownBig
-fadeOutLeft fadeOutLeftBig fadeOutRight fadeOutRightBig
-fadeOutUp fadeOutUpBig flipInX flipInY
-flipOutX flipOutY lightSpeedIn lightSpeedOut
-rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft
-rotateInUpRight rotateOut rotateOutDownLeft rotateOutDownRight
-rotateOutUpLeft rotateOutUpRight hinge jackInTheBox
-rollIn rollOut zoomIn zoomInDown
-zoomInLeft zoomInRight zoomInUp zoomOut
-zoomOutDown zoomOutLeft zoomOutRight zoomOutUp
-slideInDown slideInLeft slideInRight slideInUp
-slideOutDown slideOutLeft slideOutRight slideOutUp
-**/
diff --git a/core/ajax/mobile.ajax.php b/core/ajax/mobile.ajax.php
index faec3c8d..535bbbfb 100755
--- a/core/ajax/mobile.ajax.php
+++ b/core/ajax/mobile.ajax.php
@@ -16,51 +16,21 @@
* along with Jeedom. If not, see
```
';
+ $res .= 'OS : ' . $distrib . ' on ' . $hw;
+ $res .= ' - PHP : ' . phpversion();
+ $res .= '
';
+ $res .= 'Etat Clé Api Core : ' . config::byKey('api::core::mode');
+ $res .= '
';
+ $res .= 'Etat Clé Api Mobile : ' . config::byKey('api::mobile::mode') . '
```';
+ $res .= '
';
+ $res .= '[details="Equipement(s)"]
';
+ $res .= '|Id | LogicalId | Type | App | defaultIdMobile | Profil | hideMenuGeoloc | hideMenuCustom|
';
+ $res .= '|--- | --- | --- | --- | --- | --- | --- | ---|
';
+ foreach (eqLogic::byType('mobile') as $mobile) {
+ $userId = $mobile->getConfiguration('affect_user');
+ $userType = user::byId($userId);
+ $profil = 'Inconnu';
+ if (is_object($userType)) {
+ $profil = $userType->getProfils();
+ }
+ $res .= '|' . $mobile->getId() . ' | ' . $mobile->getLogicalId() . ' | ' . $mobile->getConfiguration('type_mobile') . ' | v' . $mobile->getConfiguration('appVersion', 1) . ' | ' . $mobile->getConfiguration('defaultIdMobile', 'none') . ' | ' . $profil . ' | ' . $mobile->getConfiguration('hideMenuGeoloc', 0) . ' | ' . $mobile->getConfiguration('hideMenuCustom', 0) . '|
';
+ }
+ $res .= '[/details]';
+ return $res;
+ }
+
+ /**
+ * find eq based on iq
+ *
+ * @return string
+ */
public static function whoIsIq($iq)
{
$search = eqLogic::byLogicalId($iq, 'mobile');
if (is_object($search)) {
return $search->getName();
} else {
- return 'mobile non detecte';
+ return 'Mobile not detected';
}
}
+ /******************************************************/
+ /******************** APP V1 *************************/
+ /******************************************************/
+
public static function pluginToSend()
{
$return = [];
@@ -72,6 +154,7 @@ public static function pluginToSend()
public static function makeTemplateJson()
{
+ log::add(__CLASS__, 'debug', '┌──────────▶︎ makeTemplateJson ──────────────');
$pluginToSend = mobile::pluginToSend();
$discover_eqLogic = mobile::discovery_eqLogic($pluginToSend);
$sync_new = mobile::change_cmdAndeqLogic(mobile::discovery_cmd($pluginToSend, $discover_eqLogic), $discover_eqLogic);
@@ -97,11 +180,14 @@ public static function makeTemplateJson()
unlink(dirname(__FILE__) . '/../../data/mobile.json');
}
file_put_contents(dirname(__FILE__) . '/../../data/mobile.json', json_encode($data));
+ log::add(__CLASS__, 'debug', '| mobile.json > ' . json_encode($data));
$event_cmd = array();
foreach ($data['cmds'] as $cmd) {
$event_cmd[] = $cmd['id'];
}
cache::set('mobile::event', $event_cmd);
+ log::add(__CLASS__, 'debug', '| cache set mobile::event ─▶︎ ' . json_encode($event_cmd));
+ log::add(__CLASS__, 'debug', '└───────────────────────────────────────────');
}
public static function getTemplateJson()
@@ -130,7 +216,7 @@ public static function makeSaveJson($mobileID, $_data = array(), $type = 'dashbo
public static function getSaveJson($mobileID, $type = 'dashboard')
{
if (!file_exists(dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json')) {
- self::makeSaveJson($mobileID, array() , $type);
+ self::makeSaveJson($mobileID, array(), $type);
}
return json_decode(file_get_contents(dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json'), true);
}
@@ -334,12 +420,12 @@ public static function change_cmdAndeqLogic($_cmds, $_eqLogics)
$_cmds[$plage_cmd]['eqLogic_id'] = $new_eqLogic_id;
$keys = array_keys(array_column($_cmds, 'eqLogic_id'), $eqLogic_id);
foreach ($keys as $key) {
- if ($_cmds[$key]['value'] == $_cmds[$plage_cmd]['id'] && $_cmds[$key]['type'] == 'action') {
+ if (isset($_cmds[$key]['value']) && $_cmds[$key]['value'] == $_cmds[$plage_cmd]['id'] && $_cmds[$key]['type'] == 'action') {
$_cmds[$key]['eqLogic_id'] = $new_eqLogic_id;
}
}
$eqLogic_array[] = array($eqLogic_id, $new_eqLogic_id, $eqLogic_name);
- $i++;
+ //$i++;
}
$column_eqlogic = array_column($eqLogics, 'id');
foreach ($eqLogic_array as $eqlogic_array_one) {
@@ -510,76 +596,26 @@ public static function delete_object_eqlogic_null($objects, $eqLogics)
return $return;
}
- public function getQrCode()
- {
- require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php';
- $interne = network::getNetworkAccess('internal');
- $externe = network::getNetworkAccess('external');
- if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') {
- return 'internalError';
- }
- if ($externe == null || $externe == 'http://:80' || $externe == 'https://:80') {
- return 'externalError';
- }
- if ($this->getConfiguration('affect_user') == '') {
- return 'UserError';
- }
- $key = $this->getLogicalId();
- $request_qrcode = array(
- 'eqLogic_id' => $this->getId(),
- 'url_internal' => $interne,
- 'url_external' => $externe,
- 'Iq' => $key,
- );
- if ($this->getConfiguration('affect_user') != '') {
- $username = user::byId($this->getConfiguration('affect_user'));
- if (is_object($username)) {
- $request_qrcode['username'] = $username->getLogin();
- $request_qrcode['apikey'] = $username->getHash();
- }
- }
- ob_start();
- QRcode::png(json_encode($request_qrcode));
- $imageString = base64_encode(ob_get_contents());
- ob_end_clean();
- return $imageString;
- }
-
+ /************************************************************/
+ /******************** APP V1 && V2 *************************/
+ /************************************************************/
- public static function getQrCodeV2($userId)
+ /**
+ * get json for notification
+ * Call by class notification
+ * @return array
+ */
+ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif = [], $critical = false, $Iq = null, $specific = false, $silent = false)
{
- require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php';
- $interne = network::getNetworkAccess('internal');
- $externe = network::getNetworkAccess('external');
- if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') {
- return 'internalError';
- }
- if ($externe == null || $externe == 'http://:80' || $externe == 'https://:80') {
- return 'externalError';
- }
- if (!is_object(user::byId($userId))) {
- return 'UserError';
- }
- $request_qrcode = array(
- 'url_internal' => $interne,
- 'url_external' => $externe
- );
- if (is_object($user = user::byId($userId))) {
- $request_qrcode['username'] = $user->getLogin();
- $request_qrcode['apikey'] = $user->getHash();
- }
- ob_start();
- QRcode::png(json_encode($request_qrcode));
- $imageString = base64_encode(ob_get_contents());
- ob_end_clean();
- return $imageString;
- }
+ log::add('mobile', 'debug', '||┌──:fg-success: jsonPublish :/fg:──');
+ if ($silent) log::add('mobile', 'debug', '||| Silent notification');
+ if (isset($Iq)) log::add('mobile', 'debug', '||| IQ for jsonPublish ─▶︎ ' . $Iq);
-
- public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif = [], $critical = false)
- {
$dateNotif = date("Y-m-d H:i:s");
+ $newDate = date("Y-m-d");
+ $horaireFormat = date("H:i");
$badge = 0;
+ $defaultName = empty(config::byKey('name')) ? config::byKey('product_name') : config::byKey('name');
if ($timeout != 'nok') {
$timeout = date('Y-m-d H:i:s', strtotime("$dateNotif + $timeout SECONDS"));
}
@@ -601,78 +637,44 @@ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answ
} else if ($os == 'microsoft') {
}
} else {
- if ($os == 'android' && $version == 1) {
- $android = [
- 'notification' => [
- 'title' => $titre,
- 'body' => $message,
- 'channel_id' => 'default',
- 'color' => '#0000FF'
- ]
- ];
-
- $data = [
- 'title' => $titre,
- 'text' => $message,
- 'idNotif' => strval($idNotif),
- 'channelId' => 'default',
- 'date' => $dateNotif
-
- ];
-
- if ($photo != null) {
- $notification = [
- 'title' => $titre,
- 'body' => $message,
- 'image' => $photo
- ];
- } else {
- $notification = [
- 'title' => $titre,
- 'body' => $message
- ];
- }
-
- $publish = [
- 'token' => $token,
- 'notification' => $notification,
- 'android' => $android,
- 'data' => $data
- ];
- }
if ($version == 2) {
-
+ //App V2
if ($addAsk != '') {
$askParams = [
'choices' => $answer,
'idVariable' => $optionsNotif['askVariable'],
- 'boxName' => config::byKey('name'),
+ 'boxName' => $defaultName,
'hwKey' => jeedom::getHardwareKey(),
'timeout' => (strtotime($timeout) - time()) * 1000,
'isBack' => false
];
$askParams = json_encode($askParams);
} else {
-
$askParams = 'noAsk';
$optionsNotif['askVariable'] = 'rien';
}
$optionsNotif['askParams'] = $askParams;
- $channelId = "default";
+ $channelId = $specific ? "specificChannel" : "default";
if ($os == 'android' && $critical == true) {
$channelId = "critical";
}
-
+ $criticalString = ($critical == true) ? 'true' : 'false';
$customData = [
'title' => $titre,
'body' => $message,
'idNotif' => strval($idNotif),
'channelId' => $channelId,
'date' => $dateNotif,
- 'boxName' => config::byKey('name'),
- 'boxApiKey' => jeedom::getHardwareKey()
+ 'critical' => $criticalString,
+ 'boxName' => $defaultName,
+ 'boxApiKey' => jeedom::getHardwareKey(),
+ "askParams" => $askParams,
+ 'textToDisplay' => 'none',
+ 'newDate' => $newDate,
+ 'horaireFormat' => $horaireFormat,
+ 'silent' => $silent ? 'true' : 'false'
];
$notification = [
@@ -689,14 +691,16 @@ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answ
$apns = [
'headers' => [
- 'apns-priority' => '5',
+ 'apns-priority' => $silent ? '5' : '10',
'apns-collapse-id' => strval($idNotif),
- 'apns-push-type' => 'alert',
+ 'apns-push-type' => $silent ? 'background' : 'alert',
'apns-topic' => 'com.jeedom.jeedomobile'
],
'payload' => [
- 'aps' => [
+ 'aps' => array_merge([
'content-available' => true,
+ ], $silent ? [] : [
+ 'mutable-content' => 1,
'sound' => [
'name' => 'default',
'critical' => $critical
@@ -706,23 +710,20 @@ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answ
'title' => $titre,
'body' => $message
]
- ],
+ ]),
'notifee_options' => [
- 'ios' => [
- 'sound' => 'default',
+ 'ios' => array_merge([
'critical' => $critical,
'foregroundPresentationOptions' => [
- 'alert' => true,
- 'badge' => true,
- 'sound' => true
+ 'alert' => $silent ? false : true,
+ 'badge' => !$silent,
+ 'sound' => !$silent
]
- ]
+ ], $silent ? [] : ['sound' => 'default'])
]
]
-
];
-
if ($photo != null) {
$data['image'] = $photo;
$apns['payload']['notifee_options']['image'] = $photo;
@@ -737,7 +738,7 @@ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answ
if ($os == 'android') {
$publish = [
'token' => $token,
- 'android' => $android,
+ 'android' => $channelId == 'specificChannel' ? ['priority' => 'high'] : $android,
'data' => $data,
];
} else {
@@ -747,26 +748,109 @@ public static function jsonPublish($os, $titre, $message, $type, $idNotif, $answ
'apns' => $apns
];
}
+
+ $publishJson = [
+ 'token' => $token,
+ 'data' => $data,
+ ];
+
+ if (isset($Iq) && !$specific) {
+ // SAVE NOTIFS IN FILE
+ $pathNotificationData = '/../data/notifications';
+ if (!is_dir(dirname(__FILE__) . $pathNotificationData)) {
+ mkdir(dirname(__FILE__) . $pathNotificationData, 0775, true);
+ }
+ $filePath = dirname(__FILE__) . $pathNotificationData . '/' . $Iq . '.json';
+
+ if (!file_exists($filePath)) {
+ file_put_contents($filePath, '');
+ }
+ $notificationsContent = file_get_contents($filePath);
+ $notifications = json_decode($notificationsContent, true);
+
+ if ($notifications === null) {
+ $notifications = array();
+ }
+
+ foreach ($notifications as &$notification) {
+ if (isset($notification['data']['askParams'])) {
+ $askParams = json_decode($notification['data']['askParams'], true);
+ if ($askParams !== null && isset($askParams['timeout'])) {
+ $askParams['timeout'] = 0;
+ $notification['data']['askParams'] = json_encode($askParams);
+ }
+ }
+ }
+ $notifications[$idNotif] = $publishJson;
+ log::add('mobile', 'debug', '||| [INFO] Notification logged ─▶︎ ' . json_encode($notifications));
+ file_put_contents($filePath, json_encode($notifications));
+ }
+ } else {
+ // APP V1
+ if ($os == 'android' && $version == 1) {
+ $android = [
+ 'notification' => [
+ 'title' => $titre,
+ 'body' => $message,
+ 'channel_id' => 'default',
+ 'color' => '#0000FF'
+ ]
+ ];
+
+ $data = [
+ 'title' => $titre,
+ 'text' => $message,
+ 'idNotif' => strval($idNotif),
+ 'channelId' => 'default',
+ 'date' => $dateNotif
+ ];
+
+ if ($photo != null) {
+ $notification = [
+ 'title' => $titre,
+ 'body' => $message,
+ 'image' => $photo
+ ];
+ } else {
+ $notification = [
+ 'title' => $titre,
+ 'body' => $message
+ ];
+ }
+
+ $publish = [
+ 'token' => $token,
+ 'notification' => $notification,
+ 'android' => $android,
+ 'data' => $data
+ ];
+ }
}
}
- log::add('mobile', 'debug', 'JSON publish > : ' . json_encode($publish));
+ log::add('mobile', 'debug', '||| [INFO] JSON publish ─▶︎ ' . json_encode($publish));
+ log::add('mobile', 'debug', '||└─────────────────');
return $publish;
}
- public static function notification($arn, $os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version = 1, $optionsNotif = [], $critical = false)
+ /**
+ * send notification to app
+ * Call by class execute
+ * @return array
+ */
+ public static function notification($arn, $os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version = 1, $optionsNotif = [], $critical = false, $Iq = null, $specific = false, $silent = false)
{
- log::add('mobile', 'debug', 'notification en cours !');
- $publish = mobile::jsonPublish($os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif, $critical);
- log::add('mobile', 'debug', 'JSON publish > : ' . json_encode($publish));
+ log::add('mobile', 'debug', '|┌──:fg-success: notification :/fg:──');
+ //if ($version == 2) {
+ $publish = mobile::jsonPublish($os, $titre, $message, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif, $critical, $Iq, $specific, $silent);
if ($token != null) {
if ($token == 'notifsBGDisabled') {
- log::add('mobile', 'debug', 'NOTIFICATION NON ENVOYEE : SERVICES NOTIF DESACTIVE SUR VOTRE TELEPHONE : ');
- message::add(__CLASS__, 'Échec de l\'envoie de notification : le service est désactivé dans les paramètres du téléphone', 'notifsbgSend', 'alertNotifsSend');
+ log::add('mobile', 'debug', '|| [ERROR] NOTIFICATION NOT SENT ─▶︎ The notification service is disabled on the phone.');
+ message::add(__CLASS__, __('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . __('le service est désactivé dans les paramètres du téléphone', __FILE__), 'notifsbgSend', 'alertNotifsSend');
return;
}
if ($token == 'desactivate') {
- log::add('mobile', 'debug', 'NOTIFICATION NON ENVOYEE : VOUS AVEZ DESACTIVE LES NOTIFICATIONS SUR L\'APP : ');
- message::add(__CLASS__, 'Échec de l\'envoie de notification : le service est désactivé dans les paramètres de l\'application', 'notifsbgSend', 'alertNotifsSend');
+ log::add('mobile', 'debug', '|| [ERROR] NOTIFICATION NOT SENT ─▶︎ The notification service is disabled on the application.');
+ message::add(__CLASS__, __('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . __('le service est désactivé dans les paramètres de l\'application', __FILE__), 'notifsbgSend', 'alertNotifsSend');
return;
}
$url = config::byKey('service::cloud::url', 'core', 'https://cloud.jeedom.com') . '/service/fcm';
@@ -778,14 +862,13 @@ public static function notification($arn, $os, $titre, $message, $type, $idNotif
];
$post = ['message' => $publish, 'options' => $options];
- log::add('mobile', 'debug', 'JSON envoyé en mode FCM : ' . json_encode($post));
+ log::add('mobile', 'debug', '|| [INFO] JSON sent in FCM mode ─▶︎ ' . json_encode($post));
} elseif ($token == null && $version == 2) {
- log::add('mobile', 'debug', 'NOTIFICATION NON ENVOYEE : PAS DE TOKEN ENREGISTRE SUR VOTRE TELEPHONE : ');
- //message::removeAll(__CLASS__, 'noValidToken');
- message::add(__CLASS__, 'NOTIFICATION NON ENVOYÉE : PAS DE TOKEN ENREGISTRE SUR LE TÉLÉPHONE :', 'noValidTok', 'noValidToken');
+ log::add('mobile', 'debug', '|| [ERROR] NOTIFICATION NOT SENT ─▶︎ No token registered on the phone');
+ message::add(__CLASS__, __('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . __('pas de token enregistré sur le téléphone', __FILE__), 'noValidTok', 'noValidToken');
return;
} else {
- log::add('mobile', 'debug', 'JSON envoyé : APN' . $publish);
+ log::add('mobile', 'debug', '|| [INFO] JSON sent in APN mode ─▶︎ ' . $publish);
$post = [
'arn' => $arn,
'text' => $publish,
@@ -798,534 +881,896 @@ public static function notification($arn, $os, $titre, $message, $type, $idNotif
'Content-Type: application/json',
'Autorization: ' . sha512(strtolower(config::byKey('market::username')) . ':' . config::byKey('market::password'))
));
+ //$request_http->setLogError(true);
$request_http->setPost(json_encode($post));
- $result = json_decode($request_http->exec(3, 5), true);
+ $result = json_decode($request_http->exec(30, 3), true);
if (!isset($result['state']) || $result['state'] != 'ok') {
- throw new Exception(__('Echec de l\'envoi de la notification :', __FILE__) . json_encode($result));
+ log::add('mobile', 'debug', '|| [WARNING] First attempt to send notification failed.');
+ log::add('mobile', 'debug', '|| New attempt ....');
+ sleep(rand(1, 10));
+ $result = json_decode($request_http->exec(30, 3), true);
}
+ if (!isset($result['state']) || $result['state'] != 'ok') {
+ if (isset($result['error']) && strpos($result['error'], 'Quotas exceeded') !== false) {
+ log::add('mobile', 'error', __("Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.", __FILE__));
+ log::add('mobile', 'debug', __('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . json_encode($result));
+ } else {
+ throw new Exception(__('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . json_encode($result));
+ }
+ }
+ //} else {
+ //log::add('mobile', 'error', __('Echec de l\'envoi de la notification', __FILE__) . ' ─▶︎ ' . __('la version 1 de l\'app n\'est plus prise en charge', __FILE__));
+ //}
+ log::add('mobile', 'debug', '|└─────────────────────────────');
}
- public function SaveGeoloc($geoloc)
+ /*****************************************************/
+ /******************** APP V2 *************************/
+ /*****************************************************/
+
+ /**
+ * Get all notifications from Iq
+ * Call by ajax getNotificationsV2
+ * @return array
+ */
+ public static function getNotificationsV2($Iq)
{
- log::add('mobile', 'debug', '|-----------------------------------');
- log::add('mobile', 'debug', '|--debut de la fonction SaveGeoLoc--');
- log::add('mobile', 'debug', '|-----------------------------------');
- log::add('mobile', 'debug', '|');
- $eqLogicMobile = eqLogic::byLogicalId($geoloc['Iq'], 'mobile');
- log::add('mobile', 'debug', '| Iq = ' . $geoloc['Iq']);
- if (is_object($eqLogicMobile)) {
- log::add('mobile', 'debug', '| Mobile bien trouvé dans cette Jeedom');
- log::add('mobile', 'debug', '| Objet > ' . $eqLogicMobile->getId());
- $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoId_' . $geoloc['id']);
- if (!is_object($cmdgeoloc)) {
- $cmdgeoloc = new mobileCmd();
- $cmdgeoloc->setLogicalId('geoId_' . $geoloc['id']);
- $cmdgeoloc->setEqLogic_id($eqLogicMobile->getId());
- $cmdgeoloc->setType('info');
- $cmdgeoloc->setSubType('binary');
- $cmdgeoloc->setGeneric_type('PRESENCE');
- $cmdgeoloc->setIsVisible(1);
- }
- $cmdgeoloc->setName(__($geoloc['id'] . '-' . $geoloc['name'], __FILE__));
- $cmdgeoloc->setConfiguration('latitude', $geoloc['latitude']);
- $cmdgeoloc->setConfiguration('longitude', $geoloc['longitude']);
- $cmdgeoloc->setConfiguration('subtitle', $geoloc['subtitle']);
- $cmdgeoloc->setConfiguration('radius', $geoloc['radius']);
- $cmdgeoloc->save();
- $cmdgeoloc->event($geoloc['value']);
+ $return = __('Aucune notification.', __FILE__);
+ $filePath = dirname(__FILE__) . '/../data/notifications/' . $Iq . '.json';
+ if (file_exists($filePath)) {
+ $notifs = json_decode(file_get_contents($filePath), true);
+ if (is_array($notifs) && count($notifs) > 0) $return = json_encode(array_reverse($notifs));
}
+ return $return;
}
+ /**
+ * remove notification from Id into filepath id
+ * Call by ajax removeNotificationV2
+ */
+ public static function removeNotificationV2($_iq, $_id)
+ {
+ $pathNotificationData = '/../data/notifications';
+ $filePath = dirname(__FILE__) . $pathNotificationData . '/' . $_iq . '.json';
+ if (file_exists($filePath)) {
+ $notificationsContent = file_get_contents($filePath);
+ $notifications = json_decode($notificationsContent, true);
+ if ($notifications === null) {
+ throw new Exception(__('Fichier de notification vide.', __FILE__));
+ }
+ if (isset($notifications[$_id])) {
+ unset($notifications[$_id]);
+ file_put_contents($filePath, json_encode($notifications));
+ return count($notifications);
+ } else {
+ throw new Exception(__('Id notification inexistant', __FILE__) . ' ─▶︎ ' . $_id);
+ }
+ } else {
+ throw new Exception(__('Fichier de notifications inexistant', __FILE__) . ' ─▶︎ ' . $filePath);
+ }
+ }
+ /**
+ * Create and update cmd geoloc
+ * Call By api : setConfigs
+ */
public static function createCmdGeoLocV2($Iq, $geolocs)
{
- log::add('mobile', 'debug', '|-----------------------------------');
- log::add('mobile', 'debug', '|-GeoLocV2--');
+ log::add('mobile', 'debug', '|┌──:fg-success: createCmdGeoLocV2 :/fg:──');
$mobile = eqLogic::byLogicalId($Iq, 'mobile');
if (is_object($mobile)) {
- log::add('mobile', 'debug', '| Mobile existant');
- log::add('mobile', 'debug', '| GEOLOCS > ' . $geolocs);
-
- $noExistCmd = 0;
+ log::add('mobile', 'debug', '|| OK Mobile found ─▶︎ ' . $mobile->getName());
+ log::add('mobile', 'debug', '|| [INFO] GEOLOCS ─▶︎ ' . $geolocs);
+ $order = count($mobile->getCmd());
$decodedGeolocs = json_decode($geolocs, true);
foreach ($decodedGeolocs as $index => $geoloc) {
- log::add('mobile', 'debug', '| index > ' . $index . ' / ' . $geoloc['name']);
- $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($mobile->getId(), 'geoloc_' . $index);
- if (!is_object($cmdgeoloc)) {
- $noExistCmd = 1;
- $cmdgeoloc = new mobileCmd();
- $cmdgeoloc->setLogicalId('geoloc_' . $index);
- $cmdgeoloc->setEqLogic_id($mobile->getId());
- $cmdgeoloc->setType('info');
- $cmdgeoloc->setSubType('binary');
- $cmdgeoloc->setIsVisible(1);
- $cmdgeoloc->setGeneric_type('PRESENCE');
- $cmdgeoloc->setIsHistorized(1);
+ if (!isset($geoloc['name'])) continue;
+ $logicalId = 'geoloc_' . $index;
+ log::add('mobile', 'debug', '|| ' . $logicalId . ' ─▶︎ ' . $geoloc['name'] . ' ─▶︎ ' . $geoloc['value']);
+ $cmd = cmd::byEqLogicIdAndLogicalId($mobile->getId(), 'geoloc_' . $index);
+ if (!is_object($cmd)) {
+ if (!preg_match('/^geoloc_\d+$/', $logicalId)) {
+ foreach ($mobile->getCmd() as $existing) {
+ if (
+ preg_match('/^geoloc_\d+$/', $existing->getLogicalId())
+ && $existing->getName() === $geoloc['name']
+ ) {
+ log::add('mobile', 'debug', '|| ↳ Migrate UUID ─▶︎ renaming ' . $existing->getLogicalId() . ' to ' . $logicalId);
+ $existing->setLogicalId($logicalId);
+ $existing->save();
+ $cmd = $existing;
+ break;
+ }
+ }
+ }
}
- $cmdgeoloc->setName($geoloc['name']);
- $cmdgeoloc->setConfiguration('latitude', $geoloc['latitude']);
- $cmdgeoloc->setConfiguration('longitude', $geoloc['longitude']);
- $cmdgeoloc->setConfiguration('radius', $geoloc['radius']);
- $cmdgeoloc->save();
- if ($noExistCmd == 1) {
- $cmdgeoloc->event($geoloc['value']);
- log::add('mobile', 'debug', '| valeur enregistrée > ' . $geoloc['value']);
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId($logicalId);
+ $cmd->setEqLogic_id($mobile->getId());
+ $cmd->setIsVisible(1);
+ $cmd->setGeneric_type('PRESENCE');
+ $cmd->setTemplate('dashboard', 'core::presence');
+ $cmd->setTemplate('mobile', 'core::presence');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setIsHistorized(1);
+ $cmd->setOrder($order);
+ $order++;
+ log::add('mobile', 'debug', '|| ↳ Adding geofence point ─▶︎ ' . $geoloc['name']);
+ }
+ $cmd->setName($geoloc['name']);
+ $cmd->setType('info');
+ $cmd->setSubType('binary');
+ $cmd->setConfiguration('latitude', $geoloc['latitude']);
+ $cmd->setConfiguration('longitude', $geoloc['longitude']);
+ $cmd->setConfiguration('radius', $geoloc['radius']);
+ if ($cmd->getChanged() === true) $cmd->save();
+ if ($mobile->checkAndUpdateCmd($logicalId, $geoloc['value'])) {
+ log::add('mobile', 'debug', '|| ↳ Update geofence point ─▶︎ ' . $geoloc['value']);
}
- $noExistCmd = 0;
}
- log::add('mobile', 'debug', '|-----------------------------------');
} else {
- log::add('mobile', 'debug', 'Mobile inexistant');
+ log::add('mobile', 'debug', '| [WARNING] Mobile not detected !');
}
+ log::add('mobile', 'debug', '|└──────────────');
}
- public function delGeoloc($geoloc)
+ /**
+ * Get menu default whitout "tab"
+ * @return array
+ */
+ public static function getMenuDefaultV2($nbIcones = 3)
{
- log::add('mobile', 'debug', 'Geoloc lancement DEL du mobile > ' . $geoloc['Iq'] . ' pour ' . $geoloc['id']);
- $eqLogicMobile = eqLogic::byLogicalId($geoloc['Iq'], 'mobile');
- $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoId_' . $geoloc['id']);
- if (isset($cmdgeoloc)) {
- $cmdgeoloc->remove();
+ $namesMenus = ['home', 'overview', 'health', 'home', 'home', 'home', 'home', 'home'];
+ $renamesIcons = ['Accueil', 'Synthese', 'Santé', 'Accueil', 'Accueil', 'Accueil', 'Accueil', 'Accueil'];
+ $spanIcons = ['icon jeedomapp-in', 'fab fa-hubspot', 'fas fa-medkit', 'icon jeedomapp-in', 'icon jeedomapp-in', 'icon jeedomapp-in', 'icon jeedomapp-in', 'icon jeedomapp-in'];
+ $urlUsers = ['none', 'none', 'none', 'none', 'none', 'none', 'none', 'none'];
+ $j = 0;
+ $menuCustomArray = [];
+ for ($i = 1; $i <= $nbIcones; $i++) {
+ $menuCustomArray[$i]['selectNameMenu'] = $namesMenus[$j];
+ $menuCustomArray[$i]['renameIcon'] = $renamesIcons[$j];
+ $menuCustomArray[$i]['spanIcon'] = $spanIcons[$j];
+ $menuCustomArray[$i]['urlUser'] = $urlUsers[$j];
+ $j++;
}
+ return $menuCustomArray;
}
- public function EventGeoloc($geoloc)
+ /**
+ * Get menu default with "tab"
+ * @return array
+ */
+ public static function getMenuDefaultTab()
{
- log::add('mobile', 'debug', 'Geoloc Event du mobile > ' . $geoloc['Iq'] . ' pour ' . $geoloc['id']);
- $eqLogicMobile = eqLogic::byLogicalId($geoloc['Iq'], 'mobile');
- $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoId_' . $geoloc['id']);
- $cmdgeolocv2 = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoloc_' . $geoloc['id']);
- if (is_object($cmdgeoloc)) {
- log::add('mobile', 'debug', 'commande trouvé');
- if ($geoloc['value'] !== $cmdgeoloc->execCmd()) {
- log::add('mobile', 'debug', 'Valeur non pareille.');
- $cmdgeoloc->event($geoloc['value']);
- } else {
- log::add('mobile', 'debug', 'Valeur pareille. >' . $geoloc['value'] . ' / ' . $cmdgeoloc->execCmd());
- }
- }
- if (is_object($cmdgeolocv2)) {
- log::add('mobile', 'debug', 'commande trouvé');
- if ($geoloc['value'] !== $cmdgeolocv2->execCmd()) {
- log::add('mobile', 'debug', 'Valeur non pareille.');
- $cmdgeolocv2->event($geoloc['value']);
- } else {
- log::add('mobile', 'debug', 'Valeur pareille. >' . $geoloc['value'] . ' / ' . $cmdgeolocv2->execCmd());
+ $defaultMenuJson = '{"tab0":{"active":true,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"},
+ "tab1":{"active":true,"icon":{"name":"hubspot","type":"fa"},"name":"Synthese","options":{"uri":"\/index.php?v=m&p=overview"},"type":"WebviewApp"},
+ "tab2":{"active":true"icon":{"name":"medkit","type":"fa"},"name":"Sant\u00e9","options":{"uri":"\/index.php?v=m&p=health"},"type":"WebviewApp"},
+ "tab3":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}},
+ "tab4":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}},
+ "tab5":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}},
+ "tab6":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}},
+ "tab7":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}}';
+ return json_encode($defaultMenuJson);
+ }
+
+ /**
+ * menu assignment
+ * Call by ajax menuDefault for modal.menuCustom
+ */
+ public static function handleMenuDefaultBySelect($eqId, $eqDefault)
+ {
+ if (!is_object($mobile = eqLogic::byId($eqId, 'mobile'))) return;
+ log::add('mobile', 'debug', '┌──:fg-success: handleMenuDefaultBySelect( ' . $eqId . ', ' . $eqDefault . ') :/fg:──');
+ // ATTRIBUTION D'UN MENU AU MOBILE
+ if ($eqDefault == 'default') { //reset menuCustom
+ log::add('mobile', 'debug', '| source menu ─▶︎ default');
+ $menuCustomArray = mobile::getMenuDefaultV2();
+ $mobile->setConfiguration('menuCustomArray', $menuCustomArray);
+ $mobile->setConfiguration('nbIcones', 3);
+ $mobile->setConfiguration('defaultIdMobile', 'default');
+ $mobile->save();
+ } else if (is_object($mobileDefault = eqLogic::byId($eqDefault, 'mobile'))) {
+ // ATTRIBUTION DU MENU DUN AUTRE MOBILE
+ log::add('mobile', 'debug', '| source menu ─▶︎ ' . $mobileDefault->getHumanName());
+ $mobile->setConfiguration('defaultIdMobile', $eqDefault);
+ if ($mobile->getId() == $mobileDefault->getId()) {
+ log::add('mobile', 'debug', '| same source and target');
}
+ $nbIcones = $mobileDefault->getConfiguration('nbIcones', 3);
+ $menuCustomArray = $mobileDefault->getConfiguration('menuCustomArray');
+ $mobile->setConfiguration('nbIcones', $nbIcones);
+ $mobile->setConfiguration('menuCustomArray', $menuCustomArray);
+ $mobile->save();
}
+ log::add('mobile', 'debug', '└───────────────────────────────────────────');
}
- public function postInsert()
+ /**
+ * Call by configMenuCustom()
+ * @return array
+ */
+ public static function generateTabIcon($menuCustomArray, $i)
{
- if ($this->getLogicalId() == '') {
- $key = config::genKey(32);
- $this->setLogicalId($key);
- $this->save();
+ $result = array();
+ $tabIconName = isset($menuCustomArray[$i]['spanIcon']) ? $menuCustomArray[$i]['spanIcon'] : 'none';
+
+ if ($tabIconName != 'none') {
+ $arrayIcon = explode(' ', $tabIconName);
+ $tabIconName = substr(strstr($arrayIcon[1], '-'), 1);
+ $tabLibName = strstr($arrayIcon[1], '-', true);
+ if ($tabLibName == 'mdi') $tabLibName = 'Mdi';
+ } else {
+ $tabIconName = 'in';
+ $tabLibName = 'jeedomapp';
}
+
+ $tabRenameInput = (isset($menuCustomArray[$i]['renameIcon']) && $menuCustomArray[$i]['renameIcon'] != 'none') ? $menuCustomArray[$i]['renameIcon'] : 'Accueil';
+ $result['tabIconName'] = $tabIconName;
+ $result['tabLibName'] = $tabLibName;
+ $result['tabRenameInput'] = $tabRenameInput;
+
+ return $result;
}
- public static function deleteFileImg()
+ /**
+ * Call by configMenuCustom()
+ * @return array
+ */
+ public static function generateTypeObject($pluginPanelMobile, $menuCustomArray)
{
- $directory = dirname(__FILE__) . '/../../data/images'; // Chemin vers le répertoire contenant les fichiers
- // Récupérer la liste des fichiers dans le répertoire
- $files = glob($directory . '/*');
- // Date actuelle
- $currentDate = time();
- // Parcourir tous les fichiers
- foreach ($files as $file) {
- // Vérifier la date de modification du fichier
- $modifiedDate = filemtime($file);
- $differenceInDays = floor(($currentDate - $modifiedDate) / (60 * 60 * 24));
- // Vérifier si le fichier a plus de 30 jours
- if ($differenceInDays > 30) {
- // Supprimer le fichier
- unlink($file);
+ $webviewUrl = 'd';
+ $objectId = isset($menuCustomArray['selectNameMenu']) ? $menuCustomArray['selectNameMenu'] : '';
+ $result = array();
+ if ($objectId && $objectId != -1 && $objectId != 'none' && $objectId != 'url') {
+ // SPECIFIC OBJETS FOR URL
+ $excludedRefs = array('overview', 'health', 'home', 'timeline');
+ if (!in_array($objectId, $excludedRefs)) {
+ $arrayObjects = explode('_', $objectId);
+ $objectId = $arrayObjects[0];
+ $typeObject = $arrayObjects[1];
+ $typewebviewurl = $webviewUrl;
+ $typeobjectId = $objectId;
+
+ switch ($typeObject) {
+ case 'views':
+ $tabUrl = "/index.php?v={$webviewUrl}&p=view&view_id={$objectId}";
+ break;
+ case 'dashboard':
+ $tabUrl = "/index.php?v={$webviewUrl}&p=dashboard&object_id={$objectId}";
+ break;
+ case 'plan':
+ $tabUrl = "/index.php?v={$webviewUrl}&p=plan&fullscreen=1&plan_id={$objectId}";
+ break;
+ case 'panel':
+ $tabUrl = (isset($pluginPanelMobile[$objectId]) && $pluginPanelMobile[$objectId] == $objectId) ? "/index.php?v=m&p={$objectId}" : "/index.php?v=m&p={$objectId}&app_mode=1";
+ break;
+ default:
+ break;
+ }
+ } else {
+ $typeObject = $objectId;
+ $typewebviewurl = $webviewUrl;
+ $typeobjectId = '';
+
+ switch ($objectId) {
+ case 'overview':
+ $tabUrl = "/index.php?v=m&p=overview";
+ break;
+ case 'home':
+ $tabUrl = "/index.php?v=m&p=home";
+ break;
+ case 'health':
+ $tabUrl = "/index.php?v=m&p=health";
+ break;
+ case 'timeline':
+ $tabUrl = "/index.php?v=m&p=timeline";
+ break;
+ default:
+ $typeObject = $objectId;
+ $typewebviewurl = 'm';
+ $typeobjectId = '';
+ $tabUrl = '/index.php?v=m&app_mode=1';
+ break;
+ }
}
+ } elseif ($objectId == 'url') {
+ $typeObject = $objectId;
+ $typewebviewurl = $webviewUrl;
+ $typeobjectId = 'url';
+ $tabUrl = $menuCustomArray['urlUser'];
+ } else {
+ $typeObject = $objectId;
+ $typewebviewurl = 'm';
+ $typeobjectId = '';
+ $tabUrl = '/index.php?v=m&app_mode=1';
}
- }
+ $result['typeObject'] = $typeObject;
+ $result['typewebviewurl'] = $typewebviewurl;
+ $result['typeobjectId'] = $typeobjectId;
+ $result['tabUrl'] = $tabUrl;
+
+ return $result;
+ }
- public static function handleDefaultMenu($mobileActiveDefault){
-
- $mobileActive = eqLogic::byId(intval($mobileActiveDefault));
- if (is_object($mobileActive)) {
- $eqlogics = eqLogic::byType('mobile');
- $nbIcons = $mobileActive->getConfiguration('nbIcones', 4);
- $menuCustomArray = $mobileActive->getConfiguration('menuCustomArray');
- foreach ($eqlogics as $eqlogic) {
- $menuArrayTemp = [];
- for ($i = 1; $i < 5; $i++) {
- $menuArrayTemp[$i]['selectNameMenu'] = $menuCustomArray[$i]['selectNameMenu'];
- $menuArrayTemp[$i]['renameIcon'] = $menuCustomArray[$i]['renameIcon'];
- $menuArrayTemp[$i]['spanIcon'] = $menuCustomArray[$i]['spanIcon'];
- $menuArrayTemp[$i]['urlUser'] = $menuCustomArray[$i]['urlUser'];
+ /**
+ * Create and update cmd
+ * Call by Api : nfc && qrcodemethod
+ */
+ public static function cmdForApi($Iq, $logicalId, $value, $name = "", $subtype = "string", $_visible = 0)
+ {
+ $mobile = eqLogic::byLogicalId($Iq, 'mobile');
+ if (is_object($mobile)) {
+ $order = count($mobile->getCmd());
+ $cmd = $mobile->getCmd(null, $logicalId);
+ if (!is_object($cmd)) {
+ if ($name == "") {
+ $name = $logicalId;
+ }
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId($logicalId);
+ $cmd->setName($name);
+ $cmd->setOrder($order);
+ $cmd->setDisplay('icon', '');
+ $cmd->setIsVisible($_visible);
+ if (in_array($logicalId, array('barrecodemethod', 'nfcPayload', 'nfcId'))) {
+ $cmd->setConfiguration('repeatEventManagement', 'always');
}
- $eqlogic->setConfiguration('menuCustomArray', $menuArrayTemp);
- $eqlogic->setConfiguration('nbIcones', $nbIcons);
- $eqlogic->save();
}
+ $cmd->setEqLogic_id($mobile->getId());
+ $cmd->setType('info');
+ $cmd->setSubType($subtype);
+ if ($cmd->getChanged() === true) $cmd->save();
+ $mobile->checkAndUpdateCmd($logicalId, $value);
}
}
+ /* * *********************Méthodes d'instance************************* */
- public static function handleMenuDefaultBySelect($eqId, $eqDefault){
-
- if(!is_object($mobileDefault = eqLogic::byId($eqDefault, 'mobile'))) return;
- if(!is_object($mobile = eqLogic::byId($eqId, 'mobile'))) return;
- $namesMenus = ['home', 'overview', 'health', 'home'];
- $renamesIcons = ['Accueil', 'Synthese', 'Santé', 'Accueil'];
- $spanIcons = ['icon jeedomapp-in', 'fab fa-hubspot', 'fas fa-medkit', 'icon jeedomapp-in'];
- $urlUsers = ['none', 'none', 'none', 'none'];
-
- // ATTRIBUTION DUN MENU PAR DEFAULT AU MOBILE
- if ($eqDefault == 'default') {
- $j = 0;
- $menuCustomArray = [];
- for ($i = 1; $i < 5; $i++) {
- $menuCustomArray[$i]['selectNameMenu'] = $namesMenus[$j];
- $menuCustomArray[$i]['renameIcon'] = $renamesIcons[$j];
- $menuCustomArray[$i]['spanIcon'] = $spanIcons[$j];
- $menuCustomArray[$i]['urlUser'] = $urlUsers[$j];
- $j++;
- }
+ /**
+ * Call by Api : getJson && getCustomMenu
+ *
+ * @return array
+ */
+ public function configMenuCustom()
+ {
+ log::add('mobile', 'debug', '|┌──:fg-success: configMenuCustom (' . jeedom::version() . ') :/fg:──');
+ $menuCustomArray = mobile::getMenuDefaultV2();
+ $pluginPanelMobile = config::byKey('pluginPanelMobile', 'mobile');
+ $defaultIdMobile = $this->getConfiguration('defaultIdMobile');
+
+ if ($defaultIdMobile == 'default') {
+ log::add('mobile', 'debug', '|| [WARNING] Send default menu');
+ $this->setConfiguration('menuCustomArray', $menuCustomArray);
+ $this->save();
+ } else if (is_object($eqDefault = eqLogic::byId($defaultIdMobile)) && $this->getId() != $defaultIdMobile) {
+ log::add('mobile', 'debug', '|| [WARNING] source menu ─▶︎ ' . $eqDefault->getHumanName());
+ $menuCustomArray = $eqDefault->getConfiguration('menuCustomArray');
+ $this->setConfiguration('menuCustomArray', $menuCustomArray);
+ $this->save();
+ } else {
+ log::add('mobile', 'debug', '|| [INFO] source menu ─▶︎ ' . $this->getHumanName());
+ $menuCustomArray = $this->getConfiguration('menuCustomArray');
+ }
+ if (empty($menuCustomArray)) {
+ $menuCustomArray = mobile::getMenuDefaultV2();
+ }
+ $nbIcones = count($menuCustomArray);
+ // ATTRIBUTION MOBILE PAR DEFAUT A TOUS LES MOBILES
+ $eqLogics = eqLogic::byType('mobile');
+ foreach ($eqLogics as $mobile) {
+ if ($mobile->getConfiguration('defaultIdMobile') == $this->getId()) {
$mobile->setConfiguration('menuCustomArray', $menuCustomArray);
- $mobile->setConfiguration('nbIcones', 3);
- $mobile->setConfiguration('defaultIdMobile', 'default');
+ $mobile->setConfiguration('nbIcones', $nbIcones);
$mobile->save();
- return;
+ };
}
- // ATTRIBUTION DU MENU PAR DEFAULT DU MOBILE DEFAULT AU MOBILE
- $mobile->setConfiguration('defaultIdMobile', $eqDefault);
- $nbIcones = $mobileDefault->getConfiguration('nbIcones', 3);
- $selectNameMenu = $renameIcon = $spanIcon = $urlUser = $menuTemp = [];
- $menuCustomArray = $mobileDefault->getConfiguration('menuCustomArray');
- $j = 0;
- for ($i = 1; $i < $nbIcones + 1; $i++) {
- $menuTemp[$i]['selectNameMenu'] = isset($menuCustomArray[$i]['selectNameMenu']) ? $menuCustomArray[$i]['selectNameMenu'] : $namesMenus[$j];
- $menuTemp[$i]['renameIcon'] = isset($menuCustomArray[$i]['renameIcon']) ? $menuCustomArray[$i]['renameIcon'] : $renamesIcons[$j];
- $menuTemp[$i]['spanIcon'] = isset($menuCustomArray[$i]['spanIcon']) ? $menuCustomArray[$i]['spanIcon'] : $spanIcons[$j];
- $menuTemp[$i]['urlUser'] = isset($menuCustomArray[$i]['urlUser']) ? $menuCustomArray[$i]['urlUser'] : $urlUsers[$j];
- $j++;
+ $arrayElements = array();
+ $j = 0;
+ $count = 1;
+ for ($i = 1; $i < 9; $i++) {
+
+ // GENERATE TAB ICON LIBRARY AND RENAME BY USER
+ $resultTabIcon = self::generateTabIcon($menuCustomArray, $i);
+ $tabIconName = $resultTabIcon['tabIconName'];
+ $tabLibName = $resultTabIcon['tabLibName'];
+ $tabRenameInput = $resultTabIcon['tabRenameInput'];
+ $isActive = true;
+ // GENERATE URLS FOR MENU CUSTOM
+ $result = self::generateTypeObject($pluginPanelMobile, isset($menuCustomArray[$i]) ? $menuCustomArray[$i] : '');
+ $typeObject = $result['typeObject'];
+ $typewebviewurl = $result['typewebviewurl'];
+ $typeobjectId = $result['typeobjectId'];
+ $tabUrl = $result['tabUrl'];
+
+ if ($count > intval($nbIcones)) {
+ $isActive = false;
}
- $mobile->setConfiguration('nbIcones', $nbIcones);
- $mobile->setConfiguration('menuCustomArray', $menuTemp);
- $mobile->save();
+
+ $jsonTemplate = array(
+ 'active' => $isActive,
+ 'icon' => [
+ 'name' => $tabIconName,
+ 'type' => $tabLibName
+ ],
+ 'name' => $tabRenameInput,
+ 'options' => [
+ 'uri' => $tabUrl,
+ 'objectType' => $typeObject,
+ 'mobile' => $typewebviewurl,
+ 'objectId' => $typeobjectId
+ ],
+ 'type' => strpos($tabUrl, 'www') !== false ? 'urlwww' : 'WebviewApp'
+ );
+ $arrayElements['tab' . $j] = $jsonTemplate;
+ $j++;
+ $count++;
+ }
+ log::add('mobile', 'debug', '|| [INFO] arrayElements ─▶︎ ' . json_encode($arrayElements));
+ log::add('mobile', 'debug', '|└────────────────────');
+ return $arrayElements;
}
+ /**
+ * get QrCode base64 for a user
+ * use lib phpqrcode
+ * Call by ajax getQrCode for printEqLogic
+ * @return string
+ */
+ public function getQrCode()
+ {
+ require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php';
+ $interne = network::getNetworkAccess('internal');
+ $externe = network::getNetworkAccess('external');
+ if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') {
+ return 'internalError';
+ }
+ if ($externe == null || $externe == 'http://:80' || $externe == 'https://:80') {
+ return 'externalError';
+ }
+ if ($this->getConfiguration('affect_user') == '') {
+ return 'UserError';
+ }
+ $key = $this->getLogicalId();
+ $request_qrcode = array(
+ 'eqLogic_id' => $this->getId(),
+ 'url_internal' => $interne,
+ 'url_external' => $externe,
+ 'Iq' => $key,
+ );
+ if ($this->getConfiguration('affect_user') != '') {
+ $username = user::byId($this->getConfiguration('affect_user'));
+ if (is_object($username)) {
+ $request_qrcode['username'] = $username->getLogin();
+ $request_qrcode['apikey'] = $username->getHash();
+ }
+ }
+ ob_start();
+ QRcode::png(json_encode($request_qrcode));
+ $imageString = base64_encode(ob_get_contents());
+ ob_end_clean();
+ return $imageString;
+ }
- public static function configMenuCustom($eqId, $jeedomVersion){
+ /**
+ * get QrCode base64 for a user
+ * use lib phpqrcode
+ * Call by ajax getQrCodeV2 for modal.qrcodev2
+ * @return string
+ */
+ public static function getQrCodeV2($userId)
+ {
+ require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php';
+ $interne = network::getNetworkAccess('internal');
+ $externe = network::getNetworkAccess('external');
+ if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') {
+ return 'internalError';
+ }
+ if ($externe == null || $externe == 'http://:80' || $externe == 'https://:80') {
+ return 'externalError';
+ }
+ if (!is_object(user::byId($userId))) {
+ return 'UserError';
+ }
+ $request_qrcode = array(
+ 'url_internal' => $interne,
+ 'url_external' => $externe
+ );
+ if (is_object($user = user::byId($userId))) {
+ $request_qrcode['username'] = $user->getLogin();
+ $request_qrcode['apikey'] = $user->getHash();
+ }
+ ob_start();
+ QRcode::png(json_encode($request_qrcode));
+ $imageString = base64_encode(ob_get_contents());
+ ob_end_clean();
+ return $imageString;
+ }
- if ($jeedomVersion < '4.4.0') {
- log::add('mobile', 'info', '|-CONFIGMENU CUSTOM JEEDOM 4.3.0--');
- return $defaultMenuArray = self::getDefaultMenuArray();
- }
- log::add('mobile', 'info', '|-CONFIGMENU CUSTOM JEEDOM 4.4.0--');
- $defaultMenuArray = self::getDefaultMenuArray();
-
- if (is_object($eqLogic = eqLogic::byId($eqId))) {
- $eqLogics = eqLogic::byType('mobile');
- $menuCustomArray = $eqLogic->getConfiguration('menuCustomArray');
-
- // ATTRIBUTION MOBILE PAR DEFAUT A TOUS LES MOBILES
- foreach ($eqLogics as $mobile) {
- if ($mobile->getConfiguration('defaultIdMobile') == $eqId) {
- $countFor = intval($eqLogic->getConfiguration('nbIcones', 3)) + 1;
- $menuArrayTemp = [];
- for ($i = 1; $i < $countFor; $i++) {
- $menuArrayTemp[$i]['selectNameMenu'] = isset($menuCustomArray[$i]['selectNameMenu']) ? $menuCustomArray[$i]['selectNameMenu'] : 'none';
- $menuArrayTemp[$i]['renameIcon'] = isset($menuCustomArray[$i]['renameIcon']) ? $menuCustomArray[$i]['renameIcon'] : '';
- $menuArrayTemp[$i]['spanIcon'] = isset($menuCustomArray[$i]['spanIcon']) ? $menuCustomArray[$i]['spanIcon'] : 'none';
- $menuArrayTemp[$i]['urlUser'] = isset($menuCustomArray[$i]['urlUser']) ? $menuCustomArray[$i]['urlUser'] : 'none';
- }
- $mobile->setConfiguration('menuCustomArray', $menuArrayTemp);
- $mobile->save();
- };
+ /**
+ * Create and update cmd for SpecificChannel
+ * Call by Api : mobile::geoloc && methodeForSpecificChannel
+ */
+ public function cmdForSpecificChannel($params = array(), $_trigger = 'location')
+ {
+ log::add('mobile', 'debug', '|┌──:fg-success: cmdForSpecificChannel :/fg:──');
+ if (isset($params[$_trigger])) {
+ $order = count($this->getCmd());
+ $getDeviceInformations = (isset($params[$_trigger]['extras']) && isset($params[$_trigger]['extras']['method']) && $params[$_trigger]['extras']['method'] == 'getDeviceInformations');
+ $eventAge = time() - intval(strtotime($params[$_trigger]['timestamp']));
+ if ($eventAge > 1800) {
+ log::add('mobile', 'debug', '|| SKIP stale specific event (' . round($eventAge / 60) . 'min) ');
+ } else {
+ log::add('mobile', 'debug', '|| eventAge = ' . $eventAge . ' s');
+ // Battery
+ if (isset($params[$_trigger]['battery'])) {
+ // level
+ if (isset($params[$_trigger]['battery']['level'])) {
+ if ($getDeviceInformations) {
+ $cmd = $this->getCmd(null, 'battery::level');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId('battery::level');
+ $cmd->setName(__('Batterie du téléphone', __FILE__));
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setConfiguration('historizeRound', 2);
+ $cmd->setConfiguration('minValue', 0);
+ $cmd->setConfiguration('maxValue', 100);
+ $cmd->setUnite('%');
+ $cmd->setIsVisible(0);
+ $cmd->setOrder($order);
+ $order++;
+ log::add('mobile', 'debug', '|| Creating the "phone battery" command');
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('info');
+ $cmd->setConfiguration('calculValueOffset', '#value# * 100');
+ $cmd->setSubType('numeric');
+ if ($cmd->getChanged() === true) $cmd->save();
+ }
+ if ($params[$_trigger]['battery']['level'] != -1) {
+ if ($this->checkAndUpdateCmd('battery::level', $params[$_trigger]['battery']['level'])) {
+ log::add('mobile', 'debug', '|| Updating "phone battery" value ─▶︎ ' . $params[$_trigger]['battery']['level'] * 100 . '%');
+ }
+ } else {
+ log::add('mobile', 'debug', '|| [WARNING] No data available for battery level ─▶︎ ' . $params[$_trigger]['battery']['level']);
+ }
+ }
+ // charging
+ if (isset($params[$_trigger]['battery']['is_charging'])) {
+ if ($getDeviceInformations) {
+ $cmd = $this->getCmd(null, 'battery::isCharging');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId('battery::isCharging');
+ $cmd->setName(__('En charge', __FILE__));
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setTemplate('dashboard', 'core::line');
+ $cmd->setTemplate('mobile', 'core::line');
+ $cmd->setIsVisible(0);
+ $cmd->setOrder($order);
+ $order++;
+ log::add('mobile', 'debug', '|| Creating the "in charge" command');
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('info');
+ $cmd->setSubType('binary');
+ if ($cmd->getChanged() === true) $cmd->save();
+ }
+ if ($this->checkAndUpdateCmd('battery::isCharging', intval($params[$_trigger]['battery']['is_charging']))) {
+ log::add('mobile', 'debug', '|| Updating "in charge" value ─▶︎ ' . intval($params[$_trigger]['battery']['is_charging']));
+ }
+ }
}
- $nbIcones = $eqLogic->getConfiguration('nbIcones', 3);
- $arrayElements = array();
- $j = 0;
- $count = 1;
- for ($i = 1; $i < 5; $i++) {
-
- // GENERATE TAB ICON LIBRARY AND RENAME BY USER
- $resultTabIcon = self::generateTabIcon($menuCustomArray, $i);
- $tabIconName = $resultTabIcon['tabIconName'];
- $tabLibName = $resultTabIcon['tabLibName'];
- $tabRenameInput = $resultTabIcon['tabRenameInput'];
-
-
- $objectId = $menuCustomArray[$i]['selectNameMenu'];
- $isActive = true;
- $webviewUrl = 'd';
-
- log::add('mobile', 'debug', '| - objectId > ' . $objectId);
-
- // GENERATE URLS FOR MENU CUSTOM
- $result = self::generateTypeObject($objectId, $i, $webviewUrl, $pluginPanelMobile);
- $typeObject = $result['typeObject'];
- $typewebviewurl = $result['typewebviewurl'];
- $typeobjectId = $result['typeobjectId'];
- $tabUrl = $result['tabUrl'];
-
- if ($count > intval($nbIcones)) {
- $isActive = false;
+ // coords
+ if (isset($params[$_trigger]['coords'])) {
+ if (isset($params[$_trigger]['coords']['latitude']) && isset($params[$_trigger]['coords']['longitude'])) {
+ if ($getDeviceInformations) {
+ $cmd = $this->getCmd(null, 'coords');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId('coords');
+ $cmd->setName(__('Coordonnées', __FILE__));
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setTemplate('dashboard', 'core::line');
+ $cmd->setTemplate('mobile', 'core::line');
+ $cmd->setIsVisible(0);
+ $cmd->setOrder($order);
+ $order++;
+ log::add('mobile', 'debug', '|| Creating the "coordinates" command');
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('info');
+ $cmd->setSubType('string');
+ if ($cmd->getChanged() === true) $cmd->save();
+ }
+ $coord = $params[$_trigger]['coords']['latitude'] . ',' . $params[$_trigger]['coords']['longitude'];
+ if ($this->checkAndUpdateCmd('coords', $coord)) {
+ log::add('mobile', 'debug', '|| Updating "coordinates" value ─▶︎ ' . $coord);
+ }
+ }
+ if (isset($params[$_trigger]['coords']['altitude'])) {
+ if ($getDeviceInformations) {
+ $cmd = $this->getCmd(null, 'altitude');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setLogicalId('altitude');
+ $cmd->setName(__('Altitude', __FILE__));
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setTemplate('dashboard', 'core::line');
+ $cmd->setTemplate('mobile', 'core::line');
+ $cmd->setIsVisible(0);
+ $cmd->setUnite('m');
+ $cmd->setOrder($order);
+ $order++;
+ log::add('mobile', 'debug', '|| Creating the "altitude" command');
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('info');
+ $cmd->setSubType('string');
+ if ($cmd->getChanged() === true) $cmd->save();
+ }
+ if ($this->checkAndUpdateCmd('altitude', $params[$_trigger]['coords']['altitude'])) {
+ log::add('mobile', 'debug', '|| Updating "Altitude" value ─▶︎ ' . $params[$_trigger]['coords']['altitude'] . 'm');
+ }
}
- log::add('mobile', 'debug', '| - Construction jsonTemplate');
- $jsonTemplate = array(
- 'active' => $isActive,
- 'icon' => [
- 'name' => $tabIconName,
- 'type' => $tabLibName
- ],
- 'name' => $tabRenameInput,
- 'options' => [
- 'uri' => $tabUrl,
- 'objectType' => $typeObject,
- 'mobile' => $typewebviewurl,
- 'objectId' => $typeobjectId
- ],
- 'type' => strpos($tabUrl, 'www') !== false ? 'urlwww' : 'WebviewApp'
- );
- $arrayElements['tab' . $j] = $jsonTemplate;
- $j++;
- $count++;
}
-
- log::add('mobile', 'info', '| - Function MobileconfigMenuCustom :' . json_encode($arrayElements));
- log::add('mobile', 'debug', '|-----------------------------------');
- if (count($arrayElements) == 4) {
- $j = 0;
- for ($i = 0; $i < 4; $i++) {
- $isBool = is_bool($arrayElements['tab' . $i]['active']);
- if ($isBool) {
- if ($arrayElements['tab' . $i]['active'] == true) {
- $j++;
- }
- } else {
- return $defaultMenuArray;
- }
- }
- return ($j == 0) ? $defaultMenuArray : $arrayElements;
- }
- return $defaultMenuArray;
- }
- return $defaultMenuArray;
-
+ }
+ }
+ log::add('mobile', 'debug', '|└──────────────');
}
- public static function generateTabIcon($menuCustomArray, $i){
- $result = array();
-
- $tabIconName = isset($menuCustomArray[$i]['spanIcon']) ? $menuCustomArray[$i]['spanIcon'] : 'none';
-
- if ($tabIconName != 'none') {
- $arrayIcon = explode(' ', $tabIconName);
- $tabIconName = substr(strstr($arrayIcon[1], '-'), 1);
- $tabLibName = strstr($arrayIcon[1], '-', true);
- if ($tabLibName == 'mdi') {
- $tabLibName = 'Mdi';
- }
- } else {
- $tabIconName = 'in';
- $tabLibName = 'jeedomapp';
- }
-
- $tabRenameInput = isset($menuCustomArray[$i]['renameIcon']) ? $menuCustomArray[$i]['renameIcon'] : 'none';
-
- if ($tabRenameInput == 'none') {
- $tabRenameInput = 'Accueil';
- }
- $result['tabIconName'] = $tabIconName;
- $result['tabLibName'] = $tabLibName;
- $result['tabRenameInput'] = $tabRenameInput;
-
- return $result;
- }
-
-
- public static function generateTypeObject($objectId, $i, $webviewUrl, $pluginPanelMobile){
-
- $result = array();
- if ($objectId && $objectId != -1 && $objectId != 'none' && $objectId != 'url') {
- // SPECIFIC OBJETS FOR URL
- $excludedRefs = array('overview', 'health', 'home', 'timeline');
- if (!in_array($objectId, $excludedRefs)) {
- $arrayObjects = explode('_', $objectId);
- $objectId = $arrayObjects[0];
- $typeObject = $arrayObjects[1];
-
- $typewebviewurl = $webviewUrl;
- $typeobjectId = $objectId;
-
- switch ($typeObject) {
- case 'views':
- $tabUrl = "/index.php?v={$webviewUrl}&p=view&view_id={$objectId}";
- break;
- case 'dashboard':
- $tabUrl = "/index.php?v={$webviewUrl}&p=dashboard&object_id={$objectId}";
- break;
- case 'plan':
- $tabUrl = "/index.php?v={$webviewUrl}&p=plan&plan_id={$objectId}";
- break;
- case 'panel':
- $tabUrl = ($pluginPanelMobile[$objectId] == $objectId) ? "/index.php?v=m&p={$objectId}" : "/index.php?v=m&p={$objectId}&app_mode=1";
- break;
- default:
- break;
- }
- } else {
- $typeObject = $objectId;
- $typewebviewurl = $webviewUrl;
- $typeobjectId = '';
-
- switch ($objectId) {
- case 'overview':
- $tabUrl = "/index.php?v=m&p=overview";
- break;
- case 'home':
- $tabUrl = "/index.php?v=m&p=home";
- break;
- case 'health':
- $tabUrl = "/index.php?v=m&p=health";
- break;
- case 'timeline':
- $tabUrl = "/index.php?v=m&p=timeline";
- break;
- default:
- $typeObject = $objectId;
- $typewebviewurl = 'm';
- $typeobjectId = '';
- $tabUrl = '/index.php?v=m&app_mode=1';
- break;
- }
- }
- } elseif ($objectId == 'url') {
- $typeObject = $objectId;
- $typewebviewurl = $webviewUrl;
- $typeobjectId = 'url';
- $tabUrl = $menuCustomArray[$i]['urlUser'];
- } else {
- $typeObject = $objectId;
- $typewebviewurl = 'm';
- $typeobjectId = '';
- $tabUrl = '/index.php?v=m&app_mode=1';
- }
-
- $result['typeObject'] = $typeObject;
- $result['typewebviewurl'] = $typewebviewurl;
- $result['typeobjectId'] = $typeobjectId;
- $result['tabUrl'] = $tabUrl;
-
- return $result;
-}
-
-private static function getDefaultMenuArray(){
- $defaultMenuJson = '{"tab0":{"active":true,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"},
- "tab1":{"active":false,"icon":{"name":"hubspot","type":"fa"},"name":"Synthese","options":{"uri":"\/index.php?v=m&p=overview"},"type":"WebviewApp"},
- "tab2":{"active":false,"icon":{"name":"medkit","type":"fa"},"name":"Sant\u00e9","options":{"uri":"\/index.php?v=m&p=health"},"type":"WebviewApp"},
- "tab3":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"}}';
- return json_decode($defaultMenuJson, true);
-}
-
-
- /*
- * Call by
- - jsonrpc -> nfc
- - jsonrpc -> qrcodemethod
- */
- public function cmdForApi($Iq, $logicalId, $value, $name = "", $subtype = "string")
+ /**
+ * cleaning notifications based on time retention
+ * Call by cronDaily
+ */
+ public function cleaningNotifications()
{
- $mobile = eqLogic::byLogicalId($Iq, 'mobile');
- if (is_object($mobile)) {
- $cmd = $mobile->getCmd(null, $logicalId);
- if (!is_object($cmd)) {
- if ($name == "") {
- $name = $logicalId;
+ $notifsTime = $this->getConfiguration('notifsTime', 30);
+ log::add('mobile', 'debug', '┌──────────▶︎ :fg-warning: cleaningNotifications :/fg: ──────────');
+ log::add('mobile', 'debug', '| Current retention period ─▶︎ ' . $notifsTime . ' days');
+ // Images
+ $retentionSeconds = intVal($notifsTime) * 24 * 60 * 60;
+ $currentTime = time();
+ $pathImages = dirname(__FILE__) . '/../../data/images/';
+ if (is_dir($pathImages)) {
+ $images = glob($pathImages . '*.jpg');
+ foreach ($images as $image) {
+ if (strpos($image, $this->getLogicalId()) !== false) {
+ $fileCreationTime = filemtime($image);
+ if ($fileCreationTime < ($currentTime - $retentionSeconds)) {
+ if (!unlink($image)) {
+ log::add('mobile', 'error', __("Erreur lors de la suppression", __FILE__) . ' ─▶︎ ' . $image);
+ } else {
+ log::add('mobile', 'debug', '| [WARNING] image removal ─▶︎ ' . $image);
+ }
+ }
}
- $cmd = new mobileCmd();
- $cmd->setLogicalId($logicalId);
- $cmd->setName($name);
- $cmd->setOrder(0);
- $cmd->setEqLogic_id($mobile->getId());
- $cmd->setType('info');
- $cmd->setSubType($subtype);
- $cmd->setIsVisible(1);
- if (in_array($logicalId, array('barrecodemethod', 'nfcPayload', 'nfcId'))) {
- $cmd->setConfiguration('repeatEventManagement', 'always');
+ }
+ }
+ // Notifications
+ $filePath = dirname(__FILE__) . '/../data/notifications/' . $this->getLogicalId() . '.json';
+ $notifications = 'noNotifications';
+ if (file_exists($filePath)) {
+ $notifications = file_get_contents($filePath);
+ if ($notifications) {
+ $notifications = json_decode($notifications, true);
+ if (json_last_error() !== JSON_ERROR_NONE) {
+ log::add('mobile', 'error', __("Erreur decodage du JSON", __FILE__) . ' ─▶︎ ' . json_last_error_msg());
+ return;
+ }
+ $notificationsModified = false;
+
+ foreach ($notifications as $id => $value) {
+ $notificationDate = strtotime($value['data']['date']);
+ if (($currentTime - $notificationDate) > $retentionSeconds) {
+ log::add('mobile', 'debug', '| [WARNING] notification removal ─▶︎ N°' . $id);
+ unset($notifications[$id]);
+ $notificationsModified = true;
+ }
+ }
+ $notifications = json_encode($notifications);
+ if ($notificationsModified) {
+ file_put_contents($filePath, $notifications);
}
- $cmd->save();
}
- $cmd->event($value);
}
+ log::add('mobile', 'debug', '└───────────────────────────────────────────');
}
+ /**
+ * Call by core after insert into bdd
+ */
+ public function postInsert()
+ {
+ if ($this->getLogicalId() == '') {
+ $key = config::genKey(32);
+ $this->setLogicalId($key);
+ }
+ if ($this->getConfiguration('appVersion', 1) == 2) {
+ $this->setConfiguration('defaultIdMobile', $this->getId());
+ }
+ $this->save();
+ }
+
+ /**
+ * Call by core after save into bdd
+ */
public function postSave()
{
- $cmdNotif = $this->getCmd(null, 'notif');
- if (!is_object($cmdNotif)) {
- $cmdNotif = new mobileCmd();
- }
- $cmdNotif->setLogicalId('notif');
- $cmdNotif->setName(__('Notification', __FILE__));
- $cmdNotif->setOrder(0);
- $cmdNotif->setEqLogic_id($this->getId());
- $cmdNotif->setDisplay('generic_type', 'GENERIC_ACTION');
- $cmdNotif->setType('action');
- $cmdNotif->setSubType('message');
- $cmdNotif->setIsVisible(1);
- $cmdNotif->save();
+ $order = count($this->getCmd());
+
+ // Notification command
+ $cmd = $this->getCmd(null, 'notif');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setIsVisible(1);
+ $cmd->setName(__('Notification', __FILE__));
+ $cmd->setLogicalId('notif');
+ $cmd->setGeneric_type('GENERIC_ACTION');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setOrder($order);
+ $order++;
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('action');
+ $cmd->setSubType('message');
+ if ($cmd->getChanged() === true) $cmd->save();
if ($this->getConfiguration('appVersion', 1) == 2) {
- $cmdNotif = $this->getCmd(null, 'notifCritical');
- if (!is_object($cmdNotif)) {
- $cmdNotif = new mobileCmd();
+ // Critical Notification Command
+ $cmd = $this->getCmd(null, 'notifCritical');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setIsVisible(1);
+ $cmd->setName(__('Notification Critique', __FILE__));
+ $cmd->setLogicalId('notifCritical');
+ $cmd->setGeneric_type('GENERIC_ACTION');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setOrder($order);
+ $order++;
}
- $cmdNotif->setLogicalId('notifCritical');
- $cmdNotif->setName(__('Notification Critique', __FILE__));
- $cmdNotif->setOrder(0);
- $cmdNotif->setEqLogic_id($this->getId());
- $cmdNotif->setDisplay('generic_type', 'GENERIC_ACTION');
- $cmdNotif->setType('action');
- $cmdNotif->setSubType('message');
- $cmdNotif->setIsVisible(1);
- $cmdNotif->save();
- }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('action');
+ $cmd->setSubType('message');
+ if ($cmd->getChanged() === true) $cmd->save();
- $cmdaskText = $this->getCmd(null, 'ask_Text');
- if (is_object($cmdaskText)) {
- $cmdaskText->remove();
+ // Silent notification command
+ $cmd = $this->getCmd(null, 'notifSilent');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setIsVisible(1);
+ $cmd->setName(__('Notification Silencieuse', __FILE__));
+ $cmd->setLogicalId('notifSilent');
+ $cmd->setGeneric_type('GENERIC_ACTION');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setOrder($order);
+ $order++;
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('action');
+ $cmd->setSubType('message');
+ if ($cmd->getChanged() === true) $cmd->save();
+
+ // command to retrieve specific information
+ $cmd = $this->getCmd(null, 'notifSpecific');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setIsVisible(0);
+ $cmd->setName(__('Récupérer les informations du téléphone', __FILE__));
+ $cmd->setLogicalId('notifSpecific');
+ $cmd->setGeneric_type('GENERIC_ACTION');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setOrder($order);
+ $order++;
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('action');
+ $cmd->setSubType('other');
+ if ($cmd->getChanged() === true) $cmd->save();
+
+ // Command to delete notifications
+ $cmd = $this->getCmd(null, 'removeNotifs');
+ if (!is_object($cmd)) {
+ $cmd = new mobileCmd();
+ $cmd->setIsVisible(1);
+ $cmd->setName(__('Supprimer les Notifications', __FILE__));
+ $cmd->setLogicalId('removeNotifs');
+ $cmd->setGeneric_type('GENERIC_ACTION');
+ $cmd->setDisplay('icon', '');
+ $cmd->setDisplay('forceReturnLineAfter', 1);
+ $cmd->setDisplay('showIconAndNamedashboard', 1);
+ $cmd->setDisplay('showIconAndNamemobile', 1);
+ $cmd->setOrder($order);
+ $order++;
+ }
+ $cmd->setEqLogic_id($this->getId());
+ $cmd->setType('action');
+ $cmd->setSubType('select');
+ $listValue = "1|" . __('Supprimer toutes les Notifications', __FILE__) . ";2|" . __('Supprimer les Asks expirés', __FILE__) . ";3|" . __('Supprimer les Asks répondus', __FILE__);
+ $cmd->setConfiguration('listValue', $listValue);
+ if ($cmd->getChanged() === true) $cmd->save();
}
- $cmdaskYN = $this->getCmd(null, 'ask_YN');
- if (is_object($cmdaskYN)) {
- $cmdaskYN->remove();
+
+ if ($this->getConfiguration('appVersion', 1) != 2) {
+ $cmdaskText = $this->getCmd(null, 'ask_Text');
+ if (is_object($cmdaskText)) {
+ $cmdaskText->remove();
+ }
+ $cmdaskYN = $this->getCmd(null, 'ask_YN');
+ if (is_object($cmdaskYN)) {
+ $cmdaskYN->remove();
+ }
}
}
+ /**
+ * Call by core before remove eqLogic
+ */
public function preRemove()
{
- $eqId = $this->getId();
- $idMobileActive = config::byKey('checkdefaultID', 'mobile');
- if ($idMobileActive == $eqId) {
- config::save('checkdefaultID', 'noActivMobile', 'mobile');
+ log::add('mobile', 'debug', '┌──:fg-success: preRemove() :/fg:──');
+ $Iq = $this->getId();
+ /* App V2 */
+ foreach (eqLogic::byType('mobile') as $mobile) {
+ if ($Iq == $mobile->getId()) continue;
+ if ($mobile->getConfiguration('defaultIdMobile', 'none') == $Iq) {
+ $mobile->setConfiguration('defaultIdMobile', $mobile->getId());
+ $mobile->save();
+ log::add('mobile', 'debug', '| Update defaultIdMobile for mobile ' . $mobile->getHumanName(false) . ' ( ' . $mobile->getId() . ' ) ');
+ }
+ }
+ $fileNotif = dirname(__FILE__) . '/../data/notifications/' . $this->getLogicalId() . '.json';
+ if (file_exists($fileNotif)) {
+ log::add('mobile', 'debug', '| Deleting notifications file ─▶︎ ' . $fileNotif);
+ shell_exec('rm ' . $fileNotif);
}
+ /* App V1 */
+ $path = dirname(__FILE__) . '/../../data/' . $this->getLogicalId();
+ if (file_exists($path)) {
+ log::add('mobile', 'debug', '| Deleting folder ─▶︎ ' . $path);
+ shell_exec('rm -rf ' . $path);
+ }
+ log::add('mobile', 'debug', '└────────────────────');
}
+ /**
+ * Call by core after remove eqLogic
+ */
+ /*
+ public function postRemove() {
- /* public function postRemove() {
- $eqId = $this->getId();
- $mobileActive = eqLogic::byId(intval($mobileActiveDefault));
-
- }*/
-
- /* * *********************Méthodes d'instance************************* */
+ }
+ */
/* * **********************Getteur Setteur*************************** */
- public static function cronDaily()
- {
- mobile::makeTemplateJson();
- mobile::deleteFileImg();
- }
}
class mobileCmd extends cmd
@@ -1342,23 +1787,28 @@ class mobileCmd extends cmd
public static function fileInMessage($data)
{
- log::add('mobile', 'debug', 'test FileInMessage');
+ log::add('mobile', 'debug', '|┌──:fg-success: fileInMessage :/fg:──');
$dataArray = explode('|', $data);
$result = array();
foreach ($dataArray as $item) {
-
$arg = explode('=', trim($item), 2);
if (count($arg) == 2) {
$result[trim($arg[0])] = trim($arg[1]);
}
}
$result['message'] = $dataArray[0];
- log::add('mobile', 'debug', 'file Parse > ' . json_encode($result));
+ $decodedMessage = json_decode($result['message']);
+ if (json_last_error() === JSON_ERROR_NONE) {
+ log::add('mobile', 'debug', '|| [INFO] Message ─▶︎ ' . $decodedMessage);
+ } else {
+ log::add('mobile', 'debug', '|| [INFO] Message ─▶︎ ' . str_replace(["\r", "\n"], "", $result['message']));
+ }
if (array_key_exists('file', $result)) {
- log::add('mobile', 'debug', 'file > ' . $result['file']);
+ log::add('mobile', 'debug', '|| file ─▶︎ ' . $result['file']);
+ log::add('mobile', 'debug', '|└────────────────────');
return $result;
} else {
- log::add('mobile', 'debug', 'null');
+ log::add('mobile', 'debug', '|└────────────────────');
return null;
}
}
@@ -1368,60 +1818,103 @@ public function execute($_options = array())
if ($this->getType() != 'action') {
return;
}
+ log::add('mobile', 'debug', '┌──:fg-success: execute :/fg:──');
$optionsNotif = [];
$eqLogic = $this->getEqLogic();
+ $Iq = $eqLogic->getLogicalId();
- if ($this->getLogicalId() == 'notif' || $this->getLogicalId() == 'notifCritical') {
-
- if ($_options['title'] == '' || $_options['title'] == $_options['message'] || $_options['title'] == ' ') {
- $_options['title'] = config::byKey('product_name');
+ if ($this->getLogicalId() == 'removeNotifs') {
+ $filePath = dirname(__FILE__) . '/../data/notifications/' . $Iq . '.json';
+ if (!file_exists($filePath)) {
+ log::add('mobile', 'debug', '| ' . __('Fichier de notifications inexistant', __FILE__) . ' ─▶︎ ' . $filePath);
+ return;
+ }
+ $valueUser = $_options['select'];
+ switch ($valueUser) {
+ case 1:
+ file_put_contents($filePath, '');
+ log::add('mobile', 'debug', '| Deleting all notifications');
+ break;
+ case 2:
+ $notifs = json_decode(file_get_contents($filePath), true);
+ $notifs = array_filter($notifs, function ($notif) {
+ $askParams = json_decode($notif['data']['askParams'], true);
+ $notifTime = strtotime($notif['data']['date']);
+ $currentTime = time();
+ $timeout = (isset($askParams['timeout'])) ? $askParams['timeout'] / 1000 : 0;
+ return $notif['data']['askVariable'] == 'rien' || ($currentTime - $notifTime) < $timeout;
+ });
+ file_put_contents($filePath, json_encode($notifs));
+ log::add('mobile', 'debug', '| Deleting all ask expired');
+ break;
+ case 3:
+ $notifs = json_decode(file_get_contents($filePath), true);
+ $notifs = array_filter($notifs, function ($notif) {
+ return !isset($notif['data']['choiceAsk']) || $notif['data']['choiceAsk'] == '';
+ });
+ file_put_contents($filePath, json_encode($notifs));
+ log::add('mobile', 'debug', '| Deleting all ask answered');
+ break;
}
- $critical = false;
+ log::add('mobile', 'debug', '└────────────────────');
+ }
+ if ($this->getLogicalId() == 'notif' || $this->getLogicalId() == 'notifCritical' || $this->getLogicalId() == 'notifSpecific' || $this->getLogicalId() == 'notifSilent') {
+ $notificationArn = $eqLogic->getConfiguration('notificationArn', null);
+ $typeMobile = $eqLogic->getConfiguration('type_mobile', null);
+ $critical = false;
+ $silent = false;
+ $specific = false;
+ $defaultName = empty(config::byKey('name')) ? config::byKey('product_name') : config::byKey('name');
if ($this->getLogicalId() == 'notifCritical') {
$critical = true;
}
-
+ if ($this->getLogicalId() == 'notifSilent') {
+ $silent = true;
+ }
+ if ($this->getLogicalId() == 'notifSpecific') {
+ $specific = true;
+ $_options['title'] = 'getDeviceInformations';
+ $_options['message'] = 'getDeviceInformations';
+ }
+ if (trim($_options['title']) == '') $_options['title'] = $defaultName;
$file = mobileCmd::fileInMessage($_options['message']);
if (!isset($_options['files']) && $file != null) {
$_options['files'] = array();
array_push($_options['files'], $file['file']);
$_options['message'] = $file['message'];
- log::add('mobile', 'debug', 'file detected ' . json_encode($file));
+ log::add('mobile', 'debug', '| file detected ' . json_encode($file));
}
-
- $answer = ($_options['answer']) ? join(';', $_options['answer']) : null;
- $askVariable = $_options['variable'];
- $askType = ($_options['answer']) ? 'ask_Text' : 'notif';
- $timeout = ($_options['timeout']) ? $_options['timeout'] : 'nok';
+ log::add('mobile', 'DEBUG', '| [INFO] Title ─▶︎ ' . $_options['title']);
+ log::add('mobile', 'DEBUG', '| [INFO] Message ─▶︎ ' . str_replace(["\r", "\n"], "", $_options['message']));
+ if ($typeMobile == 'android') $_options['message'] = nl2br($_options['message']);
+ $answer = (isset($_options['answer']) && $_options['answer']) ? join(';', $_options['answer']) : null;
+ $askVariable = isset($_options['variable']) ? $_options['variable'] : null;
+ $askType = isset($_options['answer']) && $_options['answer'] ? 'ask_Text' : 'notif';
+ if ($askType == 'ask_Text') $_options['title'] = $defaultName;
+ $timeout = isset($_options['timeout']) && $_options['timeout'] ? $_options['timeout'] : 'nok';
$optionsNotif['askVariable'] = $askVariable;
-
- log::add('mobile', 'debug', 'Commande de notification ' . $askType, 'config');
- if (($eqLogic->getConfiguration('notificationArn', null) != null || $eqLogic->getConfiguration('notificationRegistrationToken', null) != null) && $eqLogic->getConfiguration('type_mobile', null) != null) {
+ log::add('mobile', 'debug', '| Notification command ─▶︎ ' . $askType);
+ if (($notificationArn != null || $eqLogic->getConfiguration('notificationRegistrationToken', null) != null) && $typeMobile != null) {
$idNotif = $eqLogic->getConfiguration('idNotif', 0);
$idNotif = $idNotif + 1;
$eqLogic->setConfiguration('idNotif', $idNotif);
$eqLogic->save();
-
- log::add('mobile', 'debug', 'Notif > ' . json_encode($_options) . ' / ' . $eqLogic->getId() . ' / ' . $this->getLogicalId() . ' / idNotif =' . $idNotif, 'config');
+ log::add('mobile', 'debug', '| [INFO] Notif ─▶︎ ' . json_encode($_options));
+ log::add('mobile', 'debug', '| eqLogic ─▶︎ ' . $eqLogic->getId() . ' | LogicalId ─▶︎ ' . $this->getLogicalId() . ' | idNotif ─▶︎ ' . $idNotif);
if (isset($options['file'])) {
- log::add('mobile', 'debug', 'FILE');
- unset($data['file']);
$_options['files'] = explode(',', $options['file']);
}
if (isset($_options['files']) && is_array($_options['files'])) {
- log::add('mobile', 'debug', 'FILES');
+ log::add('mobile', 'debug', '| file detected');
foreach ($_options['files'] as $file) {
- log::add('mobile', 'debug', 'FILES as FILE');
- if (trim($file) == '') {
- continue;
- }
- log::add('mobile', 'debug', 'Continue');
+ if (trim($file) == '') continue;
$ext = pathinfo($file, PATHINFO_EXTENSION);
- log::add('mobile', 'debug', $ext . ' pour > ' . $file);
+ $url = null;
+ log::add('mobile', 'debug', '| ' . $file);
if (in_array($ext, array('gif', 'jpeg', 'jpg', 'png'))) {
- log::add('mobile', 'debug', 'type photo !');
+ log::add('mobile', 'debug', '| ↳ type photo !');
if ($ext == "gif") {
$typeHint = "com.compuserve.gif";
} else if ($ext == "jpeg") {
@@ -1434,34 +1927,31 @@ public function execute($_options = array())
$typeHint = "public.jpeg";
}
$optionsNotif['typeHint'] = $typeHint;
- $url = network::getNetworkAccess('external');
- $url .= '/plugins/mobile/core/php/image.php?';
- $nameFile = base64_encode($file) . '.' . $ext;
+ $nameFile = $Iq . '__' . base64_encode($file) . '.' . $ext;
$path = dirname(__FILE__) . '/../../data/images';
$newfile = $path . '/' . $nameFile;
- log::add('mobile', 'debug', 'copie sur > ' . $newfile);
+ log::add('mobile', 'debug', '| ↳ copy on ─▶︎ ' . $newfile);
if (!file_exists($path)) {
mkdir($path);
}
if (!copy($file, $newfile)) {
- log::add('mobile', 'error', 'la copie de l\'image a echoué');
+ log::add('mobile', 'error', __("la copie de l\'image a échouée", __FILE__));
+ } else {
+ $keyFile = md5_file($newfile);
+ $url = network::getNetworkAccess('external') . '/plugins/mobile/core/php/image.php?key=' . $keyFile . '&name=' . $nameFile;
+ log::add('mobile', 'debug', '| ↳ url ─▶︎ ' . $url);
}
- $keyFile = md5_file($newfile);
- $url .= 'key=' . $keyFile . '&name=' . $nameFile;
- log::add('mobile', 'debug', 'url > ' . $url);
- mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), $url, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical);
- } else {
- mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), null, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical);
}
+ mobile::notification($notificationArn, $typeMobile, $_options['title'], $_options['message'], $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), $url, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical, $Iq, $specific, $silent);
}
} else {
- mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), null, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical);
+ mobile::notification($notificationArn, $typeMobile, $_options['title'], $_options['message'], $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), null, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical, $Iq, $specific, $silent);
}
-
- log::add('mobile', 'debug', 'Action : Envoi d\'une configuration ', 'config');
} else {
- log::add('mobile', 'debug', 'ARN non configuré ', 'config');
+ if ($typeMobile == null) log::add('mobile', 'debug', '| [ERROR] Mobile type not configured');
+ else log::add('mobile', 'debug', '| [ERROR] ARN not configured');
}
+ log::add('mobile', 'debug', '└────────────────────');
}
}
diff --git a/core/data/wizard.json b/core/data/wizard.json
deleted file mode 100755
index 8003e5d3..00000000
--- a/core/data/wizard.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "trame": {
- "firstPage": {
- "title": "Bien demarrer",
- "wizard": "firstPage",
- "order": 1,
- "custom": "",
- "visible": 1
- },
- "SecPage": {
- "title": "Identification",
- "wizard": "secPage",
- "order": 2,
- "custom": "",
- "visible": 1
- },
- "ThirdPage": {
- "title": "Mes Boxs",
- "wizard": "thirdPage",
- "order": 3,
- "custom": "",
- "visible": 1
- },
- "FourPage": {
- "title": "Synchronisation Boxs",
- "wizard": "fourPage",
- "order": 4,
- "custom": "",
- "visible": 1
- },
- "FivePage": {
- "title": "Geolocalisation",
- "wizard": "fivePage",
- "order": 5,
- "custom": "",
- "visible": 1
- },
- "SixPage": {
- "title": "Personnalisation Menu",
- "wizard": "sixPage",
- "order": 6,
- "custom": "",
- "visible": 1
- }
- }
-}
diff --git a/core/i18n/de_DE.json b/core/i18n/de_DE.json
index 4807b97a..46947862 100755
--- a/core/i18n/de_DE.json
+++ b/core/i18n/de_DE.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "App-Benachrichtigungen",
"Réponse Ask sensible à la case : ": "Fragen Sie die Antwort, die für die Box empfindlich ist:"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Les Pièces - Application V1": "Teile - Anwendung V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Équipement": "Gerät",
- "Type de Mobile": "Mobiler Typ",
- "Utilisateur": "Benutzer",
- "Dernière activité": "Letzte Aktivität",
- "Date création": "Erstellungsdatum",
- "Utilisateur non trouvé": "Benutzer nicht gefunden"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "COMPTE MARKET": "MARKTKONTO",
- "BOX ID": "BOX-ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Sie müssen lediglich Ihre Markt-ID und Ihr Passwort eingeben",
- "Plusieurs choix sur cet écran :": "Mehrere Auswahlmöglichkeiten auf diesem Bildschirm:",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Sie geben die URL Ihres Jeedom (intern oder extern) sowie die Zugangskennungen dazu ein und bestätigen mit dem LOGIN-Button",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Sie klicken auf QR-Code: ein neuer Bildschirm erscheint; Sie können einen QRCode aus dem Mobile-Plugin der Box, die Sie hinzufügen möchten, über die Registerkarte QRCODE des Plugins scannen"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 – Unbefugter Zugriff",
"Équipement": "Ausrüstung",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Benutzer nicht gefunden",
"Configuration Menu Enregistrée": "Gespeicherte Menükonfiguration"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Plugins Spéciaux Compatibles": "Kompatible Spezial-Plugins",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Verfügbar in der Liste der Plugins und in das Dashboard der Mobile App integriert",
- "Plugins Validés Type générique": "Validierte Plugins Generischer Typ",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "In der App sichtbar, erfordert möglicherweise einen generischen Typ, ist möglicherweise deaktiviert",
- "Plugins compatibles non transmis": "Kompatible Plugins werden nicht übertragen",
- "Ne sont pas transmis à l’App Mobile.": "Werden nicht an die Mobile App übertragen",
- "Plugins non testés transmis à l'application": "Nicht getestete Plugins werden an die Anwendung übertragen",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Werden basierend auf generischen Typen an die Mobile App übertragen",
- "Plugins non testés et non transmis": "Plugins nicht getestet und nicht übertragen",
- "Ne sont pas transmis à l’App Mobile": "Werden nicht an die Mobile App übertragen"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Fonctionnement de la Géolocalisation": "So funktioniert Geolokalisierung",
- "On ajoute une zone de Géolocalisation": "Wir fügen eine Geolocation-Zone hinzu",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Wir suchen nach der Adresse, benennen die Zone und validieren",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "Die Zone wird rot angezeigt, was bedeutet, dass Sie sich nicht in der Zone befinden",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Wenn Sie sich beim Erstellen in dem Bereich befinden, wird es nach einigen Sekunden grün",
- "Modifier largueur de la zone": "Zonenbreite ändern",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Durch das Hinzufügen einer Zone wird Ihrer Telefonanlage im Mobile-Plugin ein binärer Befehl hinzugefügt, mit dem wir Aktionen basierend auf ihrem Zustand programmieren können"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "HINZUFÜGEN DER BOX ZU IHRER MOBILEN APP",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Sie können einen Benutzer auswählen: Es wird ein QRCode generiert. Anschließend können Sie den QRCode aus der neuen Anwendung scannen und so dieses Feld zu Ihrer Anwendung hinzufügen",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Fehler Keine externe Adresse (siehe Konfiguration Ihres Jeedom!)",
"Erreur Pas d\\'utilisateur selectionné": "Fehler Kein Benutzer ausgewählt"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Personnalisation du Menu": "Menüanpassung",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Sie können das Menü Ihres WebView über das Mobile-Plugin oder die Anwendung anpassen",
- "On clique sur Menu Custom": "Wir klicken auf Menü Benutzerdefiniert",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Ein Modal öffnet sich und bietet Ihnen Ihre bereits verbundenen Telefone an",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Klicken Sie auf dem ausgewählten Telefon auf Menü konfigurieren",
- "Le nombre d'icônes peut aller de 1 à 4": "Die Anzahl der Symbole kann zwischen 1 und 4 liegen",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "Wenn Sie „Menüstandard“ aktivieren, wird das auf diesem Telefon konfigurierte Menü zum Standardmenü auf allen Ihren Telefonen",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Über die mobile Anwendung: Wenn Sie ein Standardfeld konfiguriert haben, erscheint das benutzerdefinierte Menü im Anwendungsmenü",
- "Même principe que via le plugin Mobile": "Gleiches Prinzip wie über das Mobile-Plugin"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "So verbinden Sie Ihr Telefon: Es gibt 2 mögliche Methoden"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff",
- "Pause": "Pause",
- "Rechercher": "Suchen nach"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Envoi auprès de l'app mobile": "Senden an die mobile App",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Dieses Plugin ist voll kompatibel und erfordert keine Aktion von Ihrer Seite",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Dieses Plugin ist kompatibel. Denken Sie daran, die generischen Typen der Befehle zu überprüfen",
- "Activer": "Aktivieren",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Das Plugin ist nicht kompatibel, Sie können es bei Bedarf aktivieren",
- "Type Générique du Plugin": "Generischer Plugin-Typ",
- "Sauvegarder": "Speichern",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Name der Bestellung",
- "Type Générique": "Typ Gattung",
- "Icône": "Symbol",
- "Aucun": "Ohne",
- " . $info['family'] . ": "$ info ['Familie']",
- "Plugins compatibles": "Kompatible Plugins",
- "Modifications sauvegardées avec succès": "Änderungen erfolgreich gespeichert",
- "Sauvegarde effectuée": "Sicherung abgeschlossen"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff",
- "Scénarios": "Szenarien",
- "Sauvegarder": "Speichern",
- "ID": "Identifikation",
- "Scénario": "Szenario",
- "Transmis": "Übertragen",
- "Actions": "Lager",
- "Envoyer à l\\'application": "An Bewerbung senden"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Envoyer cette pièce vers l\\'application": "Senden Sie diesen Teil an die Anwendung",
- "Activer": "Aktivieren",
- "Type Générique de cet objet": "Generischer Typ dieses Objekts",
- "Sauvegarder": "Speichern",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Name der Bestellung",
- "Type Générique": "Typ Gattung",
- "Icône": "Symbol",
- "Aucun": "Ohne",
- " . $info['family'] . ": "$ info ['Familie']",
- "Objets \/ Pièces": "Objekte \/ Stücke",
- "Modifications sauvegardées avec succès": "Änderungen erfolgreich gespeichert",
- "Sauvegarde effectuée avec succès": "Speichern erfolgreich abgeschlossen"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "JSON valide": "Gültiger json",
- "Objets \/ Pièces": "Objekte \/ Stücke",
- "Modules": "Module",
- "Commandes": "Befehle",
- "Scénarios": "Szenarien",
- "Messages": "Nachricht",
- "Designs": "Design",
- "Configurations": "Konfigurationen"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Fonctionnement de la Géolocalisation": "So funktioniert Geolokalisierung",
- "On ajoute une zone de Géolocalisation": "Wir fügen eine Geolocation-Zone hinzu",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Wir suchen nach der Adresse, benennen die Zone und validieren",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "Die Zone wird rot angezeigt, was bedeutet, dass Sie sich nicht in der Zone befinden",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Wenn Sie sich beim Erstellen in dem Bereich befinden, wird es nach einigen Sekunden grün",
- "Modifier largueur de la zone": "Zonenbreite ändern",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Durch das Hinzufügen einer Zone wird Ihrer Telefonanlage im Mobile-Plugin ein binärer Befehl hinzugefügt, mit dem Sie Aktionen basierend auf ihrem Zustand programmieren können"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Um auf Funktionen wie Benachrichtigungen, Menüpersonalisierung oder Geolokalisierung zugreifen zu können, müssen Sie zunächst mindestens ein aktuelles Feld ausgewählt haben",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Dazu müssen Sie im Reiter „Boxen“ eine Box auswählen und sich identifizieren",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Sobald die Kennungen eingegeben wurden, wird das Feld an den Anfang der Liste verschoben",
- "Si elle répond au ping, elle a un voyant vert": "Wenn es auf den Ping reagiert, zeigt es grünes Licht",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "Sie können auf „Synchronisieren“ klicken, um den Status der Boxen zu aktualisieren",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Um auf alle Funktionen zuzugreifen, müssen Sie auf das konfigurierte Feld klicken. Dadurch kann die Anwendung ihre Informationen abrufen und somit die Menüanzeigen autorisieren",
- "Menu Complet": "Volles Menü"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Équipement": "Ausrüstung",
- "Type de Mobile": "Mobiler Typ",
- "Utilisateur": "Benutzer",
- "Menu Enregistrés": "Menü gespeichert",
- "Aucun menu enregistré": "Kein gespeichertes Menü",
- "APPLICATION V2 NON INTALLÉE": "ANWENDUNG V2 NICHT INSTALLIERT",
- "Utilisateur non trouvé": "Benutzer nicht gefunden",
- "Configuration Menu Enregistrée": "Gespeicherte Menükonfiguration"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 – Unbefugter Zugriff"
},
@@ -194,25 +35,18 @@
"Configuration": "Konfiguration",
"Gestion Mobiles": "Mobiles Management",
"QR Code": "QR-Code",
- "Sauvegardes Menu Custom Mobile": "Backups-Menü, benutzerdefiniert, mobil",
- "Documentation APP": "APP-Dokumentation",
"Mes Téléphones Mobiles": "Meine Handys",
"Rechercher": "Suchen nach",
"Équipement visible": "Sichtbare Ausrüstung",
"Équipement non visible": "Ausrüstung nicht sichtbar",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Um ein Telefon hinzuzufügen, gibt es zwei Möglichkeiten:",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Auf dem ersten Bildschirm der Anwendung werden Sie aufgefordert, Ihr Marktkonto zu verbinden und so alle mit diesem Konto verknüpften Boxen zu finden, oder einfach eine Box hinzuzufügen",
"App V1": "Anwendung V1",
- "Ajouter": "Hinzufügen",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Artikel\/Teile",
- "Scénarios": "Szenarien",
- "Régénérer la configuration": "Konfiguration neu generieren",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Bitte beachten Sie, dass es in der Betaversion nicht mehr möglich ist, die APP V1 zu verwenden",
"Configuration avancée": "Erweiterte Konfiguration",
- "Infos envoyées à l'app": "Info an die App gesendet",
"Sauvegarder": "Speichern",
"Supprimer": "Löschen",
"Mobile": "Handy",
- "Notifications": "Benachrichtigungen",
- "Sauvegarde Mobile": "Mobile Backup",
"Commandes": "Befehle",
"Paramètres généraux": "Allgemeine Einstellungen",
"Nom de l'équipement": "Ausrüstungsname",
@@ -223,33 +57,21 @@
"Activer": "Aktivieren",
"Visible": "Sichtbar",
"Paramètres spécifiques": "Spezifische Einstellungen",
+ "Verrouiller le menu géolocalisation": "Geolokalisierungsmenü sperren",
+ "Verrouiller le menu custom": "Benutzerdefiniertes Menü sperren",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Information",
"Type de Mobile": "Mobiler Typ",
- "iPhone": "iphone",
- "Android": "Androide",
- "Windows (non officiel)": "Windows (inoffiziell)",
"Utilisateur": "Benutzer",
- "QRCode": "QR-Code",
- "Id Mobile": "IdMobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "RNA",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobil",
- "TOKEN": "ZEICHEN",
- "ARN pour Monitoring": "ARN zur Überwachung",
- "Copier pour Monitoring": "Kopie zur Überwachung",
- "Sauvegarde": "Sicherung",
- "Sauvegarde Dashboard": "Dashboard-Sicherung",
- "Vérification en Cours": "Überprüfung läuft",
- "Sauvegarde Favoris": "Favoriten speichern",
"Nom": "Name",
"Type": "Typ",
"Valeur": "Wert",
"Actions": "Aktionen"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 – Unbefugter Zugriff",
- "Pas de configuration sur ce plugin": "Keine Konfiguration für dieses Plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 – Unbefugter Zugriff",
"ERREUR SUR LA COMMANDE": "BESTELLFEHLER"
@@ -262,21 +84,9 @@
"Température": "Temperatur"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Kompatible Plugins – Anwendung V1",
- "Objets \/ Pièces - Application V1": "Objekte \/ Teile - Anwendung V1",
- "Scénarios - Application V1": "Szenarien – Anwendung V1",
"Informations envoyées à l'app": "Informationen an die App gesendet",
"Gestion des Mobiles": "Mobiles Management",
"QrCode": "QR-Code",
- "Bien demarrer": "Einen guten Start hinlegen",
- "Scénarios - Application V1": "Szenarien – Anwendung V1",
- "Menu Custom": "Benutzerdefiniertes Menü",
- "Configuration Mobile de la Pièce - Application V1": "Mobile Raumkonfiguration – Anwendung V1",
- "Menus enregistrés": "Gespeicherte Menüs",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Kein interner Adressfehler (siehe Konfiguration Ihres Jeedom!)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Kein externer Adressfehler (siehe Konfiguration Ihres Jeedom!)",
- "Erreur pas d'utilisateur selectionné": "Fehler: Kein Benutzer ausgewählt",
- "Configuration mise à jour": "Aktualisierte Konfiguration",
"Nom de la commande": "Befehlsname",
"Choisir une icône": "Wählen Sie ein Symbol",
"Afficher": "Anzeige",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff",
"Equipement non trouvé : ": "Ausrüstung nicht gefunden:",
"User inexistant : ": "Nicht vorhandener Benutzer:",
- "scenario non trouvé": "Szenario nicht gefunden",
"Aucune methode correspondante à : ": "Keine Methode entsprechend:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Die Kontingente für fcm sind überschritten. Es sind maximal 5 Anfragen pro Minute zulässig",
"Echec de l\\'envoi de la notification :": "Benachrichtigung konnte nicht gesendet werden:",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Benachrichtigung konnte nicht gesendet werden: Version 1 der App wird nicht mehr unterstützt!",
+ "Batterie du téléphone": "Telefonbatterie",
+ "En charge": "Verantwortlich",
+ "Coordonnées": "Kontaktdaten",
"Notification": "Benachrichtigung",
- "Notification Critique": "Kritische Benachrichtigung"
+ "Notification Critique": "Kritische Benachrichtigung",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Telefoninformationen wiederherstellen",
+ "Supprimer les Notifications": "Benachrichtigungen löschen",
+ "Supprimer toutes les Notifications": "Alle Benachrichtigungen löschen",
+ "Supprimer les Asks expirés": "Abgelaufene Anfragen löschen",
+ "Supprimer les Asks répondus": "Beantwortete Fragen löschen"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Farbe des Wertindikators",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC-Objekt nicht definiert",
"EqLogic inconnu : ": "Unbekanntes EqLogic:",
"Cmd inconnu : ": "Unbekannter Befehl:",
- "pas d\\'id : ": "keine ID:",
- "pas de parametre de geofencing : ": "kein Geofencing-Parameter:",
- "Aucune demande": "Keine Anfrage"
+ "| [ERROR] EqLogic inconnu : ": "| [FEHLER] Unbekannte EqLogic:",
+ "| Pas de paramètre de geofencing": "| Keine Geofencing-Einstellungen",
+ "| [ERROR] Paramètre Iq inexistant !": "| [FEHLER] Iq-Parameter existiert nicht!",
+ "Aucune demande": "Keine Anfrage",
+ "Aucun": "Keiner"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Achtung: Die v1-App ist nicht mit dem neuesten Android kompatibel. Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es im lokalen WLAN oder im 3G\/4G-Netzwerk Ihres Betreibers.
Die App verbindet sich automatisch mit Ihrem Jeedom mit automatischer Initialisierung per QR-Code, eine Konfiguration ist nicht erforderlich. (Möglichkeit, dies manuell zu tun)
Auf Ihrem Handy finden Sie alle Funktionen Ihres Jeedom.
Sie können Ihre Anwendung mit Verknüpfungen und mehr anpassen ...
Aktuelle Funktionen:
- Verwaltung Ihrer Szenarien.
- Verwaltung Ihrer Hausautomation entsprechend Ihren Räumen und Ihrer Ausstattung.
- Umschalten und automatische Statusrückgabe
- Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw.
- Anpassbare Benutzeroberfläche mit Verknüpfungen.
- Allgemeine Zusammenfassung der Hausautomation und nach Raum
- Benachrichtigungen (mit ASK-Unterstützung)
- Anzeige von Designs
Weitere Funktionen und Kompatibilitäten folgen in zukünftigen Updates!
Privatsphäre.
Auf unseren Servern werden keine Daten (hausautomatische oder persönliche) gespeichert oder gespeichert"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Bitte beachten Sie: Die BETA-Version unterstützt die V1-App nicht mehr, sie ist für die neue V2-App (derzeit Beta) reserviert. Erfordert mindestens Android14 oder IOS 12.4.
Bitte beachten Sie, dass die v1-App nicht mit dem neuesten Android kompatibel ist. Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es über lokales WLAN oder über das 3G\/4G-Netzwerk Ihres Betreibers.
Die App verbindet sich automatisch mit Ihrem Jeedom mit automatischer Initialisierung per QR-Code, eine Konfiguration ist nicht erforderlich. (Möglichkeit, dies manuell zu tun)
Sie finden alle Funktionen Ihres Jeedom auf Ihrem Handy.
Sie können Ihre Anwendung mit Verknüpfungen und mehr personalisieren ...
Aktuelle Funktionen:
- Verwaltung Ihrer Szenarien.
- Verwaltung Ihrer Hausautomation entsprechend Ihren Räumen und Ihrer Ausstattung.
- Automatische Statusverschiebung und -rückkehr
- Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw.
- Anpassbare Benutzeroberfläche mit Verknüpfungen.
- Allgemeine Zusammenfassung der Hausautomation und nach Raum
- Benachrichtigungen (mit ASK-Unterstützung)
- Anzeige von Designs
Weitere Funktionen und Kompatibilität folgen in zukünftigen Updates!
Respekt vor der Privatsphäre.
Auf unseren Servern werden keine Daten (hausautomatische oder persönliche) gespeichert oder aufbewahrt"
}
}
\ No newline at end of file
diff --git a/core/i18n/en_US.json b/core/i18n/en_US.json
index 1c1c0d0d..23fa9133 100755
--- a/core/i18n/en_US.json
+++ b/core/i18n/en_US.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "App notifications",
"Réponse Ask sensible à la case : ": "Ask answer sensitive to the box:"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Les Pièces - Application V1": "Parts - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Équipement": "Device",
- "Type de Mobile": "Mobile Type",
- "Utilisateur": "User",
- "Dernière activité": "Last activity",
- "Date création": "Creation Date",
- "Utilisateur non trouvé": "User not found"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "COMPTE MARKET": "MARKET ACCOUNT",
- "BOX ID": "BOX-ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "All you have to do is enter your Market ID and password",
- "Plusieurs choix sur cet écran :": "Several choices on this screen:",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- You enter the url of your Jeedom (internal or external), as well as the access identifiers to it and you confirm with the LOGIN button",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- You click on QR Code: a new screen appears; you can scan a QRCode from the Mobile plugin of the box you want to add, via the QRCODE tab of the plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Unauthorized Access",
"Équipement": "Equipment",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "User not found",
"Configuration Menu Enregistrée": "Saved Menu Configuration"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Plugins Spéciaux Compatibles": "Compatible Special Plugins",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Available in the list of plugins and integrated into the Dashboard of the Mobile App",
- "Plugins Validés Type générique": "Validated plugins Generic type",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visible in the app, may require a generic type, may be disabled",
- "Plugins compatibles non transmis": "Compatible plugins not transmitted",
- "Ne sont pas transmis à l’App Mobile.": "Are not transmitted to the Mobile App",
- "Plugins non testés transmis à l'application": "Untested plugins transmitted to the application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Are transmitted to the Mobile App based on generic types",
- "Plugins non testés et non transmis": "Plugins not tested and not transmitted",
- "Ne sont pas transmis à l’App Mobile": "Are not transmitted to the Mobile App"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Fonctionnement de la Géolocalisation": "How Geolocation works",
- "On ajoute une zone de Géolocalisation": "We add a Geolocation zone",
- "On recherche l'adresse, on nomme la Zone, et on valide": "We search for the address, name the Zone, and validate",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "The zone will appear in red, meaning that you are not in the Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "If you are in the area when it is created, it will turn green after a few seconds",
- "Modifier largueur de la zone": "Change zone width",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Adding a zone will add a binary command to your telephone equipment in the Mobile plugin, which we can use to program actions based on its state"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "ADDING THE BOX TO YOUR MOBILE APP",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "You can choose a user: a QRCode will be generated. You can then scan the QRCode from the new application, and thus add this box to your application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error No external address (see configuration of your Jeedom!)",
"Erreur Pas d\\'utilisateur selectionné": "Error No user selected"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Personnalisation du Menu": "Menu Customization",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "You can customize the Menu of your WebView via the Mobile plugin or the application",
- "On clique sur Menu Custom": "We click on Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "A modal opens and offers you your phones already connected",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Click on Configure Menu on the chosen phone",
- "Le nombre d'icônes peut aller de 1 à 4": "The number of icons can range from 1 to 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "By checking Menu Default, the menu configured on this phone becomes the default on all your phones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via the Mobile application: if you have configured a default box, then the Custom Menu appears in the application menu",
- "Même principe que via le plugin Mobile": "Same principle as via the Mobile plugin"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "To connect your phone: there are 2 possible methods"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Unauthorized access",
- "Pause": "Pause",
- "Rechercher": "Search"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Envoi auprès de l'app mobile": "Sending to the mobile app",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "This plugin is fully compatible, it requires no action on your part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "This plugin is compatible, remember to check the Generic Types on the commands",
- "Activer": "Activate",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "The Plugin is not compatible, you can activate it if you wish",
- "Type Générique du Plugin": "Generic Plugin Type",
- "Sauvegarder": "Save",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Name of the order",
- "Type Générique": "Type generic",
- "Icône": "Icon",
- "Aucun": "None",
- " . $info['family'] . ": "$ info ['family']",
- "Plugins compatibles": "Compatible plugins",
- "Modifications sauvegardées avec succès": "Changes successfully saved",
- "Sauvegarde effectuée": "Backup completed"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Unauthorized access",
- "Scénarios": "Scenarios",
- "Sauvegarder": "Save",
- "ID": "Id",
- "Scénario": "Scenario",
- "Transmis": "Transmitted",
- "Actions": "Actions",
- "Envoyer à l\\'application": "Send to application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Envoyer cette pièce vers l\\'application": "Send this part to the application",
- "Activer": "Activate",
- "Type Générique de cet objet": "Generic type of this object",
- "Sauvegarder": "Save",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Name of the order",
- "Type Générique": "Type generic",
- "Icône": "Icon",
- "Aucun": "None",
- " . $info['family'] . ": "$ info ['family']",
- "Objets \/ Pièces": "Objects \/ Pieces",
- "Modifications sauvegardées avec succès": "Changes successfully saved",
- "Sauvegarde effectuée avec succès": "Successfully saved"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "JSON valide": "Valid json",
- "Objets \/ Pièces": "Objects \/ Pieces",
- "Modules": "Modules",
- "Commandes": "Commands",
- "Scénarios": "Scenarios",
- "Messages": "Posts",
- "Designs": "Designs",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Fonctionnement de la Géolocalisation": "How Geolocation works",
- "On ajoute une zone de Géolocalisation": "We add a Geolocation zone",
- "On recherche l'adresse, on nomme la Zone, et on valide": "We search for the address, name the Zone, and validate",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "The zone will appear in red, meaning that you are not in the Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "If you are in the area when it is created, it will turn green after a few seconds",
- "Modifier largueur de la zone": "Change zone width",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Adding a zone will add a binary command to your telephone equipment in the Mobile plugin, which you can use to program actions based on its state"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "To access features such as Notifications, Menu Personalization or Geolocation, you must first have selected at least one current box",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "To do this, in the Boxes tab, you must select a box and identify yourself",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Once the identifiers have been entered, the box moves to the top of the list",
- "Si elle répond au ping, elle a un voyant vert": "If it responds to the ping, it has a green light",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "You can click on Synchronize to update the status of the boxes",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "To access all the features, you must click on the configured box; this will allow the application to retrieve its information, and therefore authorize the menu displays",
- "Menu Complet": "Full Menu"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Équipement": "Equipment",
- "Type de Mobile": "Mobile Type",
- "Utilisateur": "User",
- "Menu Enregistrés": "Menu Saved",
- "Aucun menu enregistré": "No saved menu",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NOT INSTALLED",
- "Utilisateur non trouvé": "User not found",
- "Configuration Menu Enregistrée": "Saved Menu Configuration"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Unauthorized Access"
},
@@ -194,25 +35,18 @@
"Configuration": "Setup",
"Gestion Mobiles": "Mobile Management",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Backups Menu Custom Mobile",
- "Documentation APP": "APP Documentation",
"Mes Téléphones Mobiles": "My Mobile Phones",
"Rechercher": "Search",
"Équipement visible": "Visible equipment",
"Équipement non visible": "Equipment not visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "To add a phone, there are 2 possible methods:",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "On the first screen of the application, you are offered to connect your market account, and thus find all the boxes associated with this account, or simply add a box",
"App V1": "App V1",
- "Ajouter": "Add",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Items\/Parts",
- "Scénarios": "Scenarios",
- "Régénérer la configuration": "Regenerate configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Please note, in beta it is no longer possible to use APP V1",
"Configuration avancée": "Advanced configuration",
- "Infos envoyées à l'app": "Info sent to the app",
"Sauvegarder": "Save",
"Supprimer": "Delete",
"Mobile": "Mobile",
- "Notifications": "Notifications",
- "Sauvegarde Mobile": "Mobile Backup",
"Commandes": "Commands",
"Paramètres généraux": "General settings",
"Nom de l'équipement": "Equipment Name",
@@ -223,33 +57,21 @@
"Activer": "Activate",
"Visible": "Visible",
"Paramètres spécifiques": "Specific settings",
+ "Verrouiller le menu géolocalisation": "Lock the geolocation menu",
+ "Verrouiller le menu custom": "Lock the custom menu",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Information",
"Type de Mobile": "Mobile Type",
- "iPhone": "iphone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (unofficial)",
"Utilisateur": "User",
- "QRCode": "QRCode",
- "Id Mobile": "IdMobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "RNA",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN for Monitoring",
- "Copier pour Monitoring": "Copy for Monitoring",
- "Sauvegarde": "Backup",
- "Sauvegarde Dashboard": "Dashboard Backup",
- "Vérification en Cours": "Verification in progress",
- "Sauvegarde Favoris": "Save Favorites",
"Nom": "Name",
"Type": "Type",
"Valeur": "Value",
"Actions": "Shares"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Unauthorized Access",
- "Pas de configuration sur ce plugin": "No configuration on this plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Unauthorized Access",
"ERREUR SUR LA COMMANDE": "ORDER ERROR"
@@ -262,21 +84,9 @@
"Température": "Temperature"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Compatible plugins - Application V1",
- "Objets \/ Pièces - Application V1": "Objects \/ Parts - Application V1",
- "Scénarios - Application V1": "Scenarios - Application V1",
"Informations envoyées à l'app": "Information sent to the app",
"Gestion des Mobiles": "Mobile Management",
"QrCode": "QrCode",
- "Bien demarrer": "Get off to a good start",
- "Scénarios - Application V1": "Scenarios - Application V1",
- "Menu Custom": "Custom menu",
- "Configuration Mobile de la Pièce - Application V1": "Mobile Room Configuration - Application V1",
- "Menus enregistrés": "Saved menus",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "No internal address error (see configuration of your Jeedom!)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "No external address error (see configuration of your Jeedom!)",
- "Erreur pas d'utilisateur selectionné": "Error no user selected",
- "Configuration mise à jour": "Updated configuration",
"Nom de la commande": "Command name",
"Choisir une icône": "Choose an icon",
"Afficher": "Display",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Unauthorized access",
"Equipement non trouvé : ": "Equipment not found:",
"User inexistant : ": "Non-existent user:",
- "scenario non trouvé": "scenario not found",
"Aucune methode correspondante à : ": "No method corresponding to:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Quotas for fcm are exceeded. The maximum allowed is 5 requests per minute",
"Echec de l\\'envoi de la notification :": "Failed to send notification:",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Failed to send notification: App version 1 is no longer supported!",
+ "Batterie du téléphone": "Phone battery",
+ "En charge": "In charge",
+ "Coordonnées": "Contact details",
"Notification": "Notification",
- "Notification Critique": "Critical Notification"
+ "Notification Critique": "Critical Notification",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Retrieve phone information",
+ "Supprimer les Notifications": "Delete Notifications",
+ "Supprimer toutes les Notifications": "Delete All Notifications",
+ "Supprimer les Asks expirés": "Delete Expired Asks",
+ "Supprimer les Asks répondus": "Delete answered Asks"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Value indicator color",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "Unknown EqLogic:",
"Cmd inconnu : ": "Unknown Cmd:",
- "pas d\\'id : ": "no id:",
- "pas de parametre de geofencing : ": "no geofencing parameter:",
- "Aucune demande": "No request"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] Unknown EqLogic:",
+ "| Pas de paramètre de geofencing": "| No geofencing settings",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Iq parameter does not exist!",
+ "Aucune demande": "No request",
+ "Aucun": "None"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion the v1 app is not compatible with the latest Android. The official Jeedom application allows you to control your Jeedom home automation system, whether in local Wifi, or on your operator's 3G\/4G network.
The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually)
You will find on your mobile all the features of your Jeedom.
You will be able to customize your application with shortcuts and more...
Current features:
- Management of your scenarios.
- Management of your home automation according to your rooms and equipment.
- Shift and automatic status return
- Compatibility with plugins, such as thermostat, alarm, camera etc...
- Customizable interface with shortcuts.
- General home automation summary and by room
- Notifications (with ASK support)
- Display of Designs
More features and compatibilities are coming in future updates!
Privacy.
No data (home automation or personal) is stored or kept on our servers"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Warning: the BETA version no longer supports the V1 app, it is reserved for the new V2 app (currently beta). Requires Android14 or IOS 12.4 minimum.
Please note that the v1 app is not compatible with the latest Android. The official Jeedom application allows you to control your Jeedom home automation system, whether in local WiFi, or on your operator's 3G\/4G network.
The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually)
You will find all the features of your Jeedom on your mobile.
You will be able to customize your application with shortcuts and more...
Current features:
- Management of your scenarios.
- Management of your home automation based on your rooms and equipment.
- Automatic shift and return to state
- Compatibility with plugins, such as thermostat, alarm, camera etc...
- Customizable interface with shortcuts.
- General and room-by-room home automation summary
- Notifications (with ASK support)
- Displaying Designs
More features and compatibilities are coming in future updates!
Respect for privacy.
No data (home automation or personal) is stored or kept on our servers"
}
}
\ No newline at end of file
diff --git a/core/i18n/es_ES.json b/core/i18n/es_ES.json
index 838aa4ae..15941bda 100755
--- a/core/i18n/es_ES.json
+++ b/core/i18n/es_ES.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notificaciones de aplicaciones",
"Réponse Ask sensible à la case : ": "Pregunta respuesta sensible a la caja:"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Les Pièces - Application V1": "Piezas - Aplicación V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Équipement": "Dispositivos",
- "Type de Mobile": "Tipo de móvil",
- "Utilisateur": "Usuario",
- "Dernière activité": "Última actividad",
- "Date création": "Fecha de creación",
- "Utilisateur non trouvé": "Usuario no encontrado"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "COMPTE MARKET": "CUENTA DE MERCADO",
- "BOX ID": "BOX-ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Todo lo que tiene que hacer es ingresar su Market ID y contraseña",
- "Plusieurs choix sur cet écran :": "Varias opciones en esta pantalla:",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Ingresas la url de tu Jeedom (interna o externa), así como los identificadores de acceso a la misma y confirmas con el botón LOGIN",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Haces clic en Código QR: aparece una nueva pantalla; puede escanear un QRCode desde el complemento móvil del cuadro que desea agregar, a través de la pestaña QRCODE del complemento"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Acceso no autorizado",
"Équipement": "Equipo",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Usuario no encontrado",
"Configuration Menu Enregistrée": "Configuración del menú guardado"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Plugins Spéciaux Compatibles": "Complementos especiales compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponible en la lista de complementos e integrado en el Panel de la aplicación móvil",
- "Plugins Validés Type générique": "Complementos validados Tipo genérico",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visible en la aplicación, puede requerir un tipo genérico, puede estar deshabilitado",
- "Plugins compatibles non transmis": "Complementos compatibles no transmitidos",
- "Ne sont pas transmis à l’App Mobile.": "No se transmiten a la aplicación móvil",
- "Plugins non testés transmis à l'application": "Complementos no probados transmitidos a la aplicación",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Se transmiten a la aplicación móvil en base a tipos genéricos",
- "Plugins non testés et non transmis": "Complementos no probados y no transmitidos",
- "Ne sont pas transmis à l’App Mobile": "No se transmiten a la aplicación móvil"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Fonctionnement de la Géolocalisation": "Cómo funciona la geolocalización",
- "On ajoute une zone de Géolocalisation": "Agregamos una zona de Geolocalización",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Buscamos la dirección, nombramos la Zona y validamos",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zona aparecerá en rojo, lo que significa que no estás en la Zona",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si estás en el área cuando se crea, se volverá verde después de unos segundos",
- "Modifier largueur de la zone": "Cambiar ancho de zona",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Agregar una zona agregará un comando binario a tu equipo telefónico en el complemento Móvil, que podremos utilizar para programar acciones en función de su estado"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AGREGAR LA CAJA A SU APLICACIÓN MÓVIL",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Puedes elegir un usuario: se generará un QRCode. Luego podrás escanear el QRCode desde la nueva aplicación, y así agregar este cuadro a tu aplicación",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error Sin dirección externa (ver configuración de su Jeedom!)",
"Erreur Pas d\\'utilisateur selectionné": "Error Ningún usuario seleccionado"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Personnalisation du Menu": "Personalización del menú",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Puede personalizar el menú de su WebView a través del complemento móvil o la aplicación",
- "On clique sur Menu Custom": "Damos clic en Menú Personalizado",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Se abre un modal y te ofrece tus teléfonos ya conectados",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Haga clic en Configurar Menú en el teléfono elegido",
- "Le nombre d'icônes peut aller de 1 à 4": "El número de iconos puede variar de 1 a 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "Al marcar Menú predeterminado, el menú configurado en este teléfono se convierte en el predeterminado en todos sus teléfonos",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "A través de la aplicación móvil: si ha configurado un cuadro predeterminado, aparece el Menú personalizado en el menú de la aplicación",
- "Même principe que via le plugin Mobile": "Mismo principio que a través del complemento móvil"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Para conectar su teléfono: hay 2 métodos posibles"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Pause": "Pausa",
- "Rechercher": "Buscar"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Envoi auprès de l'app mobile": "Envío a la aplicación móvil",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Este complemento es totalmente compatible, no requiere ninguna acción por su parte",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Este complemento es compatible, recuerde verificar los tipos genéricos en los comandos",
- "Activer": "Activar",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "El Plugin no es compatible, puedes activarlo si lo deseas",
- "Type Générique du Plugin": "Tipo de complemento genérico",
- "Sauvegarder": "Guardar",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nombre de la orden",
- "Type Générique": "Tipo genérico",
- "Icône": "Icono",
- "Aucun": "Ninguna",
- " . $info['family'] . ": "$ info ['familia']",
- "Plugins compatibles": "Complementos compatibles",
- "Modifications sauvegardées avec succès": "Cambios guardados exitosamente",
- "Sauvegarde effectuée": "Guardado correctamente"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Scénarios": "Escenarios",
- "Sauvegarder": "Guardar",
- "ID": "Identificación",
- "Scénario": "Escenario",
- "Transmis": "Transmitido",
- "Actions": "Acciones",
- "Envoyer à l\\'application": "Enviar a la solicitud"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Envoyer cette pièce vers l\\'application": "Enviar esta parte a la aplicación",
- "Activer": "Activar",
- "Type Générique de cet objet": "Tipo genérico de este objeto",
- "Sauvegarder": "Guardar",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nombre de la orden",
- "Type Générique": "Tipo genérico",
- "Icône": "Icono",
- "Aucun": "Ninguna",
- " . $info['family'] . ": "$ info ['familia']",
- "Objets \/ Pièces": "Objetos \/ Piezas",
- "Modifications sauvegardées avec succès": "Cambios guardados exitosamente",
- "Sauvegarde effectuée avec succès": "Guardado correctamente"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "JSON valide": "Json válido",
- "Objets \/ Pièces": "Objetos \/ Piezas",
- "Modules": "Módulos",
- "Commandes": "Comandos",
- "Scénarios": "Escenarios",
- "Messages": "Mensajes",
- "Designs": "Diseños",
- "Configurations": "Configuraciones"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Fonctionnement de la Géolocalisation": "Cómo funciona la geolocalización",
- "On ajoute une zone de Géolocalisation": "Agregamos una zona de Geolocalización",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Buscamos la dirección, nombramos la Zona y validamos",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zona aparecerá en rojo, lo que significa que no estás en la Zona",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si estás en el área cuando se crea, se volverá verde después de unos segundos",
- "Modifier largueur de la zone": "Cambiar ancho de zona",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Agregar una zona agregará un comando binario a su equipo telefónico en el complemento Móvil, que puede usar para programar acciones según su estado"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Para acceder a funciones como Notificaciones, Personalización de Menú o Geolocalización, primero debes haber seleccionado al menos una casilla actual",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Para ello, en la pestaña Casillas, deberás seleccionar una casilla e identificarte",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Una vez que se han ingresado los identificadores, el cuadro se mueve a la parte superior de la lista",
- "Si elle répond au ping, elle a un voyant vert": "Si responde al ping tiene luz verde",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "Puede hacer clic en Sincronizar para actualizar el estado de las casillas",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Para acceder a todas las funciones, debe hacer clic en la casilla configurada; esto permitirá que la aplicación recupere su información y, por lo tanto, autorizará la visualización del menú",
- "Menu Complet": "Menú completo"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Équipement": "Equipo",
- "Type de Mobile": "Tipo de móvil",
- "Utilisateur": "Usuario",
- "Menu Enregistrés": "Menú guardado",
- "Aucun menu enregistré": "No hay menú guardado",
- "APPLICATION V2 NON INTALLÉE": "APLICACIÓN V2 NO INSTALADA",
- "Utilisateur non trouvé": "Usuario no encontrado",
- "Configuration Menu Enregistrée": "Configuración del menú guardado"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Acceso no autorizado"
},
@@ -194,25 +35,18 @@
"Configuration": "Configuración",
"Gestion Mobiles": "Gestión Móvil",
"QR Code": "Código QR",
- "Sauvegardes Menu Custom Mobile": "Menú de copias de seguridad Móvil personalizado",
- "Documentation APP": "Documentación de la aplicación",
"Mes Téléphones Mobiles": "Mis teléfonos móviles",
"Rechercher": "Buscar",
"Équipement visible": "Equipos visibles",
"Équipement non visible": "Equipo no visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Para agregar un teléfono, existen 2 métodos posibles:",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "En la primera pantalla de la aplicación, se le solicita que conecte su cuenta de mercado, y así encontrar todas las casillas asociadas a esta cuenta, o simplemente agregar una casilla",
"App V1": "Aplicación V1",
- "Ajouter": "Añadir",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Artículos\/Piezas",
- "Scénarios": "Escenarios",
- "Régénérer la configuration": "Regenerar configuración",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Tenga en cuenta que en versión beta ya no es posible utilizar la APLICACIÓN V1",
"Configuration avancée": "Configuración avanzada",
- "Infos envoyées à l'app": "Información enviada a la aplicación",
"Sauvegarder": "Guardar",
"Supprimer": "Borrar",
"Mobile": "Móvil",
- "Notifications": "Notificaciones",
- "Sauvegarde Mobile": "Copia de seguridad móvil",
"Commandes": "Comandos",
"Paramètres généraux": "Configuración general",
"Nom de l'équipement": "Nombre del equipo",
@@ -223,33 +57,21 @@
"Activer": "Activar",
"Visible": "Visible",
"Paramètres spécifiques": "Configuraciones específicas",
+ "Verrouiller le menu géolocalisation": "Bloquear menú de geolocalización",
+ "Verrouiller le menu custom": "Bloquear menú personalizado",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Información",
"Type de Mobile": "Tipo de móvil",
- "iPhone": "IPhone",
- "Android": "Androide",
- "Windows (non officiel)": "Windows (no oficial)",
"Utilisateur": "Usuario",
- "QRCode": "Código QR",
- "Id Mobile": "IDMobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Móvil",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Móvil",
"TOKEN Mobile": "TOKEN Móvil",
- "TOKEN": "SIMBÓLICO",
- "ARN pour Monitoring": "ARN para monitoreo",
- "Copier pour Monitoring": "Copia para monitoreo",
- "Sauvegarde": "Respaldo",
- "Sauvegarde Dashboard": "Copia de seguridad del panel",
- "Vérification en Cours": "Verificación en progreso",
- "Sauvegarde Favoris": "Guardar favoritos",
"Nom": "Nombre",
"Type": "Tipo",
"Valeur": "Valor",
"Actions": "Comportamiento"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Acceso no autorizado",
- "Pas de configuration sur ce plugin": "No hay configuración en este complemento"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Acceso no autorizado",
"ERREUR SUR LA COMMANDE": "ERROR DE ORDEN"
@@ -262,21 +84,9 @@
"Température": "Temperatura"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Complementos compatibles: Aplicación V1",
- "Objets \/ Pièces - Application V1": "Objetos \/ Piezas - Aplicación V1",
- "Scénarios - Application V1": "Escenarios - Aplicación V1",
"Informations envoyées à l'app": "Información enviada a la aplicación",
"Gestion des Mobiles": "Gestión Móvil",
"QrCode": "Código QR",
- "Bien demarrer": "Empezar bien",
- "Scénarios - Application V1": "Escenarios - Aplicación V1",
- "Menu Custom": "Menú personalizado",
- "Configuration Mobile de la Pièce - Application V1": "Configuración de sala móvil: aplicación V1",
- "Menus enregistrés": "Menús guardados",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "No hay error de dirección interna (¡consulte la configuración de su Jeedom!)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Sin error de dirección externa (¡consulte la configuración de su Jeedom!)",
- "Erreur pas d'utilisateur selectionné": "Error ningún usuario seleccionado",
- "Configuration mise à jour": "Configuración actualizada",
"Nom de la commande": "Nombre del comando",
"Choisir une icône": "Elige un icono",
"Afficher": "Mostrar",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Acceso no autorizado",
"Equipement non trouvé : ": "Equipo no encontrado:",
"User inexistant : ": "Usuario inexistente:",
- "scenario non trouvé": "escenario no encontrado",
"Aucune methode correspondante à : ": "Ningún método correspondiente a:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Se superan las cuotas de fcm. El máximo permitido es 5 solicitudes por minuto",
"Echec de l\\'envoi de la notification :": "Error al enviar la notificación:",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-'. $geoloc['nombre']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "No se pudo enviar la notificación: ¡la versión 1 de la aplicación ya no es compatible!",
+ "Batterie du téléphone": "Batería del teléfono",
+ "En charge": "Encargado",
+ "Coordonnées": "Detalles de contacto",
"Notification": "Notificación",
- "Notification Critique": "Notificación crítica"
+ "Notification Critique": "Notificación crítica",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Recuperar información del teléfono",
+ "Supprimer les Notifications": "Eliminar notificaciones",
+ "Supprimer toutes les Notifications": "Eliminar todas las notificaciones",
+ "Supprimer les Asks expirés": "Eliminar preguntas caducadas",
+ "Supprimer les Asks répondus": "Eliminar preguntas respondidas"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Color del indicador de valor",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "Objeto JSONRPC no definido",
"EqLogic inconnu : ": "EqLogic desconocido:",
"Cmd inconnu : ": "Cmd desconocido:",
- "pas d\\'id : ": "sin identificación:",
- "pas de parametre de geofencing : ": "sin parámetro de geocerca:",
- "Aucune demande": "Ninguna solicitud"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic desconocido:",
+ "| Pas de paramètre de geofencing": "| Sin configuración de geocercas",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] ¡El parámetro Iq no existe!",
+ "Aucune demande": "Ninguna solicitud",
+ "Aucun": "Ninguno"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion, la aplicación v1 no es compatible con la última versión de Android. La aplicación oficial Jeedom le permite controlar su sistema domótico Jeedom, ya sea en Wifi local o en la red 3G\/4G de su operador.
La aplicación se conecta automáticamente a su Jeedom con inicialización automática por código QR, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente)
Encontrará en su móvil todas las características de su Jeedom.
Podrás personalizar tu aplicación con accesos directos y más...
Características actuales:
- Gestión de sus escenarios.
- Gestión de la domótica de tu hogar según tus estancias y equipamientos.
- Turno y retorno de estado automático
- Compatibilidad con complementos, como termostato, alarma, cámara, etc.
- Interfaz personalizable con accesos directos.
- Resumen domótica general y por estancias
- Notificaciones (con soporte ASK)
- Exhibición de Diseños
¡Más características y compatibilidades vendrán en futuras actualizaciones!
Privacidad.
Ningún dato (domótico o personal) es almacenado o guardado en nuestros servidores"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Tenga en cuenta: la versión BETA ya no es compatible con la aplicación V1, está reservada para la nueva aplicación V2 (actualmente beta). Requiere Android14 o IOS 12.4 mínimo.
Tenga en cuenta que la aplicación v1 no es compatible con la última versión de Android. La aplicación oficial Jeedom te permite controlar tu sistema domótico Jeedom, ya sea a través de WiFi local o en la red 3G\/4G de tu operador.
La aplicación se conecta automáticamente a tu Jeedom con inicialización automática mediante código QR, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente)
Encontrarás todas las funciones de tu Jeedom en tu móvil.
Podrás personalizar tu aplicación con atajos y más...
Características actuales:
- Gestión de tus escenarios.
- Gestión de tu domótica en función de tus estancias y equipamientos.
- Cambio y retorno automático de estado.
- Compatibilidad con complementos, como termostato, alarma, cámara, etc...
- Interfaz personalizable con atajos.
- Resumen general de domótica y por estancias
- Notificaciones (con soporte ASK)
- Exhibición de Diseños
¡Más funciones y compatibilidad estarán disponibles en futuras actualizaciones!
Respeto a la privacidad.
No se almacena ni retiene ningún dato (domótico o personal) en nuestros servidores"
}
}
\ No newline at end of file
diff --git a/core/i18n/fr_FR.json b/core/i18n/fr_FR.json
index dabee3ec..3afb5af9 100755
--- a/core/i18n/fr_FR.json
+++ b/core/i18n/fr_FR.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case : "
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin."
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile.",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques.",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état."
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pause": "Pause",
- "Rechercher": "Rechercher"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "Activer",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "Sauvegarder",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Type Générique",
- "Icône": "Icône",
- "Aucun": "Aucun",
- " . $info['family'] . ": " . $info['family'] . ",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée": "Sauvegarde effectuée"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Scénarios": "Scénarios",
- "Sauvegarder": "Sauvegarder",
- "ID": "ID",
- "Scénario": "Scénario",
- "Transmis": "Transmis",
- "Actions": "Actions",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "Activer",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "Sauvegarder",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Type Générique",
- "Icône": "Icône",
- "Aucun": "Aucun",
- " . $info['family'] . ": " . $info['family'] . ",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée avec succès": "Sauvegarde effectuée avec succès"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "Commandes",
- "Scénarios": "Scénarios",
- "Messages": "Messages",
- "Designs": "Designs",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état."
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste.",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "Configuration",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "Rechercher",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.",
"App V1": "App V1",
- "Ajouter": "Ajouter",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "Scénarios",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "Configuration avancée",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "Sauvegarder",
"Supprimer": "Supprimer",
"Mobile": "Mobile",
- "Notifications": "Notifications",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "Commandes",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "Activer",
"Visible": "Visible",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "Nom",
"Type": "Type",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Equipement non trouvé : ": "Equipement non trouvé : ",
"User inexistant : ": "User inexistant : ",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "Aucune methode correspondante à : "
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu : ",
"Cmd inconnu : ": "Cmd inconnu : ",
- "pas d\\'id : ": "pas d\\'id : ",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing : ",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu : ",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs."
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs."
}
}
\ No newline at end of file
diff --git a/core/i18n/id_ID.json b/core/i18n/id_ID.json
index 25fce231..6cbe1f5b 100755
--- a/core/i18n/id_ID.json
+++ b/core/i18n/id_ID.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case :"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Peralatan",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Akses tidak sah",
- "Pause": "Berhenti Sebentar",
- "Rechercher": "Pencarian"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "Mengaktifkan",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "Menyimpan",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Jenis generik",
- "Icône": "Icon",
- "Aucun": "Tak ada",
- " . $info['family'] . ": ". $info['family'] .",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée": "Backup dibuat"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Akses tidak sah",
- "Scénarios": "Skenario",
- "Sauvegarder": "Menyimpan",
- "ID": "ID",
- "Scénario": "Skenario",
- "Transmis": "Transmis",
- "Actions": "Tindakan",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "Mengaktifkan",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "Menyimpan",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Jenis generik",
- "Icône": "Icon",
- "Aucun": "Tak ada",
- " . $info['family'] . ": ". $info['family'] .",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée avec succès": "Cadangan selesai dengan sukses"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "Perintah",
- "Scénarios": "Skenario",
- "Messages": "Posting",
- "Designs": "Desain",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "Konfigurasi",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "Pencarian",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box",
"App V1": "App V1",
- "Ajouter": "Tambahan",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "Skenario",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "Konfigurasi lanjutan",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "Menyimpan",
"Supprimer": "Menghapus",
"Mobile": "Mobil",
- "Notifications": "Pemberitahuan",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "Perintah",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "Mengaktifkan",
"Visible": "Terlihat",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "Nama",
"Type": "Jenis",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Akses tidak sah",
"Equipement non trouvé : ": "Equipement non trouvé :",
"User inexistant : ": "User inexistant :",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "Aucune methode correspondante à :"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu :",
"Cmd inconnu : ": "Cmd inconnu :",
- "pas d\\'id : ": "pas d\\'id :",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing :",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu :",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
}
}
\ No newline at end of file
diff --git a/core/i18n/it_IT.json b/core/i18n/it_IT.json
index 9162cd52..266d335e 100755
--- a/core/i18n/it_IT.json
+++ b/core/i18n/it_IT.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case :"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Dispositivo",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Accesso non autorizzato",
- "Pause": "Pausa",
- "Rechercher": "Ricercare"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "Attivare",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "Salva",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Tipo generico",
- "Icône": "Icona",
- "Aucun": "Nessuno",
- " . $info['family'] . ": ". $info['family'] .",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée": "Backup completato"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Accesso non autorizzato",
- "Scénarios": "Scenari",
- "Sauvegarder": "Salva",
- "ID": "ID",
- "Scénario": "Scena",
- "Transmis": "Transmis",
- "Actions": "Stock",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "Attivare",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "Salva",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Tipo generico",
- "Icône": "Icona",
- "Aucun": "Nessuno",
- " . $info['family'] . ": ". $info['family'] .",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée avec succès": "Backup completato con successo"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "Comandi",
- "Scénarios": "Scenari",
- "Messages": "Messaggi",
- "Designs": "Disegni",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "Configurazione",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "Ricercare",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box",
"App V1": "App V1",
- "Ajouter": "Aggiungi",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "Scenari",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "Configurazione avanzata",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "Salva",
"Supprimer": "Rimuovere",
"Mobile": "Mobile",
- "Notifications": "Notifiche",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "Comandi",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "Attivare",
"Visible": "Visibile",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "Nome",
"Type": "Tipo",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Accesso non autorizzato",
"Equipement non trouvé : ": "Equipement non trouvé :",
"User inexistant : ": "User inexistant :",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "Nessun metodo corrispondente a:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu :",
"Cmd inconnu : ": "Cmd sconosciuto:",
- "pas d\\'id : ": "pas d\\'id :",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing :",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu :",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
}
}
\ No newline at end of file
diff --git a/core/i18n/ja_JP.json b/core/i18n/ja_JP.json
index 1aec4f30..db3eb6ca 100755
--- a/core/i18n/ja_JP.json
+++ b/core/i18n/ja_JP.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case :"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "設備",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401-不正アクセス",
- "Pause": "休止",
- "Rechercher": "検索"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "アクティブ",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "セーブ",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "ジェネリック型",
- "Icône": "アイコン",
- "Aucun": "何でもありません",
- " . $info['family'] . ": "。 $ info ['family']。",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "変更が保存されました",
- "Sauvegarde effectuée": "バックアップ完了"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401-不正アクセス",
- "Scénarios": "シナリオ",
- "Sauvegarder": "セーブ",
- "ID": "ID",
- "Scénario": "シナリオ",
- "Transmis": "Transmis",
- "Actions": "株式",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "アクティブ",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "セーブ",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "ジェネリック型",
- "Icône": "アイコン",
- "Aucun": "何でもありません",
- " . $info['family'] . ": "。 $ info ['family']。",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "変更が保存されました",
- "Sauvegarde effectuée avec succès": "バックアップが正常に完了"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "コマンド",
- "Scénarios": "シナリオ",
- "Messages": "投稿",
- "Designs": "デザイン",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "コンフィギュレーション",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "検索",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box",
"App V1": "App V1",
- "Ajouter": "加えます",
- "Plugins": "プラグイン",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "シナリオ",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "高度な構成",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "セーブ",
"Supprimer": "取り除きます",
"Mobile": "モバイル",
- "Notifications": "通知",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "コマンド",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "アクティブ",
"Visible": "目に見えます",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "表題",
"Type": "タイプ",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401-不正アクセス",
"Equipement non trouvé : ": "Equipement non trouvé :",
"User inexistant : ": "User inexistant :",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "以下に対応するメソッドはありません:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu :",
"Cmd inconnu : ": "不明なコマンド:",
- "pas d\\'id : ": "pas d\\'id :",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing :",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu :",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
}
}
\ No newline at end of file
diff --git a/core/i18n/pt_PT.json b/core/i18n/pt_PT.json
index 1978fe73..077607eb 100755
--- a/core/i18n/pt_PT.json
+++ b/core/i18n/pt_PT.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notificações de aplicativos",
"Réponse Ask sensible à la case : ": "Peça resposta sensível à caixa:"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Les Pièces - Application V1": "Peças - Aplicação V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Équipement": "Equipamento",
- "Type de Mobile": "Tipo de celular",
- "Utilisateur": "Do utilizador",
- "Dernière activité": "Ultima atividade",
- "Date création": "Data de criação",
- "Utilisateur non trouvé": "Usuário não encontrado"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "COMPTE MARKET": "CONTA DE MERCADO",
- "BOX ID": "BOX-ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Tudo o que você precisa fazer é inserir seu Market ID e senha",
- "Plusieurs choix sur cet écran :": "Várias opções nesta tela:",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Você insere a url do seu Jeedom (interno ou externo), bem como os identificadores de acesso a ele e confirma com o botão LOGIN",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Você clica em QR Code: uma nova tela aparece; você pode digitalizar um QRCode do plug-in Mobile da caixa que deseja adicionar, por meio da guia QRCODE do plug-in"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Acesso não autorizado",
"Équipement": "Equipamento",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Usuário não encontrado",
"Configuration Menu Enregistrée": "Configuração de menu salva"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Plugins Spéciaux Compatibles": "Plugins Especiais Compatíveis",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponível na lista de plug-ins e integrado ao Painel do aplicativo móvel",
- "Plugins Validés Type générique": "Plug-ins validados Tipo genérico",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visível no aplicativo, pode exigir um tipo genérico, pode estar desativado",
- "Plugins compatibles non transmis": "Plugins compatíveis não transmitidos",
- "Ne sont pas transmis à l’App Mobile.": "Não são transmitidos para o aplicativo móvel",
- "Plugins non testés transmis à l'application": "Plugins não testados transmitidos ao aplicativo",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "São transmitidos para o aplicativo móvel com base em tipos genéricos",
- "Plugins non testés et non transmis": "Plugins não testados e não transmitidos",
- "Ne sont pas transmis à l’App Mobile": "Não são transmitidos para o aplicativo móvel"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Fonctionnement de la Géolocalisation": "Como funciona a geolocalização",
- "On ajoute une zone de Géolocalisation": "Adicionamos uma zona de geolocalização",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Procuramos o endereço, nomeamos a Zona e validamos",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "A zona aparecerá em vermelho, significando que você não está na Zona",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Se você estiver na área quando ela for criada, ela ficará verde após alguns segundos",
- "Modifier largueur de la zone": "Alterar largura da zona",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Adicionar uma zona adicionará um comando binário ao seu equipamento telefônico no plugin Mobile, que podemos usar para programar ações com base em seu estado"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "ADICIONANDO A CAIXA AO SEU APLICATIVO MÓVEL",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Você pode escolher um usuário: um QRCode será gerado. Você pode então escanear o QRCode do novo aplicativo, e assim adicionar esta caixa ao seu aplicativo",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erro Sem endereço externo (veja a configuração do seu Jeedom!)",
"Erreur Pas d\\'utilisateur selectionné": "Erro Nenhum usuário selecionado"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Personnalisation du Menu": "Personalização do Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Você pode personalizar o Menu do seu WebView através do plugin Mobile ou do aplicativo",
- "On clique sur Menu Custom": "Clicamos em Menu Personalizado",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Um modal abre e oferece seus telefones já conectados",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Clique em Configurar Menu no telefone escolhido",
- "Le nombre d'icônes peut aller de 1 à 4": "O número de ícones pode variar de 1 a 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "Ao marcar Menu Padrão, o menu configurado neste telefone se torna o padrão em todos os seus telefones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Através do aplicativo Mobile: se você configurou uma caixa padrão, o Menu Personalizado aparece no menu do aplicativo",
- "Même principe que via le plugin Mobile": "O mesmo princípio do plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Para conectar seu telefone: existem 2 métodos possíveis"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Pause": "Pausa",
- "Rechercher": "Pesquisa"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Envoi auprès de l'app mobile": "Enviando para o aplicativo móvel",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Este plugin é totalmente compatível, não requer nenhuma ação de sua parte",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Este plugin é compatível, lembre-se de verificar os Tipos Genéricos nos comandos",
- "Activer": "Ativar",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "O Plugin não é compatível, você pode ativá-lo se desejar",
- "Type Générique du Plugin": "Tipo genérico de plug-in",
- "Sauvegarder": "Salvar",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nome do comando",
- "Type Générique": "Tipo genérico",
- "Icône": "ícone",
- "Aucun": "Nemhum",
- " . $info['family'] . ": "$ info ['família']",
- "Plugins compatibles": "Plugins compatíveis",
- "Modifications sauvegardées avec succès": "Alterações salvas com sucesso",
- "Sauvegarde effectuée": "Backup feito"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Scénarios": "Cenas",
- "Sauvegarder": "Salvar",
- "ID": "ID",
- "Scénario": "Cenas",
- "Transmis": "Transmitido",
- "Actions": "Estoque",
- "Envoyer à l\\'application": "Enviar para a aplicação"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Envoyer cette pièce vers l\\'application": "Envie esta parte para o aplicativo",
- "Activer": "Ativar",
- "Type Générique de cet objet": "Tipo genérico deste objeto",
- "Sauvegarder": "Salvar",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nome do comando",
- "Type Générique": "Tipo genérico",
- "Icône": "ícone",
- "Aucun": "Nemhum",
- " . $info['family'] . ": "$ info ['família']",
- "Objets \/ Pièces": "Objetos \/ Peças",
- "Modifications sauvegardées avec succès": "Alterações salvas com sucesso",
- "Sauvegarde effectuée avec succès": "Backup concluído com êxito"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "JSON valide": "Json válido",
- "Objets \/ Pièces": "Objetos \/ Peças",
- "Modules": "Módulos",
- "Commandes": "Comandos",
- "Scénarios": "Cenas",
- "Messages": "Mensagens",
- "Designs": "Projetos",
- "Configurations": "Configurações"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Fonctionnement de la Géolocalisation": "Como funciona a geolocalização",
- "On ajoute une zone de Géolocalisation": "Adicionamos uma zona de geolocalização",
- "On recherche l'adresse, on nomme la Zone, et on valide": "Procuramos o endereço, nomeamos a Zona e validamos",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "A zona aparecerá em vermelho, significando que você não está na Zona",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Se você estiver na área quando ela for criada, ela ficará verde após alguns segundos",
- "Modifier largueur de la zone": "Alterar largura da zona",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Adicionar uma zona adicionará um comando binário ao seu equipamento telefônico no plugin Mobile, que você pode usar para programar ações com base em seu estado"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Para acessar recursos como Notificações, Personalização de Menu ou Geolocalização, você deve primeiro ter selecionado pelo menos uma caixa atual",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Para isso, na aba Caixas, você deve selecionar uma caixa e se identificar",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Depois que os identificadores forem inseridos, a caixa passará para o topo da lista",
- "Si elle répond au ping, elle a un voyant vert": "Se responder ao ping, terá luz verde",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "Você pode clicar em Sincronizar para atualizar o status das caixas",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Para acessar todos os recursos, você deve clicar na caixa configurada; isso permitirá que o aplicativo recupere suas informações e, portanto, autorize a exibição do menu",
- "Menu Complet": "Menu completo"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Équipement": "Equipamento",
- "Type de Mobile": "Tipo de celular",
- "Utilisateur": "Do utilizador",
- "Menu Enregistrés": "Menu salvo",
- "Aucun menu enregistré": "Nenhum menu salvo",
- "APPLICATION V2 NON INTALLÉE": "APLICATIVO V2 NÃO INSTALADO",
- "Utilisateur non trouvé": "Usuário não encontrado",
- "Configuration Menu Enregistrée": "Configuração de menu salva"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Acesso não autorizado"
},
@@ -194,25 +35,18 @@
"Configuration": "Configuração",
"Gestion Mobiles": "Gerenciamento móvel",
"QR Code": "Código QR",
- "Sauvegardes Menu Custom Mobile": "Menu Backups Personalizado Móvel",
- "Documentation APP": "Documentação do APP",
"Mes Téléphones Mobiles": "Meus telefones móveis",
"Rechercher": "Pesquisa",
"Équipement visible": "Equipamento visível",
"Équipement non visible": "Equipamento não visível",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Para adicionar um telefone, existem 2 métodos possíveis:",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Na primeira tela do aplicativo, você será solicitado a conectar sua conta de mercado, e assim encontrar todas as caixas associadas a esta conta, ou simplesmente adicionar uma caixa",
"App V1": "Aplicativo V1",
- "Ajouter": "Adicionar",
- "Plugins": "Plugins",
- "Objets\/Pièces": "Itens\/peças",
- "Scénarios": "Cenas",
- "Régénérer la configuration": "Regenerar configuração",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Observe que em beta não é mais possível usar o APP V1",
"Configuration avancée": "Configuração avançada",
- "Infos envoyées à l'app": "Informações enviadas para o aplicativo",
"Sauvegarder": "Salvar",
"Supprimer": "Remover",
"Mobile": "Móvel",
- "Notifications": "Notificações",
- "Sauvegarde Mobile": "Backup móvel",
"Commandes": "Comandos",
"Paramètres généraux": "Configurações Gerais",
"Nom de l'équipement": "Nome do equipamento",
@@ -223,33 +57,21 @@
"Activer": "Ativar",
"Visible": "Visivél",
"Paramètres spécifiques": "Configurações específicas",
+ "Verrouiller le menu géolocalisation": "Bloquear menu de geolocalização",
+ "Verrouiller le menu custom": "Bloquear menu personalizado",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informação",
"Type de Mobile": "Tipo de celular",
- "iPhone": "Iphone",
- "Android": "Andróide",
- "Windows (non officiel)": "Windows (não oficial)",
"Utilisateur": "Do utilizador",
- "QRCode": "Código QR",
- "Id Mobile": "IdMobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN móvel",
- "ARN": "RNA",
+ "Iq Mobile": "QI Móvel",
"TOKEN Mobile": "TOKEN Móvel",
- "TOKEN": "SÍMBOLO",
- "ARN pour Monitoring": "ARN para Monitoramento",
- "Copier pour Monitoring": "Cópia para monitoramento",
- "Sauvegarde": "Cópia de segurança",
- "Sauvegarde Dashboard": "Backup do painel",
- "Vérification en Cours": "Verificação em andamento",
- "Sauvegarde Favoris": "Salvar Favoritos",
"Nom": "Nome",
"Type": "Tipo",
"Valeur": "Valor",
"Actions": "Ações"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Acesso não autorizado",
- "Pas de configuration sur ce plugin": "Nenhuma configuração neste plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Acesso não autorizado",
"ERREUR SUR LA COMMANDE": "ERRO DE ORDEM"
@@ -262,21 +84,9 @@
"Température": "Temperatura"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plug-ins compatíveis - Aplicativo V1",
- "Objets \/ Pièces - Application V1": "Objetos\/Peças - Aplicação V1",
- "Scénarios - Application V1": "Cenários - Aplicação V1",
"Informations envoyées à l'app": "Informações enviadas para o aplicativo",
"Gestion des Mobiles": "Gerenciamento móvel",
"QrCode": "Código QR",
- "Bien demarrer": "Comece bem",
- "Scénarios - Application V1": "Cenários - Aplicação V1",
- "Menu Custom": "Menu customizado",
- "Configuration Mobile de la Pièce - Application V1": "Configuração de Sala Móvel - Aplicação V1",
- "Menus enregistrés": "Menus salvos",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Nenhum erro de endereço interno (veja a configuração do seu Jeedom!)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Nenhum erro de endereço externo (veja a configuração do seu Jeedom!)",
- "Erreur pas d'utilisateur selectionné": "Erro nenhum usuário selecionado",
- "Configuration mise à jour": "Configuração atualizada",
"Nom de la commande": "Nome do comando",
"Choisir une icône": "Escolha um ícone",
"Afficher": "Mostrar",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Acesso não autorizado",
"Equipement non trouvé : ": "Equipamento não encontrado:",
"User inexistant : ": "Usuário inexistente:",
- "scenario non trouvé": "cenário não encontrado",
"Aucune methode correspondante à : ": "Aucune methode correspondante à :"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "As cotas para FCM foram excedidas. O máximo permitido são 5 solicitações por minuto",
"Echec de l\\'envoi de la notification :": "Falha ao enviar notificação:",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['nome']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Falha ao enviar notificação: a versão 1 do aplicativo não é mais compatível!",
+ "Batterie du téléphone": "Bateria do telefone",
+ "En charge": "Responsável",
+ "Coordonnées": "Detalhes de contato",
"Notification": "Notificação",
- "Notification Critique": "Notificação Crítica"
+ "Notification Critique": "Notificação Crítica",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Recuperar informações do telefone",
+ "Supprimer les Notifications": "Excluir notificações",
+ "Supprimer toutes les Notifications": "Excluir todas as notificações",
+ "Supprimer les Asks expirés": "Excluir perguntas expiradas",
+ "Supprimer les Asks répondus": "Excluir perguntas respondidas"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Cor do indicador de valor",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "Objeto JSONRPC não definido",
"EqLogic inconnu : ": "EqLogic desconhecido:",
"Cmd inconnu : ": "Cmd desconhecido:",
- "pas d\\'id : ": "no id:",
- "pas de parametre de geofencing : ": "nenhum parâmetro de geofencing:",
- "Aucune demande": "Nenhum pedido"
+ "| [ERROR] EqLogic inconnu : ": "| [ERRO] EqLogic desconhecido:",
+ "| Pas de paramètre de geofencing": "| Sem configurações de cerca geográfica",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERRO] O parâmetro Iq não existe!",
+ "Aucune demande": "Nenhum pedido",
+ "Aucun": "Nenhum"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion, o aplicativo v1 não é compatível com o Android mais recente. O aplicativo oficial Jeedom permite que você controle seu sistema de automação residencial Jeedom, seja no Wifi local, seja na rede 3G\/4G da sua operadora.
O app se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, não sendo necessária nenhuma configuração. (possibilidade de fazer manualmente)
Você encontrará no seu celular todas as funcionalidades do seu Jeedom.
Você poderá customizar seu aplicativo com atalhos e muito mais...
Características atuais:
- Gestão dos seus cenários.
- Gestão da sua domótica de acordo com as suas divisões e equipamentos.
- Turno e retorno automático de status
- Compatibilidade com plugins, como termostato, alarme, câmera etc...
- Interface personalizável com atalhos.
- Resumo da domótica geral e por divisão
- Notificações (com suporte ASK)
- Exibição de Projetos
Mais recursos e compatibilidades estão chegando em futuras atualizações!
Privacidade.
Nenhum dado (doméstico ou pessoal) é armazenado ou mantido em nossos servidores"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Observação: a versão BETA não suporta mais o aplicativo V1, está reservada para o novo aplicativo V2 (atualmente beta). Requer no mínimo Android14 ou IOS 12.4.
Observe que o aplicativo v1 não é compatível com o Android mais recente. O aplicativo oficial Jeedom permite que você controle seu sistema de automação residencial Jeedom, seja via WiFi local, ou na rede 3G\/4G da sua operadora.
O aplicativo se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, nenhuma configuração é necessária. (possibilidade de fazer manualmente)
Você encontrará todos os recursos do seu Jeedom no seu celular.
Você poderá personalizar seu aplicativo com atalhos e muito mais...
Recursos atuais:
- Gestão dos seus cenários.
- Gestão da sua domótica de acordo com as suas divisões e equipamentos.
- Mudança e retorno automático de status
- Compatibilidade com plugins, como termostato, alarme, câmera etc...
- Interface personalizável com atalhos.
- Resumo geral de automação residencial e por cômodo
- Notificações (com suporte ASK)
- Exibição de Projetos
Mais recursos e compatibilidade chegarão em atualizações futuras!
Respeito pela privacidade.
Nenhum dado (domótico ou pessoal) é armazenado ou retido em nossos servidores"
}
}
\ No newline at end of file
diff --git a/core/i18n/ru_RU.json b/core/i18n/ru_RU.json
index 611d7ef9..b5068f78 100755
--- a/core/i18n/ru_RU.json
+++ b/core/i18n/ru_RU.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case :"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Оборудование",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Несанкционированный доступ",
- "Pause": "Пауза",
- "Rechercher": "поиск"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "активировать",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "Сохранить",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "общий тип",
- "Icône": "Иконка",
- "Aucun": "Нет",
- " . $info['family'] . ": ", $ info ['family']",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "Изменения успешно сохранены",
- "Sauvegarde effectuée": "Резервное копирование завершено"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Несанкционированный доступ",
- "Scénarios": "Сценарии",
- "Sauvegarder": "Сохранить",
- "ID": "Идентификатор",
- "Scénario": "Сценарий",
- "Transmis": "Transmis",
- "Actions": "акции",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "активировать",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "Сохранить",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "общий тип",
- "Icône": "Иконка",
- "Aucun": "Нет",
- " . $info['family'] . ": ", $ info ['family']",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "Изменения успешно сохранены",
- "Sauvegarde effectuée avec succès": "Резервное копирование завершено успешно"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "Команды",
- "Scénarios": "Сценарии",
- "Messages": "Сообщения",
- "Designs": "конструкции",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "Конфигурация",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "поиск",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box",
"App V1": "App V1",
- "Ajouter": "Добавить",
- "Plugins": "Плагины",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "Сценарии",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "Расширенные настройки",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "Сохранить",
"Supprimer": "удаление",
"Mobile": "мобильный",
- "Notifications": "Уведомления",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "Команды",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "активировать",
"Visible": "Видимый",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "Имя",
"Type": "Тип",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Несанкционированный доступ",
"Equipement non trouvé : ": "Equipement non trouvé :",
"User inexistant : ": "User inexistant :",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "Aucune methode correspondante à :"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu :",
"Cmd inconnu : ": "Cmd inconnu :",
- "pas d\\'id : ": "pas d\\'id :",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing :",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu :",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
}
}
\ No newline at end of file
diff --git a/core/i18n/tr.json b/core/i18n/tr.json
index 2732478b..48d5ceaa 100755
--- a/core/i18n/tr.json
+++ b/core/i18n/tr.json
@@ -3,28 +3,6 @@
"Notifications de l'app": "Notifications de l'app",
"Réponse Ask sensible à la case : ": "Réponse Ask sensible à la case :"
},
- "plugins\/mobile\/desktop\/modal\/piece.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Les Pièces - Application V1": "Les Pièces - Application V1"
- },
- "plugins\/mobile\/desktop\/modal\/health.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Cihaz",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Dernière activité": "Dernière activité",
- "Date création": "Date création",
- "Utilisateur non trouvé": "Utilisateur non trouvé"
- },
- "plugins\/mobile\/desktop\/modal\/secPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "COMPTE MARKET": "COMPTE MARKET",
- "BOX ID": "BOX ID",
- "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe",
- "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :",
- "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION",
- "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin"
- },
"plugins\/mobile\/desktop\/modal\/menuCustom.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"Équipement": "Équipement",
@@ -38,29 +16,6 @@
"Utilisateur non trouvé": "Utilisateur non trouvé",
"Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
},
- "plugins\/mobile\/desktop\/modal\/plugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles",
- "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile",
- "Plugins Validés Type générique": "Plugins Validés Type générique",
- "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés.": "Visibles dans l'app, peuvent nécessiter un type générique, peuvent être désactivés",
- "Plugins compatibles non transmis": "Plugins compatibles non transmis",
- "Ne sont pas transmis à l’App Mobile.": "Ne sont pas transmis à l’App Mobile",
- "Plugins non testés transmis à l'application": "Plugins non testés transmis à l'application",
- "Sont transmis à l’App Mobile en se basant sur les types génériques.": "Sont transmis à l’App Mobile en se basant sur les types génériques",
- "Plugins non testés et non transmis": "Plugins non testés et non transmis",
- "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/fivePage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état"
- },
"plugins\/mobile\/desktop\/modal\/qrcodev2.php": {
"AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE",
"Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application",
@@ -71,120 +26,6 @@
"Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)",
"Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné"
},
- "plugins\/mobile\/desktop\/modal\/thirdPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/wizard.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé"
- },
- "plugins\/mobile\/desktop\/modal\/sixPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Personnalisation du Menu": "Personnalisation du Menu",
- "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application": "Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application",
- "On clique sur Menu Custom": "On clique sur Menu Custom",
- "Une modale s'ouvre et vous propose vos téléphones deja connectés": "Une modale s'ouvre et vous propose vos téléphones deja connectés",
- "Cliquer sur Configurer Menu sur le téléphone choisi": "Cliquer sur Configurer Menu sur le téléphone choisi",
- "Le nombre d'icônes peut aller de 1 à 4": "Le nombre d'icônes peut aller de 1 à 4",
- "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones": "En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones",
- "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application": "Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application",
- "Même principe que via le plugin Mobile": "Même principe que via le plugin Mobile"
- },
- "plugins\/mobile\/desktop\/modal\/firstPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible"
- },
- "plugins\/mobile\/desktop\/modal\/update.mobile.php": {
- "401 - Accès non autorisé": "401 - Yetkisiz erişim",
- "Pause": "Durdur",
- "Rechercher": "Arayın"
- },
- "plugins\/mobile\/desktop\/modal\/plugin.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoi auprès de l'app mobile": "Envoi auprès de l'app mobile",
- "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part",
- "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes": "Ce plugin est compatible, penser à vérifier les Types Génériques sur les commandes",
- "Activer": "Etkinleştir",
- "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez",
- "Type Générique du Plugin": "Type Générique du Plugin",
- "Sauvegarder": "Kaydet",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Genel tip",
- "Icône": "Icon",
- "Aucun": "Hiçbir",
- " . $info['family'] . ": ". $info['family'] .",
- "Plugins compatibles": "Plugins compatibles",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée": "Yedekleme gerçekleştirildi"
- },
- "plugins\/mobile\/desktop\/modal\/scenario.php": {
- "401 - Accès non autorisé": "401 - Yetkisiz erişim",
- "Scénarios": "Senaryolar",
- "Sauvegarder": "Kaydet",
- "ID": "Kimlik",
- "Scénario": "Senaryo",
- "Transmis": "Transmis",
- "Actions": "Işlemler",
- "Envoyer à l\\'application": "Envoyer à l\\'application"
- },
- "plugins\/mobile\/desktop\/modal\/object.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Envoyer cette pièce vers l\\'application": "Envoyer cette pièce vers l\\'application",
- "Activer": "Etkinleştir",
- "Type Générique de cet objet": "Type Générique de cet objet",
- "Sauvegarder": "Kaydet",
- "Id Cmd": "Id Cmd",
- "Nom de la Commande": "Nom de la Commande",
- "Type Générique": "Genel tip",
- "Icône": "Icon",
- "Aucun": "Hiçbir",
- " . $info['family'] . ": ". $info['family'] .",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modifications sauvegardées avec succès": "Modifications sauvegardées avec succès",
- "Sauvegarde effectuée avec succès": "Kayıt başarıyla sonuçlandı"
- },
- "plugins\/mobile\/desktop\/modal\/info_app.mobile.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "JSON valide": "JSON valide",
- "Objets \/ Pièces": "Objets \/ Pièces",
- "Modules": "Modules",
- "Commandes": "Komutalar",
- "Scénarios": "Senaryolar",
- "Messages": "Mesajlar",
- "Designs": "Tasarımlar",
- "Configurations": "Configurations"
- },
- "plugins\/mobile\/desktop\/modal\/fiveModal.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Fonctionnement de la Géolocalisation": "Fonctionnement de la Géolocalisation",
- "On ajoute une zone de Géolocalisation": "On ajoute une zone de Géolocalisation",
- "On recherche l'adresse, on nomme la Zone, et on valide": "On recherche l'adresse, on nomme la Zone, et on valide",
- "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone": "La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone",
- "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes": "Si vous vous trouvé dans la zone à sa création, elle passera en vert après quelques secondes",
- "Modifier largueur de la zone": "Modifier largueur de la zone",
- "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état.": "Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra vous servir à programmer des actions en fonction de son état"
- },
- "plugins\/mobile\/desktop\/modal\/fourPage.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle": "Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Géolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle",
- "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.": "Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier",
- "Une fois les identifiants entrés, la box passe en haut de liste.": "Une fois les identifiants entrés, la box passe en haut de liste",
- "Si elle répond au ping, elle a un voyant vert": "Si elle répond au ping, elle a un voyant vert",
- "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs": "On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs",
- "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.": "Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu",
- "Menu Complet": "Menu Complet"
- },
- "plugins\/mobile\/desktop\/modal\/modal.previousMenus.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Équipement": "Équipement",
- "Type de Mobile": "Type de Mobile",
- "Utilisateur": "Utilisateur",
- "Menu Enregistrés": "Menu Enregistrés",
- "Aucun menu enregistré": "Aucun menu enregistré",
- "APPLICATION V2 NON INTALLÉE": "APPLICATION V2 NON INTALLÉE",
- "Utilisateur non trouvé": "Utilisateur non trouvé",
- "Configuration Menu Enregistrée": "Configuration Menu Enregistrée"
- },
"plugins\/mobile\/desktop\/php\/widgetLight.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé"
},
@@ -194,25 +35,18 @@
"Configuration": "Ayar",
"Gestion Mobiles": "Gestion Mobiles",
"QR Code": "QR Code",
- "Sauvegardes Menu Custom Mobile": "Sauvegardes Menu Custom Mobile",
- "Documentation APP": "Documentation APP",
"Mes Téléphones Mobiles": "Mes Téléphones Mobiles",
"Rechercher": "Arayın",
"Équipement visible": "Équipement visible",
"Équipement non visible": "Équipement non visible",
+ "Pour ajouter un téléphone, il y a 2 méthodes possible :": "Pour ajouter un téléphone, il y a 2 méthodes possible :",
+ "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box.": "Sur le premier écran de l\\'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box",
"App V1": "App V1",
- "Ajouter": "Ekle",
- "Plugins": "Ekler",
- "Objets\/Pièces": "Objets\/Pièces",
- "Scénarios": "Senaryolar",
- "Régénérer la configuration": "Régénérer la configuration",
+ "Attention, en beta il n'est plus possible d'utiliser l'APP V1": "Attention, en beta il n'est plus possible d'utiliser l'APP V1",
"Configuration avancée": "Gelişmiş ayarlar",
- "Infos envoyées à l'app": "Infos envoyées à l'app",
"Sauvegarder": "Kaydet",
"Supprimer": "Sil",
"Mobile": "Mobil",
- "Notifications": "Bildirimler",
- "Sauvegarde Mobile": "Sauvegarde Mobile",
"Commandes": "Komutalar",
"Paramètres généraux": "Paramètres généraux",
"Nom de l'équipement": "Nom de l'équipement",
@@ -223,33 +57,21 @@
"Activer": "Etkinleştir",
"Visible": "Görülebilir",
"Paramètres spécifiques": "Paramètres spécifiques",
+ "Verrouiller le menu géolocalisation": "Verrouiller le menu géolocalisation",
+ "Verrouiller le menu custom": "Verrouiller le menu custom",
+ "NFC : Envoi direct": "NFC : Envoi direct",
+ "Non": "Non",
+ "Oui": "Oui",
+ "Informations": "Informations",
"Type de Mobile": "Type de Mobile",
- "iPhone": "iPhone",
- "Android": "Android",
- "Windows (non officiel)": "Windows (non officiel)",
"Utilisateur": "Utilisateur",
- "QRCode": "QRCode",
- "Id Mobile": "Id Mobile",
- "Iq": "Iq",
- "ARN Mobile": "ARN Mobile",
- "ARN": "ARN",
+ "Iq Mobile": "Iq Mobile",
"TOKEN Mobile": "TOKEN Mobile",
- "TOKEN": "TOKEN",
- "ARN pour Monitoring": "ARN pour Monitoring",
- "Copier pour Monitoring": "Copier pour Monitoring",
- "Sauvegarde": "Sauvegarde",
- "Sauvegarde Dashboard": "Sauvegarde Dashboard",
- "Vérification en Cours": "Vérification en Cours",
- "Sauvegarde Favoris": "Sauvegarde Favoris",
"Nom": "İsim",
"Type": "Çeşit",
"Valeur": "Valeur",
"Actions": "Actions"
},
- "plugins\/mobile\/desktop\/php\/modalConfigPlugin.php": {
- "401 - Accès non autorisé": "401 - Accès non autorisé",
- "Pas de configuration sur ce plugin": "Pas de configuration sur ce plugin"
- },
"plugins\/mobile\/desktop\/php\/widgetSlider.php": {
"401 - Accès non autorisé": "401 - Accès non autorisé",
"ERREUR SUR LA COMMANDE": "ERREUR SUR LA COMMANDE"
@@ -262,21 +84,9 @@
"Température": "Température"
},
"plugins\/mobile\/desktop\/js\/mobile.js": {
- "Plugins compatibles - Application V1": "Plugins compatibles - Application V1",
- "Objets \/ Pièces - Application V1": "Objets \/ Pièces - Application V1",
- "Scénarios - Application V1": "Scénarios - Application V1",
"Informations envoyées à l'app": "Informations envoyées à l'app",
"Gestion des Mobiles": "Gestion des Mobiles",
"QrCode": "QrCode",
- "Bien demarrer": "Bien demarrer",
- "Scénarios - Application V1": "Scénarios - Application V1",
- "Menu Custom": "Menu Custom",
- "Configuration Mobile de la Pièce - Application V1": "Configuration Mobile de la Pièce - Application V1",
- "Menus enregistrés": "Menus enregistrés",
- "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d'adresse interne (voir configuration de votre Jeedom !)",
- "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d'adresse externe (voir configuration de votre Jeedom !)",
- "Erreur pas d'utilisateur selectionné": "Erreur pas d'utilisateur selectionné",
- "Configuration mise à jour": "Configuration mise à jour",
"Nom de la commande": "Nom de la commande",
"Choisir une icône": "Choisir une icône",
"Afficher": "Afficher",
@@ -292,14 +102,23 @@
"401 - Accès non autorisé": "401 - Yetkisiz erişim",
"Equipement non trouvé : ": "Equipement non trouvé :",
"User inexistant : ": "User inexistant :",
- "scenario non trouvé": "scenario non trouvé",
"Aucune methode correspondante à : ": "Aşağıdakilere karşılık gelen bir yöntem yok:"
},
"plugins\/mobile\/core\/class\/mobile.class.php": {
+ "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute.": "Les quotas pour fcm sont dépassés. Le maximum autorisé est de 5 requêtes par minute",
"Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :",
- "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']",
+ "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !": "Échec de l'envoi de notification : la version 1 de l'app n'est plus prise en charge !",
+ "Batterie du téléphone": "Batterie du téléphone",
+ "En charge": "En charge",
+ "Coordonnées": "Coordonnées",
"Notification": "Notification",
- "Notification Critique": "Notification Critique"
+ "Notification Critique": "Notification Critique",
+ "Notification Silencieuse": "Notification Silencieuse",
+ "Récupérer les informations du téléphone": "Récupérer les informations du téléphone",
+ "Supprimer les Notifications": "Supprimer les Notifications",
+ "Supprimer toutes les Notifications": "Supprimer toutes les Notifications",
+ "Supprimer les Asks expirés": "Supprimer les Asks expirés",
+ "Supprimer les Asks répondus": "Supprimer les Asks répondus"
},
"plugins\/mobile\/core\/template\/widgets.html": {
"Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur",
@@ -313,11 +132,13 @@
"JSONRPC object not defined": "JSONRPC object not defined",
"EqLogic inconnu : ": "EqLogic inconnu :",
"Cmd inconnu : ": "Cmd inconnu :",
- "pas d\\'id : ": "pas d\\'id :",
- "pas de parametre de geofencing : ": "pas de parametre de geofencing :",
- "Aucune demande": "Aucune demande"
+ "| [ERROR] EqLogic inconnu : ": "| [ERROR] EqLogic inconnu :",
+ "| Pas de paramètre de geofencing": "| Pas de paramètre de geofencing",
+ "| [ERROR] Paramètre Iq inexistant !": "| [ERROR] Paramètre Iq inexistant !",
+ "Aucune demande": "Aucune demande",
+ "Aucun": "Aucun"
},
"info.json": {
- "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
+ "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attention : la version BETA ne supporte plus l'app V1, elle est réservée à la nouvelle app V2 (beta actuellement). Nécessite Android14 ou IOS 12.4 minimum.
Attention, l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.
L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)
Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.
Vous pourrez personnaliser votre application avec des raccourcis et plus encore...
Fonctionnalités actuelles:
- Gestion de vos scénarios.
- Gestion de votre domotique en fonction de vos pièces et équipements.
- Maj et retour d'état automatique
- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...
- Interface personnalisable avec les raccourcis.
- Résumé domotique général et par pièce
- Notifications (avec prise en charge du ASK)
- Affichage des Designs
D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !
Respect de la vie privée.
Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs"
}
}
\ No newline at end of file
diff --git a/core/img/Button_Dashboard_icon@3x.png b/core/img/Button_Dashboard_icon@3x.png
deleted file mode 100755
index 3eafc626..00000000
Binary files a/core/img/Button_Dashboard_icon@3x.png and /dev/null differ
diff --git a/core/img/Button_Design_icon@3x.png b/core/img/Button_Design_icon@3x.png
deleted file mode 100755
index e5e6d7af..00000000
Binary files a/core/img/Button_Design_icon@3x.png and /dev/null differ
diff --git a/core/img/Button_Synthese_icon@3x.png b/core/img/Button_Synthese_icon@3x.png
deleted file mode 100755
index eaab45c0..00000000
Binary files a/core/img/Button_Synthese_icon@3x.png and /dev/null differ
diff --git a/core/img/Button_URL_icon@3x.png b/core/img/Button_URL_icon@3x.png
deleted file mode 100755
index 6af241c1..00000000
Binary files a/core/img/Button_URL_icon@3x.png and /dev/null differ
diff --git a/core/img/IMG_0738.PNG b/core/img/IMG_0738.PNG
deleted file mode 100755
index 2b3367ab..00000000
Binary files a/core/img/IMG_0738.PNG and /dev/null differ
diff --git a/core/img/android.png b/core/img/android.png
deleted file mode 100755
index e33724b6..00000000
Binary files a/core/img/android.png and /dev/null differ
diff --git a/core/img/ios.png b/core/img/ios.png
deleted file mode 100755
index 462de40f..00000000
Binary files a/core/img/ios.png and /dev/null differ
diff --git a/core/img/mobile_icon.png b/core/img/mobile_icon.png
deleted file mode 100755
index d4fd114e..00000000
Binary files a/core/img/mobile_icon.png and /dev/null differ
diff --git a/core/img/v22methods.jpeg b/core/img/v22methods.jpeg
deleted file mode 100755
index 4b0d0f6a..00000000
Binary files a/core/img/v22methods.jpeg and /dev/null differ
diff --git a/core/img/v2ActualBoxFlouted.jpeg b/core/img/v2ActualBoxFlouted.jpeg
deleted file mode 100755
index 4fb7c69d..00000000
Binary files a/core/img/v2ActualBoxFlouted.jpeg and /dev/null differ
diff --git a/core/img/v2AddZone.jpeg b/core/img/v2AddZone.jpeg
deleted file mode 100755
index 926f7d9c..00000000
Binary files a/core/img/v2AddZone.jpeg and /dev/null differ
diff --git a/core/img/v2ConnectBox.jpeg b/core/img/v2ConnectBox.jpeg
deleted file mode 100755
index c0da35a3..00000000
Binary files a/core/img/v2ConnectBox.jpeg and /dev/null differ
diff --git a/core/img/v2FullMenu.jpeg b/core/img/v2FullMenu.jpeg
deleted file mode 100755
index 757f5264..00000000
Binary files a/core/img/v2FullMenu.jpeg and /dev/null differ
diff --git a/core/img/v2MenuBoxs.PNG b/core/img/v2MenuBoxs.PNG
deleted file mode 100755
index 1b0bd7f8..00000000
Binary files a/core/img/v2MenuBoxs.PNG and /dev/null differ
diff --git a/core/img/v2MenuBoxs.jpeg b/core/img/v2MenuBoxs.jpeg
deleted file mode 100755
index 1b0bd7f8..00000000
Binary files a/core/img/v2MenuBoxs.jpeg and /dev/null differ
diff --git a/core/img/v2ModalMenuCustom.png b/core/img/v2ModalMenuCustom.png
deleted file mode 100755
index 4ae1f831..00000000
Binary files a/core/img/v2ModalMenuCustom.png and /dev/null differ
diff --git a/core/img/v2ModalQrCode.png b/core/img/v2ModalQrCode.png
deleted file mode 100755
index 33c7290c..00000000
Binary files a/core/img/v2ModalQrCode.png and /dev/null differ
diff --git a/core/img/v2ModifyBigRadius.jpeg b/core/img/v2ModifyBigRadius.jpeg
deleted file mode 100755
index e27354fb..00000000
Binary files a/core/img/v2ModifyBigRadius.jpeg and /dev/null differ
diff --git a/core/img/v2ModifyLittleRadius.jpeg b/core/img/v2ModifyLittleRadius.jpeg
deleted file mode 100755
index ffbf2b27..00000000
Binary files a/core/img/v2ModifyLittleRadius.jpeg and /dev/null differ
diff --git a/core/img/v2QRCodeConnect.PNG b/core/img/v2QRCodeConnect.PNG
deleted file mode 100755
index e7647963..00000000
Binary files a/core/img/v2QRCodeConnect.PNG and /dev/null differ
diff --git a/core/img/v2ZoneInactive.jpeg b/core/img/v2ZoneInactive.jpeg
deleted file mode 100755
index 7bce54cf..00000000
Binary files a/core/img/v2ZoneInactive.jpeg and /dev/null differ
diff --git a/core/img/v2connectMarket.jpeg b/core/img/v2connectMarket.jpeg
deleted file mode 100755
index 03c218dc..00000000
Binary files a/core/img/v2connectMarket.jpeg and /dev/null differ
diff --git a/core/img/v2firstConnect.jpeg b/core/img/v2firstConnect.jpeg
deleted file mode 100755
index 966fcdda..00000000
Binary files a/core/img/v2firstConnect.jpeg and /dev/null differ
diff --git a/core/img/v2floutedBoxs.png b/core/img/v2floutedBoxs.png
deleted file mode 100755
index 3e0118e2..00000000
Binary files a/core/img/v2floutedBoxs.png and /dev/null differ
diff --git a/core/img/v2greenBtnAdd.PNG b/core/img/v2greenBtnAdd.PNG
deleted file mode 100755
index d205d20a..00000000
Binary files a/core/img/v2greenBtnAdd.PNG and /dev/null differ
diff --git a/core/php/image.php b/core/php/image.php
index 1009acf2..5757c9a1 100755
--- a/core/php/image.php
+++ b/core/php/image.php
@@ -18,29 +18,29 @@
require_once dirname(__FILE__) . "/../../../../core/php/core.inc.php";
-if(init('name') == null || init('key') == null){
- die();
+if (init('name') == null || init('key') == null) {
+ die();
}
/* Variables */
$keyFile = init('key');
$nameFile = init('name');
-$file = dirname(__FILE__) .'/../../data/images/'.$nameFile;
+$file = dirname(__FILE__) . '/../../data/images/' . $nameFile;
-if(!file_exists($file)){
+if (!file_exists($file)) {
echo "FILE NON EXISTE !";
- die();
+ die();
}
$nameMD5 = md5_file($file);
-if($nameMD5 != $keyFile){
+if ($nameMD5 != $keyFile) {
echo "KEY NOK !";
die();
}
//ob_clean();
-header('Content-Type: image/'.pathinfo($file, PATHINFO_EXTENSION));
- echo file_get_contents($file);
+header('Content-Type: image/' . pathinfo($file, PATHINFO_EXTENSION));
+echo file_get_contents($file);
//unlink($file);
diff --git a/core/template/mobile/cmd.info.numeric.arcSlider.html b/core/template/mobile/cmd.info.numeric.arcSlider.html
index 404d502d..750c1a11 100644
--- a/core/template/mobile/cmd.info.numeric.arcSlider.html
+++ b/core/template/mobile/cmd.info.numeric.arcSlider.html
@@ -40,7 +40,7 @@
.css("transform", "scale(0.94) rotate(" + angle + "deg)");
cmd.find(".state strong").first().text(_options.display_value);
});
-
+
if (is_numeric("#state#")) {
jeedom.cmd.refreshValue([
{
diff --git a/desktop/css/notification.css b/desktop/css/notification.css
new file mode 100644
index 00000000..75786447
--- /dev/null
+++ b/desktop/css/notification.css
@@ -0,0 +1,129 @@
+.notification-box {
+ padding: 32px;
+}
+
+.notification-step {
+ display: flex;
+ margin-bottom: 32px;
+ position: relative;
+}
+
+.notification-step:last-child {
+ margin-bottom: 0px;
+}
+
+.notification-line {
+ position: absolute;
+ left: 114px;
+ top: 40px;
+ bottom: -32px;
+ width: 2px;
+ background-color: var(--logo-primary-color);
+ z-index: 1;
+}
+
+.notification-date {
+ display: flex;
+ height: 40px;
+ align-items: center;
+ margin-right: 16px;
+ width: 79px;
+ font-size: 12px;
+ padding: 5px;
+ text-align: center;
+ border-radius: var(--border-radius) var(--border-radius) var(--border-radius) var(--border-radius) !important;
+ background-color: var(--form-bg-color);
+ /* z-index: 1;*/
+}
+
+.notification-step:last-child .notification-line {
+ display: none;
+}
+
+.notification-circle {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 16px;
+ background-color: var(--form-bg-color);
+ border: 2px solid var(--txt-color);
+ z-index: 2;
+}
+
+.ask-timeout .notification-circle {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-info-color) !important;
+ border: none;
+}
+
+.ask-success .notification-circle {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-success-color) !important;
+ border: none;
+}
+
+.ask-in-progress .notification-circle {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-warning-color) !important;
+ border: none;
+}
+
+.stepper-critical .notification-circle {
+ border: 1px solid red;
+}
+
+.notification-content {
+ flex: 1;
+ padding: 10px;
+ border-radius: var(--border-radius) var(--border-radius) var(--border-radius) var(--border-radius);
+ background-color: var(--form-bg-color);
+}
+
+.notification-img {
+ margin-top: 10px;
+}
+
+.notification-img img {
+ max-width: 250px;
+}
+
+.notification-title {
+ font-weight: 600;
+ margin-bottom: 4px;
+ font-size: 18px;
+}
+
+.notification-status {
+ font-size: 13px;
+ display: inline-block;
+ padding: 2px 8px;
+ border-radius: 12px;
+ margin-top: 4px;
+}
+
+.ask-success .notification-status {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-success-color) !important;
+ border: none;
+}
+
+.ask-timeout .notification-status {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-info-color) !important;
+ border: none;
+}
+
+.ask-in-progress .notification-status {
+ color: var(--linkHoverLight-color) !important;
+ background-color: var(--al-warning-color) !important;
+ border: none;
+}
+
+.notification-button {
+ display: flex;
+ margin-bottom: 32px;
+ justify-content: end;
+}
\ No newline at end of file
diff --git a/desktop/css/wizard.css b/desktop/css/wizard.css
new file mode 100644
index 00000000..13612994
--- /dev/null
+++ b/desktop/css/wizard.css
@@ -0,0 +1,372 @@
+body {
+ padding-top: unset;
+}
+
+#jeedomMenuBar {
+ display: none;
+}
+
+#div_mainContainer {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#div_pageContainer {
+ background-color: rgba(var(--eq-bg-color), var(--opacity));
+ border-radius: var(--border-radius);
+}
+
+#mobile_wizard .flex-evenly {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: space-evenly;
+ align-items: center;
+}
+
+#mobile_wizard .flex-column {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+#bt_quitmobile {
+ position: absolute;
+ top: 5%;
+ right: 5%;
+}
+
+/* #wizard_container {
+ height: 600px;
+ display: grid;
+ justify-items: center;
+ align-items: center;
+ grid-template-columns: 100%;
+ grid-template-rows: 50px 225px 0 25px auto;
+} */
+
+#wizard_container {
+ height: 600px;
+ display: flex;
+ flex-direction: column;
+ justify-items: center;
+ align-items: center;
+}
+
+
+#wizard_container>h3 {
+ grid-row-start: 1
+}
+
+#wizard_container>img {
+ max-width: 350px;
+ max-height: 500px;
+ grid-row-start: 2
+}
+
+#wizard_container>.logo {
+ grid-row-start: 2
+}
+
+#wizard_container .input-group {
+ max-width: 450px;
+ margin: auto;
+}
+
+#wizard_container .form-control {
+ font-weight: bold;
+ text-align-last: center;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+/*** OBJECTS ***/
+#wizard_container>.step_father .sel_father,
+#wizard_container>.step_childs .sel_child {
+ border-radius: var(--border-radius);
+ background-color: var(--el-defaultColor);
+ overflow: hidden;
+}
+
+#wizard_container>.step_father .sel_father:hover,
+#wizard_container>.step_father .sel_father.selected {
+ transform: scale(1.2);
+}
+
+#wizard_container>.step_childs .sel_child {
+ opacity: .25;
+}
+
+#wizard_container>.step_childs .sel_child:hover {
+ opacity: 1;
+}
+
+#wizard_container>.step_childs .sel_child.selected {
+ opacity: 1;
+ border: solid 3px var(--logo-primary-color);
+}
+
+#wizard_container>.step_father img {
+ width: 250px;
+ max-width: 100%;
+ max-height: 150px;
+}
+
+#wizard_container>.step_childs .panel {
+ width: 100%;
+ max-width: 1000px;
+}
+
+#wizard_container>.step_childs .panel-body {
+ padding: 12px 0 10px 10px;
+}
+
+#wizard_container>.step_childs img {
+ width: 180px;
+ max-width: 100%;
+ max-height: 100px;
+}
+
+#wizard_container>.step_father .object_name,
+#wizard_container>.step_childs .object_name {
+ font-weight: bold;
+ color: white;
+ padding: 2px;
+ background-color: var(--al-info-color);
+}
+
+/*** PLUGINS ***/
+#wizard_container>#plugins {
+ min-height: 250px;
+}
+
+#wizard_container>#plugins>.plugin {
+ max-height: 50%;
+ min-width: 10%;
+ opacity: .5;
+ border: solid 3px var(--linkHover-color);
+ border-radius: var(--border-radius);
+ padding: 6px 0;
+}
+
+#wizard_container>#plugins>.plugin:hover {
+ opacity: 1;
+}
+
+#wizard_container>#plugins>.plugin.selected {
+ opacity: 1;
+ border: solid 3px var(--logo-primary-color);
+}
+
+#wizard_container>#plugins>.plugin.selected[data-installed="true"] {
+ border: solid 3px var(--al-info-color);
+}
+
+#wizard_container>#plugins>.plugin>img {
+ max-height: 95px;
+ max-width: 85%;
+}
+
+/*** NAVIGATION ***/
+#wizard_navigation {
+ margin: 15px auto;
+}
+
+#wizard_navigation>div {
+ margin: auto 10px;
+ min-width: 50px;
+}
+
+.navBtn,
+#bt_jeedom_ready {
+ font-size: 45px;
+ cursor: pointer !important;
+ color: #F18D15;
+}
+
+.navDot {
+ width: 25px;
+ height: 25px;
+ margin: 5px;
+ border-radius: 50%;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ background-color: rgb(var(--contrast-color), .7);
+ user-select: none;
+}
+
+.navDot:hover,
+.navDot.active {
+ transform: scale(1.5);
+}
+
+.navDot.active {
+ margin: 0 10px;
+}
+
+.navDot.blocked {
+ opacity: .5;
+}
+
+
+
+/*
+
+@media (max-width: 768px) {
+ #wizard_container {
+ height: auto;
+ grid-template-rows: auto auto auto auto auto;
+ padding: 10px;
+ }
+
+ #wizard_container>img {
+ max-width: 250px;
+ max-height: 150px;
+ }
+
+ #wizard_navigation {
+ flex-direction: row;
+ justify-content: center;
+ position: fixed;
+ bottom: 10px;
+ width: 100%;
+ padding-bottom: 10px;
+ background-color: rgba(var(--panel-bg-color), 0.9);
+ }
+
+ #wizard_navigation>div {
+ margin: 0 5px;
+ }
+
+ .navBtn,
+ #bt_jeedom_ready {
+ font-size: 30px;
+ }
+
+ .navDot {
+ width: 20px;
+ height: 20px;
+ margin: 3px;
+ }
+
+ .navDot:hover,
+ .navDot.active {
+ transform: scale(1.2);
+ }
+
+ #wizard_container>#updates>.update,
+ #wizard_container>#plugins>.plugin {
+ width: 70px;
+ height: auto;
+ }
+
+ #wizard_container>#updates>.update>img,
+ #wizard_container>#plugins>.plugin>img {
+ width: 60px;
+ }
+
+ #wizard_container>.services .service {
+ height: 150px;
+ max-width: 100%;
+ }
+} */
+
+
+
+/* TABLETS (portrait) */
+@media (max-width: 1024px) {
+ #div_mainContainer {
+ flex-direction: column;
+ padding: 10px;
+ }
+
+ #wizard_container {
+ height: auto;
+ grid-template-rows: auto auto auto auto auto;
+ }
+
+ #wizard_container>img,
+ #wizard_container>.logo {
+ max-width: 250px;
+ max-height: 180px;
+ }
+
+ #wizard_container .input-group {
+ width: 90%;
+ }
+
+ #wizard_container>#plugins>.plugin {
+ max-height: 120px;
+ min-width: 25%;
+ }
+}
+
+/* PHONES */
+@media (max-width: 768px) {
+ #wizard_container .input-group {
+ width: 100%;
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ #wizard_container .input-group label {
+ display: block;
+ margin-bottom: 5px;
+ width: 100%;
+ text-align: left;
+ font-size: 14px;
+ }
+
+ #wizard_container .input-group select,
+ #wizard_container .input-group input,
+ #wizard_container .form-control {
+ width: 100%;
+ box-sizing: border-box;
+ }
+ #bt_quitJeeasyWizard {
+ top: 10px;
+ right: 10px;
+ }
+
+ #wizard_container {
+ padding: 10px;
+ grid-template-rows: auto auto auto auto auto;
+ text-align: center;
+ }
+
+ #wizard_container>img,
+ #wizard_container>.logo {
+ max-width: 200px;
+ max-height: 150px;
+ }
+
+ #wizard_container .form-control {
+ font-size: 16px;
+ }
+
+ #wizard_container>#plugins>.plugin {
+ min-width: 40%;
+ margin-bottom: 10px;
+ }
+
+ .navBtn,
+ #bt_jeedom_ready {
+ font-size: 30px;
+ }
+
+ .navDot {
+ width: 18px;
+ height: 18px;
+ margin: 3px;
+ }
+}
+
+
+
diff --git a/desktop/js/mobile.js b/desktop/js/mobile.js
index 972ef60b..5861fb3f 100755
--- a/desktop/js/mobile.js
+++ b/desktop/js/mobile.js
@@ -14,584 +14,625 @@
* along with Jeedom. If not, see ';
- }
- },
- });
- $.ajax({
+document.querySelector("#bt_regenConfig")?.addEventListener("click", function (event) {
+ domUtils.ajax({
type: "POST",
url: "plugins/mobile/core/ajax/mobile.ajax.php",
data: {
- action: "getSaveDashboard",
- iq: _eqLogic.logicalId,
+ action: "AppV1RegenConfig",
},
dataType: "json",
- global: false,
error: function (request, status, error) {
- handleAjaxError(request, status, error);
+ domUtils.handleAjaxError(request, status, error)
},
success: function (data) {
if (data.state != "ok") {
- $("#div_alert").showAlert({ message: data.result, level: "danger" });
- return;
- }
- let savedash = document.querySelector("#SaveDash");
- if (data.result == true) {
- savedash.classList.add("badge-success");
- savedash.innerHTML = "OK";
- } else if (data.result == false) {
- savedash.classList.add("badge-danger");
- savedash.innerHTML = "NOK";
+ jeedomUtils.showAlert({ message: data.result, level: "danger" })
+ return
}
+ jeedomUtils.showAlert({ message: "{{Configuration mise à jour}}", level: "success"});
},
});
- $.ajax({
- type: "POST",
- url: "plugins/mobile/core/ajax/mobile.ajax.php",
- data: {
- action: "getSaveFavDash",
- iq: _eqLogic.logicalId,
- },
- dataType: "json",
- global: false,
- error: function (request, status, error) {
- handleAjaxError(request, status, error);
- },
- success: function (data) {
- if (data.state != "ok") {
- $("#div_alert").showAlert({ message: data.result, level: "danger" });
- return;
- }
- let savefav = document.querySelector("#SaveFav");
- if (data.result == true) {
- savefav.classList.add("badge-success");
- savefav.innerHTML = "OK";
- } else if (data.result == false) {
- savefav.classList.add("badge-danger");
- savefav.innerHTML = "NOK";
- }
- },
- });
-}
+});
-document
- .getElementById("bt_regenConfig")
- .addEventListener("click", function () {
- $.ajax({
+// NotificationsV2
+document.querySelector(".notification-box")?.addEventListener("click", function (event) {
+ var _target = null
+ if (_target = event.target.closest('.bt_removeNotification')) {
+ let notification = _target.closest('.notification-step')
+ let id = notification.getAttribute('data-id');
+ let iq = notification.getAttribute('data-iq');
+ domUtils.ajax({
type: "POST",
url: "plugins/mobile/core/ajax/mobile.ajax.php",
data: {
- action: "regenConfig",
+ action: "removeNotificationV2",
+ id: id,
+ iq: iq
},
dataType: "json",
error: function (request, status, error) {
- handleAjaxError(request, status, error);
+ domUtils.handleAjaxError(request, status, error)
},
success: function (data) {
if (data.state != "ok") {
- $("#div_alert").showAlert({ message: data.result, level: "danger" });
- return;
+ jeedomUtils.showAlert({ message: data.result, level: "danger" })
+ return
}
- $("#div_alert").showAlert({
- message: "{{Configuration mise à jour}}",
- level: "success",
- });
+ notification.remove()
+ if (data.result == '0' && is_object(el = document.querySelector(".notification-box"))) {
+ el.innerHTML = '