From 5cb309a9bb3481534b353cb50c707a64b4155c00 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 12:41:52 +0200 Subject: :construction: Work on installer and making the supportfiles do led control --- bin/install.sh | 77 ++++++++++++++++++++-------------------------------------- 1 file changed, 26 insertions(+), 51 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index c72949b..25c5dc8 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -98,69 +98,44 @@ tput sgr0 tput sc tput bel -piModel=0 -printf "\n\n\n" # So that the menu just erases things it has alredy written -while : -do - tput cuu 3 - tput ed - tput sc - tput setaf 8 - - if [[ piModel -eq 0 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi B" - tput setaf 8 - if [[ piModel -eq 1 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi B+" - tput setaf 8 - if [[ piModel -eq 2 ]]; then - tput sgr0; fi - printf '%s\n' "- Raspberry Pi Model 2" - tput setaf 8 - - read -sn1 key - if [ "$key" == "j" ]; then - piModel=$((piModel+1)) - if [[ piModel -gt 2 ]]; then - piModel=2 - fi - fi - if [ "$key" == "k" ]; then - piModel=$((piModel-1)) - if [[ piModel -lt 0 ]]; then - piModel=0 - fi - fi - if [ "$key" == "" ]; then - tput cuu 4 - tput ed - tput sgr0 - printf "%s\e[0;34m%s\e[0m\n" ". Which rPi is this? " "ListItem #$piModel" - break - fi - -done - - tput setaf 4 printf ". Installing the app itself...\n" tput sgr0 +# Create user 'luxcena-neo' +tput setaf 8 +printf '%s\n' " - Creating user 'lux-neo'..." +username="lux-neo" +egrep "^$username" /etc/passwd >/dev/null +if [ $? -eq 0 ]; then + echo "$username exists!" + exit 1 +else + #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) + useradd -m $username + [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } +fi +tput sgr0 + +# Change to the new user +tput setaf 8 +printf '%s\n' " - Changing to new user..." +sudo su lux-neo +tput sgr0 + # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 -mkdir ~/luxcena-neo-install || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/luxcena-neo-install/src || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/luxcena-neo-install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } +mkdir ~/install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . ~/luxcena-neo-install/src || { printf "\n\nInstall failed.\n"; exit 1; } +cp -r . ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } # fourth we run npm i tput setaf 8 @@ -168,7 +143,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -npm --prefix ~/luxcena-neo-install/src install ~/luxcena-neo-install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? +npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From 706dc5faca30d841be9be05cf757e72525540344 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 12:48:35 +0200 Subject: :hammer: Fix permission issue --- bin/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 25c5dc8..c2e2cdf 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -106,13 +106,13 @@ tput sgr0 tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." username="lux-neo" -egrep "^$username" /etc/passwd >/dev/null +sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "$username exists!" exit 1 else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - useradd -m $username + sudo useradd -m $username [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } fi tput sgr0 -- cgit v1.2.3 From 2a0d442014041e0f4a0c6aed5a02980ab770cfce Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 13:08:47 +0200 Subject: :construction: Work on lux-neo user with install --- bin/install.sh | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index c2e2cdf..e227b88 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -105,6 +105,7 @@ tput sgr0 # Create user 'luxcena-neo' tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." +tput sgr0 username="lux-neo" sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then @@ -115,27 +116,27 @@ else sudo useradd -m $username [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } fi -tput sgr0 -# Change to the new user -tput setaf 8 -printf '%s\n' " - Changing to new user..." -sudo su lux-neo -tput sgr0 + +userDir=$(eval echo "~$username") # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 -mkdir ~/install || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } -mkdir ~/install/userdata || { printf "\n\nInstall failed.\n"; exit 1; } +sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install" +sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install/src" +sudo mkdir -p "$userDir/install/userdata" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown $username:$username "$userDir/install/userdata" # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . ~/install/src || { printf "\n\nInstall failed.\n"; exit 1; } +sudo cp -r . "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } +sudo chown -R $username:$username "$userDir/install/src" # fourth we run npm i tput setaf 8 @@ -143,7 +144,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; } # This is probably a bit overkill to have --only=... but better safe than sorry? +runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From f36d99a3c960b7d6eaf95e23bea49dc02f1f3ae6 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 13:13:27 +0200 Subject: :construction: Add sudo to runuser, just continue if user exists --- bin/install.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index e227b88..24526f2 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -109,8 +109,7 @@ tput sgr0 username="lux-neo" sudo egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then - echo "$username exists!" - exit 1 + echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) sudo useradd -m $username @@ -144,7 +143,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? +sudo runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From fd8c13982dd46008de7258676f06cfca3d80b953 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:05:55 +0200 Subject: :fire: Delete no longer needed user-check --- bin/install.sh | 5 ----- 1 file changed, 5 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 24526f2..4ba4e45 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,11 +5,6 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" -if [ $USER != "pi" ]; then - printf "Install failed...\nOther user than 'pi' detected. If you want to use another user, you have to install manually." - exit 1 -fi - # Update system tput sc tput setaf 4 -- cgit v1.2.3 From 4a4a950ea94d460c9afd3d8062b377c18e977963 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:26:26 +0200 Subject: :hammer: Move yes/no dialog to function --- bin/install.sh | 141 ++++++++++++++++++++++++--------------------------------- 1 file changed, 60 insertions(+), 81 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 4ba4e45..289f48e 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,93 +5,70 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" +function dlgYN() { + tput sc + tput setaf 4 + printf "$1 (y/n)? " + while : + do + read -n 1 -p "" YNQuestionAnswer + if [[ $YNQuestionAnswer == "y" ]]; then + tput rc; tput el + printf ". $1?: \e[0;32mYes\e[0m\n" + tput sc + eval $2=1 # Set parameter 2 of input to the return value + break + elif [[ $YNQuestionAnswer == "n" ]]; then + tput rc; tput el + printf ". $1?: \e[0;31mNo\e[0m\n" + eval $2=0 # Set parameter 2 of input to the return value + break + fi + done +} + # Update system -tput sc -tput setaf 4 -printf ". Update your system (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Update your system?: \e[0;32mYes\e[0m\n" - tput sc - sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } - sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } - tput rc; tput ed - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Update your system?: \e[0;31mNo\e[0m\n" - break - fi -done +dlgYN ". Update your system" res +if [ $res -eq 1 ]; then + tput sc + sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } + sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } + tput rc; tput ed +fi # Install packages -tput sc -tput setaf 4 -printf ". Install required packages (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Install required packages?: \e[0;32mYes\e[0m\n" - tput sc - sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } - if [ $? -eq 0 ]; then - tput rc; tput ed - printf "✓" - else - printf "\nInstall failed.\n" - exit 1 - fi - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Install required packages?: \e[0;31mNo\e[0m\n" - tput setaf 2 - printf " We are now assuming that all the following packages exists on your system:\n" - printf " nodejs scons python-dev swig\n" - tput sgr0 - break +dlgYN ". Install required packages" res +if [ $res -eq 1 ]; then + tput sc + sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } + if [ $? -eq 0 ]; then + tput rc; tput ed + printf "✓" + else + printf "\nInstall failed.\n" + exit 1 fi -done +else + tput setaf 2 + printf " We are now assuming that all the following packages exists on your system:\n" + printf " nodejs scons python-dev swig\n" + tput sgr0 +fi # Install led-library -tput sc -tput setaf 4 -printf ". Install jgarff's rpi_ws281x library (y/n)? " -while : -do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Install jgarff's rpi_ws281x library?: \e[0;32mYes\e[0m\n" - tput sc - git clone https://github.com/jgarff/rpi_ws281x /tmp/rpi_ws281x # TODO CHANGE PATH - python /tmp/rpi_ws281x/python/setup.py install # TODO CHANGE PAHT - if [ $? -eq 0 ]; then - tput rc; tput ed - printf "✓" - else - printf "\nInstall failed.\n" - exit 1 - fi - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Install jgarff's rpi_ws281x library?: \e[0;31mNo\e[0m\n" - break +dlgYN ". Install jgarff's rpi_ws281x library" res +if [ $res -eq 1 ]; then + tput sc + git clone https://github.com/jgarff/rpi_ws281x /tmp/rpi_ws281x # TODO CHANGE PATH + python /tmp/rpi_ws281x/python/setup.py install # TODO CHANGE PAHT + if [ $? -eq 0 ]; then + tput rc; tput ed + printf "✓" + else + printf "\nInstall failed.\n" + exit 1 fi -done - - -tput setaf 4 -printf ". Which rPi is this? (j:↓, k:↑, ↩:↩)\n" -tput sgr0 -tput sc -tput bel +fi tput setaf 4 printf ". Installing the app itself...\n" @@ -138,7 +115,9 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c "npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }" # This is probably a bit overkill to have --only=... but better safe than sorry? +sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }' # This is probably a bit overkill to have --only=... but better safe than sorry? +if [ $? -eq 0 ]; then +fi tput rc; tput ed # Fifth we add the service files -- cgit v1.2.3 From 0c0561b98528d01faf0d7d6ab5a9324609284aaf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 16:29:48 +0200 Subject: :bug: Fix syntax, check function success with it's own if --- bin/install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 289f48e..08f160b 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -115,8 +115,10 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production || { printf "\n\nInstall failed.\n"; exit 1; }' # This is probably a bit overkill to have --only=... but better safe than sorry? -if [ $? -eq 0 ]; then +sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' # This is probably a bit overkill to have --only=... but better safe than sorry? +if [ $? -ne 0 ]; then + printf "\n\nInstall failed.\n" + exit 1 fi tput rc; tput ed -- cgit v1.2.3 From a74ee07f77d6434b907d8e560c65468ea04336e6 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 20:32:36 +0200 Subject: :construction: Fix error message on adduser error --- bin/install.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 08f160b..ae45052 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -84,17 +84,14 @@ if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - sudo useradd -m $username - [ $? -eq 0 ] && echo "User has been added to system!" || { printf "\n\nInstall failed.\n"; exit 1; } + sudo useradd -m $username || { printf "\n\nInstall failed.\n"; exit 1; } fi - -userDir=$(eval echo "~$username") - # First we make our directories tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 +userDir=$(eval echo "~$username") sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } sudo chown $username:$username "$userDir/install" sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -- cgit v1.2.3 From 90ffcddf7e861dcdaab5a0612146ce8292d75c60 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 20:56:18 +0200 Subject: :construction: Remove 'sudos' from install script, and assume root --- bin/install.sh | 58 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 21 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index ae45052..62077a7 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -5,6 +5,26 @@ printf '%s\n' "Luxcena-neo Installer" tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" +LOG="/tmp/luxcena-neo.install.log" +touch $LOG +echo "Starting Luxcena-neo installer..." >> LOG + +if [ "$EUID" -ne 0 ]; then + echo "You need to run this script as root." + echo "Try running with 'sudo ./bin/install.sh'" + exit 1 +fi + +function die() { + tput setaf 1 + printf "\n\nInstall failed.\n" + printf "Check the logfile at '/tmp/lucxena-neo.install.log'.\n" + printf "Use this command to see the last 30 lines of the file;\n" + printf " tail -n 30 /tmp/luxcena-neo.install.log" + tput sgr0 + exit 1 +} + function dlgYN() { tput sc tput setaf 4 @@ -31,8 +51,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - sudo apt-get -y -qq update || { printf "\n\nInstall failed.\n"; exit 1; } - sudo apt-get -y -qq upgrade || { printf "\n\nInstall failed.\n"; exit 1; } + apt-get -y -qq update >> LOG || die + apt-get -y -qq upgrade >> LOG || die tput rc; tput ed fi @@ -40,7 +60,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - sudo apt-get -y -qq install nodejs scons python-dev swig || { printf "\n\nInstall failed.\n"; exit 1; } + apt-get -y -qq install nodejs scons python-dev swig >> LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" @@ -79,12 +99,12 @@ tput setaf 8 printf '%s\n' " - Creating user 'lux-neo'..." tput sgr0 username="lux-neo" -sudo egrep "^$username" /etc/passwd >/dev/null +egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - sudo useradd -m $username || { printf "\n\nInstall failed.\n"; exit 1; } + useradd -m $username >> LOG || die fi # First we make our directories @@ -92,39 +112,35 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -sudo mkdir -p "$userDir/install" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install" -sudo mkdir -p "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install/src" -sudo mkdir -p "$userDir/install/userdata" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown $username:$username "$userDir/install/userdata" +mkdir -p "$userDir/install" >> LOG || die +chown $username:$username "$userDir/install" >> LOG || die +mkdir -p "$userDir/install/src" >> LOG || die +chown $username:$username "$userDir/install/src" >> LOG || die +mkdir -p "$userDir/install/userdata" >> LOG || die +chown $username:$username "$userDir/install/userdata" >> LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -sudo cp -r . "$userDir/install/src" || { printf "\n\nInstall failed.\n"; exit 1; } -sudo chown -R $username:$username "$userDir/install/src" +cp -r . "$userDir/install/src" >> LOG || die +chown -R $username:$username "$userDir/install/src" >> LOG || die # fourth we run npm i tput setaf 8 printf '%s\n' " - Running npm i..." tput sgr0 tput sc -export NODE_ENV=production || { printf "\n\nInstall failed.\n"; exit 1; } -sudo runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' # This is probably a bit overkill to have --only=... but better safe than sorry? -if [ $? -ne 0 ]; then - printf "\n\nInstall failed.\n" - exit 1 -fi +export NODE_ENV=production >> LOG || die +runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' >> LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." tput sgr0 -sudo cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service -sudo systemctl daemon-reload +cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service >> LOG || die +systemctl daemon-reload >> LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" -- cgit v1.2.3 From 3dd9774e5d76447465b10023af42c01286093424 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:03:48 +0200 Subject: :construction: Redirect ALL output to the LOGFILE and not 'LOG' --- bin/install.sh | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 62077a7..e9c79cd 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -7,7 +7,7 @@ printf '\e[93m%s\e[0m\n\n' "---------------------" LOG="/tmp/luxcena-neo.install.log" touch $LOG -echo "Starting Luxcena-neo installer..." >> LOG +echo "Starting Luxcena-neo installer..." &>> $LOG if [ "$EUID" -ne 0 ]; then echo "You need to run this script as root." @@ -51,8 +51,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq update >> LOG || die - apt-get -y -qq upgrade >> LOG || die + apt-get -y -qq update &>> $LOG || die + apt-get -y -qq upgrade &>> $LOG || die tput rc; tput ed fi @@ -60,7 +60,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq install nodejs scons python-dev swig >> LOG || die + apt-get -y -qq install nodejs scons python-dev swig &>> $LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" @@ -104,7 +104,7 @@ if [ $? -eq 0 ]; then echo "User already exists, continuing..." else #pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) - useradd -m $username >> LOG || die + useradd -m $username &>> $LOG || die fi # First we make our directories @@ -112,35 +112,35 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -mkdir -p "$userDir/install" >> LOG || die -chown $username:$username "$userDir/install" >> LOG || die -mkdir -p "$userDir/install/src" >> LOG || die -chown $username:$username "$userDir/install/src" >> LOG || die -mkdir -p "$userDir/install/userdata" >> LOG || die -chown $username:$username "$userDir/install/userdata" >> LOG || die +mkdir -p "$userDir/install" &>> $LOG || die +chown $username:$username "$userDir/install" &>> $LOG || die +mkdir -p "$userDir/install/src" &>> $LOG || die +chown $username:$username "$userDir/install/src" &>> $LOG || die +mkdir -p "$userDir/install/userdata" &>> $LOG || die +chown $username:$username "$userDir/install/userdata" &>> $LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . "$userDir/install/src" >> LOG || die -chown -R $username:$username "$userDir/install/src" >> LOG || die +cp -r . "$userDir/install/src" &>> $LOG || die +chown -R $username:$username "$userDir/install/src" &>> $LOG || die # fourth we run npm i tput setaf 8 printf '%s\n' " - Running npm i..." tput sgr0 tput sc -export NODE_ENV=production >> LOG || die -runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' >> LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? +export NODE_ENV=production &>> $LOG || die +runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." tput sgr0 -cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service >> LOG || die -systemctl daemon-reload >> LOG || die +cp bin/luxcena-neo.service /etc/systemd/system/luxcena-neo.service &>> $LOG || die +systemctl daemon-reload &>> $LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" -- cgit v1.2.3 From abb69ee9cd4139c498ef794480e21446ce8b60bf Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:04:36 +0200 Subject: :construction: Overwrite old logfile --- bin/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index e9c79cd..74b2763 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -6,8 +6,7 @@ tput sgr0 printf '\e[93m%s\e[0m\n\n' "---------------------" LOG="/tmp/luxcena-neo.install.log" -touch $LOG -echo "Starting Luxcena-neo installer..." &>> $LOG +echo "Starting Luxcena-neo installer..." > $LOG if [ "$EUID" -ne 0 ]; then echo "You need to run this script as root." -- cgit v1.2.3 From 7ef7e9efc4d58cc1ed9a91b96bfc63a78bd0473d Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 18 Oct 2018 21:06:20 +0200 Subject: :construction: Make all output appear in logfile --- bin/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 74b2763..2ccb7e0 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -50,8 +50,8 @@ function dlgYN() { dlgYN ". Update your system" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq update &>> $LOG || die - apt-get -y -qq upgrade &>> $LOG || die + apt-get -y update &>> $LOG || die + apt-get -y upgrade &>> $LOG || die tput rc; tput ed fi @@ -59,7 +59,7 @@ fi dlgYN ". Install required packages" res if [ $res -eq 1 ]; then tput sc - apt-get -y -qq install nodejs scons python-dev swig &>> $LOG || die + apt-get -y install nodejs scons python-dev swig &>> $LOG || die if [ $? -eq 0 ]; then tput rc; tput ed printf "✓" -- cgit v1.2.3 From 244c692acada2604876475cfb4deea6da2f1382a Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Sun, 25 Nov 2018 18:22:21 +0100 Subject: :construction: Installer now installs cli --- bin/install.sh | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'bin/install.sh') diff --git a/bin/install.sh b/bin/install.sh index 2ccb7e0..005f073 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -134,6 +134,14 @@ export NODE_ENV=production &>> $LOG || die runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed +# fourth we copy the cli to our bin folder +tput setaf 8 +printf '%s\n' " - Adding cli-script..." +tput sgr0 +cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh &>> $LOG || die +ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo &>> $LOG || die +tput rc; tput ed + # Fifth we add the service files tput setaf 8 printf '%s\n' " - Adding service-file to systemd..." @@ -143,3 +151,4 @@ systemctl daemon-reload &>> $LOG || die # Installation is done! printf '\n\e[5m%s\e[0m\n' "🎉Luxcena-Neo is now installed🎉" +printf 'You can now delete this folder' -- cgit v1.2.3 From 101745c6a4a2c6a186be48182d48814177840c65 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:14:58 +0100 Subject: :construction: Chenged things, and written some docs --- app.js | 13 +- bin/install.sh | 20 +- bin/luxcena-neo-cli.sh | 6 +- bin/post-update.sh | 1 - docs/Contributing/Modules/CompileAndRun.md | 58 ++ docs/README.md | 2 + docs/SUMMARY.md | 10 + docs/Usage/CLI.md | 26 + docs/Usage/Configuration.md | 78 +++ docs/Usage/Install.md | 32 + docs/Usage/README.md | 11 + docs/_book/Contributing/Modules/CompileAndRun.html | 413 +++++++++++++ docs/_book/Usage/CLI.html | 405 ++++++++++++ docs/_book/Usage/Configuration.html | 441 +++++++++++++ docs/_book/Usage/Install.html | 417 +++++++++++++ docs/_book/Usage/index.html | 397 ++++++++++++ .../gitbook/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome/fontawesome-webfont.svg | 685 +++++++++++++++++++++ .../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fonts/fontawesome/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fonts/fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes docs/_book/gitbook/gitbook-plugin-api/api.css | 106 ++++ docs/_book/gitbook/gitbook-plugin-api/api.js | 7 + docs/_book/gitbook/gitbook-plugin-code/plugin.css | 37 ++ docs/_book/gitbook/gitbook-plugin-code/plugin.js | 91 +++ .../gitbook/gitbook-plugin-comment/plugin.css | 143 +++++ .../_book/gitbook/gitbook-plugin-comment/plugin.js | 47 ++ .../gitbook/gitbook-plugin-emphasize/plugin.css | 14 + .../gitbook-plugin-fontsettings/fontsettings.js | 240 ++++++++ .../gitbook-plugin-fontsettings/website.css | 291 +++++++++ docs/_book/gitbook/gitbook-plugin-github/plugin.js | 14 + .../gitbook/gitbook-plugin-highlight/ebook.css | 135 ++++ .../gitbook/gitbook-plugin-highlight/website.css | 434 +++++++++++++ .../gitbook/gitbook-plugin-hints/plugin-hints.css | 9 + .../gitbook/gitbook-plugin-livereload/plugin.js | 11 + docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js | 7 + .../gitbook/gitbook-plugin-lunr/search-lunr.js | 59 ++ .../service-worker-registration.js | 62 ++ .../gitbook-plugin-pretty-term/terminal.css | 31 + .../gitbook/gitbook-plugin-pretty-term/terminal.js | 33 + .../gitbook/gitbook-plugin-search/lunr.min.js | 7 + .../gitbook/gitbook-plugin-search/search-engine.js | 50 ++ .../_book/gitbook/gitbook-plugin-search/search.css | 35 ++ docs/_book/gitbook/gitbook-plugin-search/search.js | 213 +++++++ .../gitbook/gitbook-plugin-sharing/buttons.js | 90 +++ docs/_book/gitbook/gitbook.js | 4 + .../images/apple-touch-icon-precomposed-152.png | Bin 0 -> 4817 bytes docs/_book/gitbook/images/favicon.ico | Bin 0 -> 4286 bytes docs/_book/gitbook/style.css | 9 + docs/_book/gitbook/theme.js | 4 + docs/_book/index.html | 385 ++++++++++++ docs/_book/search_index.json | 1 + docs/_book/service-worker.js | 268 ++++++++ docs/book.json | 10 + .../pythonSupportFiles/LuxcenaNeo/Strip.py | 25 +- 56 files changed, 5865 insertions(+), 22 deletions(-) create mode 100644 docs/Contributing/Modules/CompileAndRun.md create mode 100644 docs/README.md create mode 100644 docs/SUMMARY.md create mode 100644 docs/Usage/CLI.md create mode 100644 docs/Usage/Configuration.md create mode 100644 docs/Usage/Install.md create mode 100644 docs/Usage/README.md create mode 100644 docs/_book/Contributing/Modules/CompileAndRun.html create mode 100644 docs/_book/Usage/CLI.html create mode 100644 docs/_book/Usage/Configuration.html create mode 100644 docs/_book/Usage/Install.html create mode 100644 docs/_book/Usage/index.html create mode 100644 docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.css create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.js create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-emphasize/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-github/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/ebook.css create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-hints/plugin-hints.css create mode 100644 docs/_book/gitbook/gitbook-plugin-livereload/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/search-lunr.js create mode 100644 docs/_book/gitbook/gitbook-plugin-offline/service-worker-registration.js create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.css create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search-engine.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.css create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.js create mode 100644 docs/_book/gitbook/gitbook-plugin-sharing/buttons.js create mode 100644 docs/_book/gitbook/gitbook.js create mode 100644 docs/_book/gitbook/images/apple-touch-icon-precomposed-152.png create mode 100644 docs/_book/gitbook/images/favicon.ico create mode 100644 docs/_book/gitbook/style.css create mode 100644 docs/_book/gitbook/theme.js create mode 100644 docs/_book/index.html create mode 100644 docs/_book/search_index.json create mode 100644 docs/_book/service-worker.js create mode 100644 docs/book.json (limited to 'bin/install.sh') diff --git a/app.js b/app.js index 5cdfcbd..264a0c1 100644 --- a/app.js +++ b/app.js @@ -7,7 +7,7 @@ let io = require("socket.io").listen(server); // Firstly we set up all globals, check that the usrData dir exists, if not, we run the setup let srcDir = __dirname; -let installDir = "/home/lux-neo/install/" +let installDir = "/home/lux-neo/" if (process.argv.length >= 3) { installDir = process.argv[2]; } let dataDir = installDir + "/userdata/"; if (!fse.existsSync(dataDir)) { throw new Error("APPDIR not found! Exiting..."); } @@ -55,21 +55,22 @@ fse.ensureDirSync(dataDir + "/usrCode/"); fse.ensureDirSync(dataDir + "/remoteCode/"); // Generate config-files if (!fse.existsSync(dataDir + "/config/versionChecker.json")) { - fse.writeJsonSync(dataDir + "/config/versionChecker.json", { + fse.writeFileSync(dataDir + "/config/versionChecker.json", JSON.stringify({ "branch": "dev", "checkInterval": 5 - }) + }, null, 4)); } if (!fse.existsSync(dataDir + "/config/strip.json")) { - fse.writeJsonSync(dataDir + "/config/strip.json", { - "segments": [9, 8, 8, 8, 8, 8, 4], + fse.writeFileSync(dataDir + "/config/strip.json", JSON.stringify({ + "segments": [], + "matrix": [], "segmentConfiguration": "snake", "led_pin": 18, "led_freq_hz": 800000, "led_dma": 10, "led_invert": false, "led_channel": 0 - }) + }, null, 4)); } diff --git a/bin/install.sh b/bin/install.sh index 005f073..cd4f07b 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -111,19 +111,19 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -mkdir -p "$userDir/install" &>> $LOG || die -chown $username:$username "$userDir/install" &>> $LOG || die -mkdir -p "$userDir/install/src" &>> $LOG || die -chown $username:$username "$userDir/install/src" &>> $LOG || die -mkdir -p "$userDir/install/userdata" &>> $LOG || die -chown $username:$username "$userDir/install/userdata" &>> $LOG || die +#mkdir -p "$userDir/install" &>> $LOG || die +#chown $username:$username "$userDir/install" &>> $LOG || die +mkdir -p "$userDir/src" &>> $LOG || die +chown $username:$username "$userDir/src" &>> $LOG || die +mkdir -p "$userDir/userdata" &>> $LOG || die +chown $username:$username "$userDir/userdata" &>> $LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . "$userDir/install/src" &>> $LOG || die -chown -R $username:$username "$userDir/install/src" &>> $LOG || die +cp -r . "$userDir/src" &>> $LOG || die +chown -R $username:$username "$userDir/src" &>> $LOG || die # fourth we run npm i tput setaf 8 @@ -131,7 +131,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production &>> $LOG || die -runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? +runuser -l $username -c 'npm --prefix ~/src install ~/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # fourth we copy the cli to our bin folder @@ -139,7 +139,7 @@ tput setaf 8 printf '%s\n' " - Adding cli-script..." tput sgr0 cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh &>> $LOG || die -ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo &>> $LOG || die +ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/lux-neo &>> $LOG || die tput rc; tput ed # Fifth we add the service files diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 761459e..5d960c0 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -71,7 +71,7 @@ if [ "$action" == "update" ]; then runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/luxcena-neo-install/bin/post-update.sh\n" + printf "sudo /home/lux-neo/install/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo @@ -100,8 +100,12 @@ elif [ "$action" == "uninstall" ]; then printf "Well, some dependencies still exists. Those are:\n" printf " - rpi_ws281x-library\n" printf " - packages (nodejs scons python-dev swig)\n" + tput sgr0 fi +elif [ "$action" == "conf" ]; then + nano /home/lux-neo/luxcena-neo-install/userdata/config/strip.json + elif [ "$action" == "start" ]; then systemctl start luxcena-neo elif [ "$action" == "stop" ]; then diff --git a/bin/post-update.sh b/bin/post-update.sh index e0e8bc1..59b1fe9 100644 --- a/bin/post-update.sh +++ b/bin/post-update.sh @@ -1,5 +1,4 @@ -cd /home/lux-neo/luxcena-neo-install cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh echo "Post-update done..." diff --git a/docs/Contributing/Modules/CompileAndRun.md b/docs/Contributing/Modules/CompileAndRun.md new file mode 100644 index 0000000..535ed5f --- /dev/null +++ b/docs/Contributing/Modules/CompileAndRun.md @@ -0,0 +1,58 @@ +## Index +--- +## Locals + +### var `pythonSupportFiles` + +Points to the files for our python support code. They should be in a subdir of the module itself. + +## Exported + +### class `Python` + +This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code. + +### method `Python.constructor` + +Takes one parameter, which is the full path to the folder where the script is located. + +When initializing the class, this will be called. Can be done like this: + +```javascript +new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +``` + +### method `Python.compile` + +This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script. + +### method `Python.run` + +Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below: + +```javascript +let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +​ +// When data is printed from the python-script +sc.on("stdout::data", (_stdout) => { }); +// Last write when script closes, any exiting messages +sc.on("stdout::end", (_stdout) => { }); +// When something is printed from the python-script to the error-out. Usually when a `throw` is called +sc.on("stderr::out", (_stderr) => { }); +// Last words when process is dying from an error :`( +sc.on("stderr::end", (_stderr) => { }); +// When script exits, _code is the exit-code +sc.on("close", (_code) => { }); +``` + +## Python + +This is the support-files for user-made scripts. + +## Entry.py + +The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located): + +``` +python entry.py +``` diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3d07efe --- /dev/null +++ b/docs/README.md @@ -0,0 +1,2 @@ +# Introduction + diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..84228c7 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,10 @@ +# Summary + +* [Introduction](README.md) +* [Usage](Usage/README.md) + * [Install](Usage/Install.md) + * [Configuration](Usage/Configuration.md) + * [CLI](Usage/CLI.md) +* Contributing + * Modules + * [CompileAndRun](Contributing/Modules/CompileAndRun.md) diff --git a/docs/Usage/CLI.md b/docs/Usage/CLI.md new file mode 100644 index 0000000..f689a3d --- /dev/null +++ b/docs/Usage/CLI.md @@ -0,0 +1,26 @@ +# Command line interface +--- + +This gets installed in the `/usr/bin` directory, and can be called by: +```bash +$ luxcena-neo.sh +``` +or is alias +```bash +$ lux-neo +``` +{% hint style='danger' %} +This CLI assumes root access, so please run it with `sudo` +{% endhint %} + +## Options +#### `sudo lux-neo uninstall` +Uninstall the whole thing. You will have to remove this script yourself. +#### `sudo lux-neo update` +Update to the newest version on the current branch. +#### `sudo lux-neo conf` +Open the strip-config in `nano`. +#### `sudo lux-neo start` +Start the server. +#### `sudo lux-neo stop` +Stop the server. diff --git a/docs/Usage/Configuration.md b/docs/Usage/Configuration.md new file mode 100644 index 0000000..c9750d0 --- /dev/null +++ b/docs/Usage/Configuration.md @@ -0,0 +1,78 @@ +# Configuration + +How to setup luxcena-neo to work with your setup + +--- + +```bash +$ sudo lux-neo conf +``` + +When running the command above, a config file should appear in the editor 'nano'. +```json +{ + "led_count": 53, + "segments": [], + "matrix": [], + "segmentConfiguration": "snake", + "led_pin": 18, + "led_freq_hz": 800000, + "led_dma": 10, + "led_invert": false, + "led_channel": 0 +} +``` +{% hint style='tip' %} +If you rather want to use vim or another editor, the file is at `/home/lux-neo/userdata/config/strip.json` +{% endhint %} + +## led_count + +This is the number of LED's you want to control. + +## segments + +This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling. + +When summing this list, it should check out with the "led-count"-option. + +## matrix + +This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this: + +```json +"segments": [10, 10, 10, 10, 10, 10, 10, 10, 10], +"matrix": [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8] +] +``` +{% hint style='danger' %} +If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration' +{% endhint %} + +## segmentconfiguration + +If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults: + +``` +"snake": +"line": +"random": +``` + +## led_pin +If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port. + +## led_dma +{% hint style='danger' %} +If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash. +{% endhint %} +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10! + +## led_invert +This should not be touched, unless you are using a inverting level converter. + +## led_channel +Leave this as default unless you know what you are doing. diff --git a/docs/Usage/Install.md b/docs/Usage/Install.md new file mode 100644 index 0000000..ced241a --- /dev/null +++ b/docs/Usage/Install.md @@ -0,0 +1,32 @@ +# Installation + +If you want to install luxcena-neo to use it, these are the instructions: + +--- + +## Requirements +* The luxcena-shield +* Access to the raspberry pi (SSH or direct) +* Root access (preferably through the `sudo` command) + +## Install +1. Start with logging into your Raspberry Pi +2. Run these commands +```bash +$ git clone https://github.com/JakobST1n/Luxcena-Neo +$ cd Luxcena-Neo +$ sudo ./bin/install.sh +``` +3. Follow the instructions on screen. You should answer yes to most of the questions. +4. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command: +```bash +$ tail -n 10 -f /tmp/luxcena-neo.install.log +``` +This is also where you will find possible reasons for a failed install. +4. Luxcena-Neo should now be installed. Start it with this command +```bash +$ luxcena-neo start +``` + +## Troubleshooting +We haven't encountered any troubles yet, but once we do, we will post fix'es here. diff --git a/docs/Usage/README.md b/docs/Usage/README.md new file mode 100644 index 0000000..ce62034 --- /dev/null +++ b/docs/Usage/README.md @@ -0,0 +1,11 @@ +# Usage + + +## [Install](/Usage/Install.md) +Want to install luxcena-neo? This is the guide! + +## [Configuration](/Usage/Configuration.md) +Just installed luxcena-neo, or you have changed your setup? This is the guide! + +## [CLI](/Usage/CLI.md) +Ready to start the thing? Or change something? diff --git a/docs/_book/Contributing/Modules/CompileAndRun.html b/docs/_book/Contributing/Modules/CompileAndRun.html new file mode 100644 index 0000000..b1c3f48 --- /dev/null +++ b/docs/_book/Contributing/Modules/CompileAndRun.html @@ -0,0 +1,413 @@ + + + + + + + CompileAndRun · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+
+ +
+ +

Index

+
+

Locals

+

var pythonSupportFiles

+

Points to the files for our python support code. They should be in a subdir of the module itself.

+

Exported

+

class Python

+

This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.

+

method Python.constructor

+

Takes one parameter, which is the full path to the folder where the script is located.

+

When initializing the class, this will be called. Can be done like this:

+
new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+
+

method Python.compile

+

This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.

+

method Python.run

+

Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:

+
let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+​
+// When data is printed from the python-script
+sc.on("stdout::data", (_stdout) => { });
+// Last write when script closes, any exiting messages
+sc.on("stdout::end", (_stdout) => { });
+// When something is printed from the python-script to the error-out. Usually when a `throw` is called
+sc.on("stderr::out", (_stderr) => { });
+// Last words when process is dying from an error :`(
+sc.on("stderr::end", (_stderr) => { });
+// When script exits, _code is the exit-code
+sc.on("close", (_code) => { });
+
+

Python

+

This is the support-files for user-made scripts.

+

Entry.py

+

The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):

+
python entry.py <pathToAppRoot>
+
+ +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    + +
    + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/CLI.html b/docs/_book/Usage/CLI.html new file mode 100644 index 0000000..d56a2f6 --- /dev/null +++ b/docs/_book/Usage/CLI.html @@ -0,0 +1,405 @@ + + + + + + + CLI · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    Command line interface

    +
    +

    This gets installed in the /usr/bin directory, and can be called by:

    +
    $ luxcena-neo.sh
    +
    +

    or is alias

    +
    $ lux-neo
    +
    +

    This CLI assumes root access, so please run it with sudo

    +

    +

    Options

    +

    sudo lux-neo uninstall

    +

    Uninstall the whole thing. You will have to remove this script yourself.

    +

    sudo lux-neo update

    +

    Update to the newest version on the current branch.

    +

    sudo lux-neo conf

    +

    Open the strip-config in nano.

    +

    sudo lux-neo start

    +

    Start the server.

    +

    sudo lux-neo stop

    +

    Stop the server.

    + + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Configuration.html b/docs/_book/Usage/Configuration.html new file mode 100644 index 0000000..ec2a8cc --- /dev/null +++ b/docs/_book/Usage/Configuration.html @@ -0,0 +1,441 @@ + + + + + + + Configuration · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      Configuration

      +

      How to setup luxcena-neo to work with your setup

      +
      +
      $ sudo lux-neo conf
      +
      +

      When running the command above, a config file should appear in the editor 'nano'.

      +
      {
      +    "led_count": 53,
      +    "segments": [],
      +    "matrix": [],
      +    "segmentConfiguration": "snake",
      +    "led_pin": 18,
      +    "led_freq_hz": 800000,
      +    "led_dma": 10,
      +    "led_invert": false,
      +    "led_channel": 0
      +}
      +
      +

      If you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json

      +

      +

      led_count

      +

      This is the number of LED's you want to control.

      +

      segments

      +

      This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.

      +

      When summing this list, it should check out with the "led-count"-option.

      +

      matrix

      +

      This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:

      +
      "segments": [10, 10, 10, 10, 10, 10, 10, 10, 10],
      +"matrix": [
      +    [0, 1, 2],
      +    [3, 4, 5],
      +    [6, 7, 8]
      +]
      +
      +

      If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'

      +

      +

      segmentconfiguration

      +

      If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:

      +
      "snake":
      +"line":
      +"random":
      +

      led_pin

      +

      If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.

      +

      led_dma

      +

      If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.

      +
      +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!

      +

      led_invert

      +

      This should not be touched, unless you are using a inverting level converter.

      +

      led_channel

      +

      Leave this as default unless you know what you are doing.

      + + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + + + + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Install.html b/docs/_book/Usage/Install.html new file mode 100644 index 0000000..a3af5e1 --- /dev/null +++ b/docs/_book/Usage/Install.html @@ -0,0 +1,417 @@ + + + + + + + Install · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        Installation

        +

        If you want to install luxcena-neo to use it, these are the instructions:

        +
        +

        Requirements

        +
          +
        • The luxcena-shield
        • +
        • Access to the raspberry pi (SSH or direct)
        • +
        • Root access (preferably through the sudo command)
        • +
        +

        Install

        +
          +
        1. Start with logging into your Raspberry Pi
        2. +
        3. Run these commands
          $ git clone https://github.com/JakobST1n/Luxcena-Neo
          +$ cd Luxcena-Neo
          +$ sudo ./bin/install.sh
          +
          +
        4. +
        5. Follow the instructions on screen. You should answer yes to most of the questions.
        6. +
        7. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:
          $ tail -n 10 -f /tmp/luxcena-neo.install.log
          +
          +This is also where you will find possible reasons for a failed install.
        8. +
        9. Luxcena-Neo should now be installed. Start it with this command
          $ luxcena-neo start
          +
          +
        10. +
        +

        Troubleshooting

        +

        We haven't encountered any troubles yet, but once we do, we will post fix'es here.

        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/index.html b/docs/_book/Usage/index.html new file mode 100644 index 0000000..a461209 --- /dev/null +++ b/docs/_book/Usage/index.html @@ -0,0 +1,397 @@ + + + + + + + Usage · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          Usage

          +

          Install

          +

          Want to install luxcena-neo? This is the guide!

          +

          Configuration

          +

          Just installed luxcena-neo, or you have changed your setup? This is the guide!

          +

          CLI

          +

          Ready to start the thing? Or change something?

          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000..d4de13e Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000..c7b00d2 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000..8b66187 --- /dev/null +++ b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000..f221e50 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000..6e7483c Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000..7eb74fd Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.css b/docs/_book/gitbook/gitbook-plugin-api/api.css new file mode 100644 index 0000000..4bcd88e --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.css @@ -0,0 +1,106 @@ +.markdown-section { + overflow: visible !important; +} + +.api-container { + margin: 0px 0px; + box-shadow: 0px 1px 3px rgba(0,0,0,0.25); + transition: margin 300ms, box-shadow 300ms; +} + +.api-container.expanded { + margin: 0px -16px; + box-shadow: 0px 6px 16px rgba(0,0,0,0.25); +} + +.api-container .api-header { + line-height: 26px; + padding: 10px; + border-bottom: 1px solid #EEEEEE; + cursor: pointer; + display: flex; + flex-direction: row; +} + +.api-container .api-header small { + background-color: #444444; + background-image: linear-gradient(45deg, rgba(0,0,0,0) 50%, rgba(0, 0, 0, 0.1) 50%); + color: #FFFFFF; + font-size: 9px !important; + margin-right: 8px; + padding: 0px 4px; + font-weight: bold; + display: block; + line-height: 28px; + height: 28px; + width: 46px; + text-align: center; +} + +.api-container .api-header small.get { + background-color: #226ca0; +} + +.api-container .api-header small.put { + background-color: #a08022; +} + +.api-container .api-header small.post { + background-color: #46a022; +} + +.api-container .api-header small.delete { + background-color: #a02222; +} + +.api-container .api-header h2 { + display: block; + flex: 1; + margin: 0; + padding: 0; + font-size: 16px; + font-weight: normal; + white-space: nowrap; + line-height: 28px; + height: 26px; +} + +.api-container .api-header span { + display: block; + color: #266D9E; + font-size: 11px; + padding: 0px 8px; + border: 1px solid #266D9E; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-left: 10px; +} + +.api-container .api-content { + height: 0px; + overflow: hidden; +} + +.api-container .api-content div { + padding: 20px 20px 10px 20px; +} + +.api-container .api-content div h3 { + padding: 14px 0px; + margin: 0px; + border-top: 1px solid #EEE; + color: #537186; + font-size: 13px; + text-transform: uppercase; + letter-spacing: 1px; +} + +.api-container .api-content div pre { + line-height: 18px; + font-size: 15px; +} + +.api-container.expanded .api-content { + height: auto; +} diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.js b/docs/_book/gitbook/gitbook-plugin-api/api.js new file mode 100644 index 0000000..ebf6acf --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.js @@ -0,0 +1,7 @@ +require(["gitbook"], function(gitbook) { + gitbook.events.bind("page.change", function() { + $(".api-header").click(function(event) { + $(event.currentTarget).parent().toggleClass('expanded'); + }); + }); +}); diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.css b/docs/_book/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 0000000..a68fcdc --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.js b/docs/_book/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 0000000..555d724 --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/search_index.json b/docs/_book/search_index.json new file mode 100644 index 0000000..0d84795 --- /dev/null +++ b/docs/_book/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["introduct"],"Usage/":["chang","cli","configur","guide!","instal","luxcena","neo,","neo?","readi","setup?","something?","start","thing?","usag","want"],"Usage/Install.html":["$","(prefer","(ssh","./bin/install.sh","/tmp/luxcena","10","access","anoth","answer","be","bit","cd","clone","command$","command)","command:$","commands$","console.","direct)","do,","encount","f","fail","find","fix'","follow","git","hang,","haven't","here.","https://github.com/jakobst1n/luxcena","instal","install.","installed.","instruct","instructions:","it,","log","luxcena","more","n","neo","neo.install.log","now","onc","open","output","output.","pi","possibl","post","process","questions.","raspberri","reason","requir","root","run","screen.","see","seem","sent","session,","shield","start","sudo","tail","termin","through","troubl","troubleshoot","us","verbos","want","ye","yet,"],"Usage/Configuration.html":["\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","/home/lux","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]","[","[0,","[10,","[3,","[6,","[],","]","above,","add","anoth","appear","arrang","array,","back","badli","chang","channel","check","command","conf","config","configur","connect","control.","controlling.","converter.","count","count\"","crash.","data","default","defaults:","dimenson","din","dma","doing.","don't","editor","editor,","element","else,","empti","enter","exampl","fail.","fall","false,","file","gener","gpio","here","invert","it.","know","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line.","list,","look","lux","luxcena","matrix","need","neo","neo/userdata/config/strip.json","newer","newer),","number","on","option","option.","out","pixel'","pleas","port","port.","reason","recommend","refer","repres","rpi","run","segment","segment,","segmentconfigur","segments.","set","setup","setup.","shield,","shouldn't","simpl","someth","something,","square,","start","stream.","strongli","sudo","sum","system","them.","this:","touched,","two","unless","up","us","vim","want","work","worri","{","}"],"Usage/CLI.html":["$","/usr/bin","access,","alia","assum","branch.","by:","call","cli","command","conf","config","current","directory,","get","instal","interfac","line","lux","luxcena","nano.","neo","neo.sh","newest","open","option","pleas","remov","root","run","script","server.","start","stop","strip","sudo","thing.","uninstal","updat","version","whole","yourself."],"Contributing/Modules/CompileAndRun.html":["\"/usrdata/usrcode/example\");","(_code)","(_stderr)","(_stdout)","(where","+","//",":`(","=","=>","_code","`throw`","add","app","app.j","attach","below:","build","call","called.","class","class,","closes,","code","code.","compileandrun","compilerun.python(global.dirswap","contain","data","delet","done","dy","entri","entry.pi","error","event","exampl","exit","exits,","export","file","file.","folder","folder,","folder.","full","index","initi","itself.","languag","last","later.","listner","local","located):","located.","made","make","messag","method","modul","move","new","next","object.","old","on","one.","out.","parameter,","path","place","point","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","readi","requir","root","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","script","script,","script.","script.py,","scripts.","someth","spawn","start","subdir","support","take","this:","us","user","usual","var","word","write","{","});","​"]},"length":6},"tokenStore":{"root":{"0":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"!":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.0380952380952381}}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"8":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"2":{"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"4":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"5":{"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"7":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"8":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":11}}}}}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/":{"ref":"Usage/","tf":0.15},"Usage/Install.html":{"ref":"Usage/Install.html","tf":10.041666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"l":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":10.015873015873016}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"i":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"u":{"docs":{},"r":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":10.004761904761905}}}}}}},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},":":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":10}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"r":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"!":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"p":{"docs":{},"i":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"v":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}},"d":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"n":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"t":{"docs":{},"h":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},",":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"s":{"docs":{},"h":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"w":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"x":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}}}}},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"a":{"docs":{},"s":{"docs":{},"p":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"u":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}},"p":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},"u":{"docs":{},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"m":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.03125},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"o":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}},"c":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03409090909090909}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"p":{"docs":{},"y":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},":":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"d":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}}}},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"b":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"p":{"docs":{},"a":{"docs":{},"w":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"e":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"w":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"u":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.03333333333333333},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"a":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":10.05}}}},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}}},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"r":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}},"(":{"3":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"s":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"/":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"d":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"p":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},".":{"docs":{},"j":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"t":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"b":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"y":{"docs":{},":":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"o":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"r":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"y":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"i":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"f":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"l":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"x":{"docs":{},"'":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"l":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"k":{"docs":{},"o":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"1":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"v":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"c":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}},"u":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},"x":{"docs":{},"e":{"docs":{},"l":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}},"t":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03977272727272727}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"i":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"a":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}}},"\"":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"_":{"docs":{},"h":{"docs":{},"z":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"'":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"6":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"{":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}},"}":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}}},"+":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},":":{"docs":{},"`":{"docs":{},"(":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"=":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},">":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"`":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"`":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"​":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"length":805},"corpusTokens":["\"/usrdata/usrcode/example\");","\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","(_code)","(_stderr)","(_stdout)","(prefer","(ssh","(where","+","./bin/install.sh","//","/home/lux","/tmp/luxcena","/usr/bin","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]",":`(","=","=>","[","[0,","[10,","[3,","[6,","[],","]","_code","`throw`","above,","access","access,","add","alia","anoth","answer","app","app.j","appear","arrang","array,","assum","attach","back","badli","be","below:","bit","branch.","build","by:","call","called.","cd","chang","channel","check","class","class,","cli","clone","closes,","code","code.","command","command$","command)","command:$","commands$","compileandrun","compilerun.python(global.dirswap","conf","config","configur","connect","console.","contain","control.","controlling.","converter.","count","count\"","crash.","current","data","default","defaults:","delet","dimenson","din","direct)","directory,","dma","do,","doing.","don't","done","dy","editor","editor,","element","else,","empti","encount","enter","entri","entry.pi","error","event","exampl","exit","exits,","export","f","fail","fail.","fall","false,","file","file.","find","fix'","folder","folder,","folder.","follow","full","gener","get","git","gpio","guide!","hang,","haven't","here","here.","https://github.com/jakobst1n/luxcena","index","initi","instal","install.","installed.","instruct","instructions:","interfac","introduct","invert","it,","it.","itself.","know","languag","last","later.","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line","line.","list,","listner","local","located):","located.","log","look","lux","luxcena","made","make","matrix","messag","method","modul","more","move","n","nano.","need","neo","neo,","neo.install.log","neo.sh","neo/userdata/config/strip.json","neo?","new","newer","newer),","newest","next","now","number","object.","old","on","onc","one.","open","option","option.","out","out.","output","output.","parameter,","path","pi","pixel'","place","pleas","point","port","port.","possibl","post","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","questions.","raspberri","readi","reason","recommend","refer","remov","repres","requir","root","rpi","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","screen.","script","script,","script.","script.py,","scripts.","see","seem","segment","segment,","segmentconfigur","segments.","sent","server.","session,","set","setup","setup.","setup?","shield","shield,","shouldn't","simpl","someth","something,","something?","spawn","square,","start","stop","stream.","strip","strongli","subdir","sudo","sum","support","system","tail","take","termin","them.","thing.","thing?","this:","through","touched,","troubl","troubleshoot","two","uninstal","unless","up","updat","us","usag","user","usual","var","verbos","version","vim","want","whole","word","work","worri","write","ye","yet,","yourself.","{","}","});","​"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"Introduction\n"},"Usage/":{"url":"Usage/","title":"Usage","keywords":"","body":"Usage\nInstall\nWant to install luxcena-neo? This is the guide!\nConfiguration\nJust installed luxcena-neo, or you have changed your setup? This is the guide!\nCLI\nReady to start the thing? Or change something?\n"},"Usage/Install.html":{"url":"Usage/Install.html","title":"Install","keywords":"","body":"Installation\nIf you want to install luxcena-neo to use it, these are the instructions:\n\nRequirements\n\nThe luxcena-shield\nAccess to the raspberry pi (SSH or direct)\nRoot access (preferably through the sudo command)\n\nInstall\n\nStart with logging into your Raspberry Pi\nRun these commands$ git clone https://github.com/JakobST1n/Luxcena-Neo\n$ cd Luxcena-Neo\n$ sudo ./bin/install.sh\n\n\nFollow the instructions on screen. You should answer yes to most of the questions.\nThe install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:$ tail -n 10 -f /tmp/luxcena-neo.install.log\n\nThis is also where you will find possible reasons for a failed install.\nLuxcena-Neo should now be installed. Start it with this command$ luxcena-neo start\n\n\n\nTroubleshooting\nWe haven't encountered any troubles yet, but once we do, we will post fix'es here.\n"},"Usage/Configuration.html":{"url":"Usage/Configuration.html","title":"Configuration","keywords":"","body":"Configuration\nHow to setup luxcena-neo to work with your setup\n\n$ sudo lux-neo conf\n\nWhen running the command above, a config file should appear in the editor 'nano'.\n{\n \"led_count\": 53,\n \"segments\": [],\n \"matrix\": [],\n \"segmentConfiguration\": \"snake\",\n \"led_pin\": 18,\n \"led_freq_hz\": 800000,\n \"led_dma\": 10,\n \"led_invert\": false,\n \"led_channel\": 0\n}\n\nIf you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json\n\nled_count\nThis is the number of LED's you want to control.\nsegments\nThis is a simple list, here you should add the lenghts of all your segments. Please enter the \"real\" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.\nWhen summing this list, it should check out with the \"led-count\"-option.\nmatrix\nThis is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:\n\"segments\": [10, 10, 10, 10, 10, 10, 10, 10, 10],\n\"matrix\": [\n [0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]\n]\n\nIf you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'\n\nsegmentconfiguration\nIf the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:\n\"snake\":\n\"line\":\n\"random\":\nled_pin\nIf using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.\nled_dma\nIf using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.\n\nThis is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!\nled_invert\nThis should not be touched, unless you are using a inverting level converter.\nled_channel\nLeave this as default unless you know what you are doing.\n"},"Usage/CLI.html":{"url":"Usage/CLI.html","title":"CLI","keywords":"","body":"Command line interface\n\nThis gets installed in the /usr/bin directory, and can be called by:\n$ luxcena-neo.sh\n\nor is alias\n$ lux-neo\n\nThis CLI assumes root access, so please run it with sudo\n\nOptions\nsudo lux-neo uninstall\nUninstall the whole thing. You will have to remove this script yourself.\nsudo lux-neo update\nUpdate to the newest version on the current branch.\nsudo lux-neo conf\nOpen the strip-config in nano.\nsudo lux-neo start\nStart the server.\nsudo lux-neo stop\nStop the server.\n"},"Contributing/Modules/CompileAndRun.html":{"url":"Contributing/Modules/CompileAndRun.html","title":"CompileAndRun","keywords":"","body":"Index\n\nLocals\nvar pythonSupportFiles\nPoints to the files for our python support code. They should be in a subdir of the module itself.\nExported\nclass Python\nThis is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.\nmethod Python.constructor\nTakes one parameter, which is the full path to the folder where the script is located.\nWhen initializing the class, this will be called. Can be done like this:\nnew compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n\nmethod Python.compile\nThis deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.\nmethod Python.run\nSpawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:\nlet sc = new compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n​\n// When data is printed from the python-script\nsc.on(\"stdout::data\", (_stdout) => { });\n// Last write when script closes, any exiting messages\nsc.on(\"stdout::end\", (_stdout) => { });\n// When something is printed from the python-script to the error-out. Usually when a `throw` is called\nsc.on(\"stderr::out\", (_stderr) => { });\n// Last words when process is dying from an error :`(\nsc.on(\"stderr::end\", (_stderr) => { });\n// When script exits, _code is the exit-code\nsc.on(\"close\", (_code) => { });\n\nPython\nThis is the support-files for user-made scripts.\nEntry.py\nThe entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):\npython entry.py \n"}}} \ No newline at end of file diff --git a/docs/_book/service-worker.js b/docs/_book/service-worker.js new file mode 100644 index 0000000..33b41cc --- /dev/null +++ b/docs/_book/service-worker.js @@ -0,0 +1,268 @@ +/** + * Copyright 2016 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY! +// This file should be overwritten as part of your build process. +// If you need to extend the behavior of the generated service worker, the best approach is to write +// additional code and include it using the importScripts option: +// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring +// +// Alternatively, it's possible to make changes to the underlying template file and then use that as the +// new base for generating output, via the templateFilePath option: +// https://github.com/GoogleChrome/sw-precache#templatefilepath-string +// +// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any +// changes made to this original template file with your modified copy. + +// This generated service worker JavaScript will precache your site's resources. +// The code needs to be saved in a .js file at the top-level of your site, and registered +// from your pages in order to be used. See +// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js +// for an example of how you can register this script and handle various service worker events. + +/* eslint-env worker, serviceworker */ +/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ +'use strict'; + +var precacheConfig = [["/Contributing/Modules/CompileAndRun.html","d56c0c18391e35ed0d86b3c6b668f79a"],["/Usage/CLI.html","a0333969eb1b171327f4016a5dbf451c"],["/Usage/Configuration.html","f4b4b0796b174beb62948b8c80fd7363"],["/Usage/Install.html","ee494f0c3c4ad33d139e6f3c5113b52f"],["/Usage/index.html","ad4c537f60d4dd0ea998ded7aa4027bd"],["/gitbook/fonts/fontawesome/fontawesome-webfont.eot","25a32416abee198dd821b0b17a198a8f"],["/gitbook/fonts/fontawesome/fontawesome-webfont.svg","d7c639084f684d66a1bc66855d193ed8"],["/gitbook/fonts/fontawesome/fontawesome-webfont.ttf","1dc35d25e61d819a9c357074014867ab"],["/gitbook/fonts/fontawesome/fontawesome-webfont.woff","c8ddf1e5e5bf3682bc7bebf30f394148"],["/gitbook/gitbook-plugin-api/api.css","ad443308d0937629d2811cff9053e0c2"],["/gitbook/gitbook-plugin-api/api.js","b592adcca0c3d691f3a351b05e62c77a"],["/gitbook/gitbook-plugin-code/plugin.css","81aeb06c3e8d1c221773e63fe05f737a"],["/gitbook/gitbook-plugin-code/plugin.js","2a3bab062a1c3446333f10c60e8643a1"],["/gitbook/gitbook-plugin-comment/plugin.css","5291855572a41c85319d21a4b45f2eee"],["/gitbook/gitbook-plugin-comment/plugin.js","dc48b2f0bd1e4bdd1ad03d60d32c9bd6"],["/gitbook/gitbook-plugin-emphasize/plugin.css","6c90145b226c807ebbb334bb7d94d8ee"],["/gitbook/gitbook-plugin-fontsettings/fontsettings.js","fab8f6412ce18bb367635b1bcae503ca"],["/gitbook/gitbook-plugin-fontsettings/website.css","056a6db3eef3553a78f3b7e02356b2e7"],["/gitbook/gitbook-plugin-github/plugin.js","93ff35be0de181d440c84e8f6d76ab45"],["/gitbook/gitbook-plugin-highlight/ebook.css","fa203ae16ad9f01f4d20061fb9e7a6cc"],["/gitbook/gitbook-plugin-highlight/website.css","acce01e3e11cbd4b3882e7732d81f954"],["/gitbook/gitbook-plugin-hints/plugin-hints.css","35cad665bf4ba951a2f3a1d3253b6089"],["/gitbook/gitbook-plugin-livereload/plugin.js","9e48eceeaa9ee3f1f734eddd3dfe04da"],["/gitbook/gitbook-plugin-lunr/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-lunr/search-lunr.js","4e91f557c3d72be045b9e146c2bc90bc"],["/gitbook/gitbook-plugin-offline/service-worker-registration.js","0b4c35226075896152de214f8860b76e"],["/gitbook/gitbook-plugin-pretty-term/terminal.css","02c933b557fe724dcadd3dfa43dfc33c"],["/gitbook/gitbook-plugin-pretty-term/terminal.js","424e08c8a0b2f3d9e6706f15af29a714"],["/gitbook/gitbook-plugin-search/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-search/search-engine.js","59ed9456a958a2930326955747048f8a"],["/gitbook/gitbook-plugin-search/search.css","6c8330e8aadd979bb37f872182257bdd"],["/gitbook/gitbook-plugin-search/search.js","5ba7dbf7c0e78b02dc48f83d55729e36"],["/gitbook/gitbook-plugin-sharing/buttons.js","e7c1c051d685b9e7530c1a6675e6b119"],["/gitbook/gitbook.js","e53bf9037b1d1c9810486ef4c5493624"],["/gitbook/images/apple-touch-icon-precomposed-152.png","59313d171157503f5de7fd7e07f3c495"],["/gitbook/style.css","88a3a50e3559bc577c1be0de4fcc6c6d"],["/gitbook/theme.js","176e71ac3bf185b7f08e0f6cb919f1e8"],["/index.html","5447a536c53fe2867b9d030ff8b6ec01"]]; +var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : ''); + + +var ignoreUrlParametersMatching = [/^utm_/]; + + + +var addDirectoryIndex = function (originalUrl, index) { + var url = new URL(originalUrl); + if (url.pathname.slice(-1) === '/') { + url.pathname += index; + } + return url.toString(); + }; + +var cleanResponse = function (originalResponse) { + // If this is not a redirected response, then we don't have to do anything. + if (!originalResponse.redirected) { + return Promise.resolve(originalResponse); + } + + // Firefox 50 and below doesn't support the Response.body stream, so we may + // need to read the entire body to memory as a Blob. + var bodyPromise = 'body' in originalResponse ? + Promise.resolve(originalResponse.body) : + originalResponse.blob(); + + return bodyPromise.then(function(body) { + // new Response() is happy when passed either a stream or a Blob. + return new Response(body, { + headers: originalResponse.headers, + status: originalResponse.status, + statusText: originalResponse.statusText + }); + }); + }; + +var createCacheKey = function (originalUrl, paramName, paramValue, + dontCacheBustUrlsMatching) { + // Create a new URL object to avoid modifying originalUrl. + var url = new URL(originalUrl); + + // If dontCacheBustUrlsMatching is not set, or if we don't have a match, + // then add in the extra cache-busting URL parameter. + if (!dontCacheBustUrlsMatching || + !(url.pathname.match(dontCacheBustUrlsMatching))) { + url.search += (url.search ? '&' : '') + + encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue); + } + + return url.toString(); + }; + +var isPathWhitelisted = function (whitelist, absoluteUrlString) { + // If the whitelist is empty, then consider all URLs to be whitelisted. + if (whitelist.length === 0) { + return true; + } + + // Otherwise compare each path regex to the path of the URL passed in. + var path = (new URL(absoluteUrlString)).pathname; + return whitelist.some(function(whitelistedPathRegex) { + return path.match(whitelistedPathRegex); + }); + }; + +var stripIgnoredUrlParameters = function (originalUrl, + ignoreUrlParametersMatching) { + var url = new URL(originalUrl); + // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290 + url.hash = ''; + + url.search = url.search.slice(1) // Exclude initial '?' + .split('&') // Split into an array of 'key=value' strings + .map(function(kv) { + return kv.split('='); // Split each 'key=value' string into a [key, value] array + }) + .filter(function(kv) { + return ignoreUrlParametersMatching.every(function(ignoredRegex) { + return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes. + }); + }) + .map(function(kv) { + return kv.join('='); // Join each [key, value] array into a 'key=value' string + }) + .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each + + return url.toString(); + }; + + +var hashParamName = '_sw-precache'; +var urlsToCacheKeys = new Map( + precacheConfig.map(function(item) { + var relativeUrl = item[0]; + var hash = item[1]; + var absoluteUrl = new URL(relativeUrl, self.location); + var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false); + return [absoluteUrl.toString(), cacheKey]; + }) +); + +function setOfCachedUrls(cache) { + return cache.keys().then(function(requests) { + return requests.map(function(request) { + return request.url; + }); + }).then(function(urls) { + return new Set(urls); + }); +} + +self.addEventListener('install', function(event) { + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return setOfCachedUrls(cache).then(function(cachedUrls) { + return Promise.all( + Array.from(urlsToCacheKeys.values()).map(function(cacheKey) { + // If we don't have a key matching url in the cache already, add it. + if (!cachedUrls.has(cacheKey)) { + var request = new Request(cacheKey, {credentials: 'same-origin'}); + return fetch(request).then(function(response) { + // Bail out of installation unless we get back a 200 OK for + // every request. + if (!response.ok) { + throw new Error('Request for ' + cacheKey + ' returned a ' + + 'response with status ' + response.status); + } + + return cleanResponse(response).then(function(responseToCache) { + return cache.put(cacheKey, responseToCache); + }); + }); + } + }) + ); + }); + }).then(function() { + + // Force the SW to transition from installing -> active state + return self.skipWaiting(); + + }) + ); +}); + +self.addEventListener('activate', function(event) { + var setOfExpectedUrls = new Set(urlsToCacheKeys.values()); + + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return cache.keys().then(function(existingRequests) { + return Promise.all( + existingRequests.map(function(existingRequest) { + if (!setOfExpectedUrls.has(existingRequest.url)) { + return cache.delete(existingRequest); + } + }) + ); + }); + }).then(function() { + + return self.clients.claim(); + + }) + ); +}); + + +self.addEventListener('fetch', function(event) { + if (event.request.method === 'GET') { + // Should we call event.respondWith() inside this fetch event handler? + // This needs to be determined synchronously, which will give other fetch + // handlers a chance to handle the request if need be. + var shouldRespond; + + // First, remove all the ignored parameters and hash fragment, and see if we + // have that URL in our cache. If so, great! shouldRespond will be true. + var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching); + shouldRespond = urlsToCacheKeys.has(url); + + // If shouldRespond is false, check again, this time with 'index.html' + // (or whatever the directoryIndex option is set to) at the end. + var directoryIndex = 'index.html'; + if (!shouldRespond && directoryIndex) { + url = addDirectoryIndex(url, directoryIndex); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond is still false, check to see if this is a navigation + // request, and if so, whether the URL matches navigateFallbackWhitelist. + var navigateFallback = ''; + if (!shouldRespond && + navigateFallback && + (event.request.mode === 'navigate') && + isPathWhitelisted([], event.request.url)) { + url = new URL(navigateFallback, self.location).toString(); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond was set to true at any point, then call + // event.respondWith(), using the appropriate cache key. + if (shouldRespond) { + event.respondWith( + caches.open(cacheName).then(function(cache) { + return cache.match(urlsToCacheKeys.get(url)).then(function(response) { + if (response) { + return response; + } + throw Error('The cached response that was expected is missing.'); + }); + }).catch(function(e) { + // Fall back to just fetch()ing the request if some unexpected error + // prevented the cached response from being valid. + console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e); + return fetch(event.request); + }) + ); + } + } +}); + + + + + + + diff --git a/docs/book.json b/docs/book.json new file mode 100644 index 0000000..71f8e87 --- /dev/null +++ b/docs/book.json @@ -0,0 +1,10 @@ +{ + "title": "Luxcena-Neo wiki", + "author": "JakobST1n", + "plugins": ["code", "pretty-term", "hints", "comment", "github", "emphasize", "api", "offline"], + "pluginsConfig": { + "github": { + "url": "https://github.com/jakobst1n/lucena-neo" + } + } +} diff --git a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py index f9c94a0..9d45457 100644 --- a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py +++ b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py @@ -1,5 +1,10 @@ from neopixel import * +class Matrix: + + def __init__(self, matrix, segments): + self.t = [] + class Strip: def __init__(self, stripConf): @@ -8,10 +13,10 @@ class Strip: self.LED_FREQ_HZ = stripConf["led_freq_hz"] # LED signal frequency in hertz (usually 800khz) self.LED_CHANNEL = stripConf["led_channel"] # Set to '1' for GPIOs 13, 19, 41, 45, 53 - self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) - self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 - self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 - self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip + self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) + self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 + self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 + self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip self.LED_BRIGHTNESS = 255 @@ -28,6 +33,12 @@ class Strip: self.strip.begin() + # Setup matrix + try: + pixelMatrix = new Matrix(stripConf["matrix"], self.segments) + except: + print("Something went wrong while setting up your self-defined matrix.") + def show(self): """Update the display with the data from the LED buffer.""" self.strip.show() @@ -77,3 +88,9 @@ def Color(red, green, blue, white = 0): and 255 is the highest intensity. """ return (white << 24) | (red << 16)| (green << 8) | blue + +def hexColor(value): + value = value.lstrip('#') + lv = len(value) + rgb = tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3)) + return (0 << 24) | (rgb[1] << 16) | (rgb[0] << 8) | rgb[2] -- cgit v1.2.3